Aller au contenu

Latus

·11 mins· loading · loading · ·
HackTheBox Sherlock Hard Windows
Jaybird1291
Auteur
Jaybird1291
Sommaire

Scénario
#

Le 28 juin, notre client a détecté des sessions RDP non autorisées, sans déploiement de PAM, dans leur environnement. Ils ont récupéré des preuves sur un serveur qu’ils suspectaient de servir de pivot pour un mouvement latéral vers d’autres cibles. Même si l’attaquant a supprimé les events log, je pense que les quelques artefacts restants suffisent à confirmer le déroulement de l’attaque et à retracer le comportement de l’assaillant.

Setup
#

Pour ce Sherlock nous allons utiliser :

  • Zimmerman Tools (EvtxECmd, Registry Explorer, Timeline Explorer, PECmd, WxTCmd…)
  • Impacket (secretsdump.py)
  • NirSoft DataProtectionDecryptor
  • ANSSI BMC-tools
  • BSI-Bund RdpCacheStitcher

On va aussi s’appuyer sur des cheatsheets tels que celle de la FOR500 de SANS et celle portant sur les registres windows de 13Cubed :

Question 1
#

Quand a eu lieu la dernière tentative de connexion Ă©chouĂ©e utilisant l’utilisateur emman.t ? (UTC)

Premièrement on va vĂ©rifier si, comme le scĂ©nario l’explique, les events logs ont bien Ă©tĂ© effacĂ©s. Pour cela, nous allons utiliser les tools de Zimmerman EvtxECmd et Timeline Explorer afin de rĂ©pondre Ă  cette question.

EvtxECmd.exe -d "C:/C___NONAME [NTFS]\[root]\Windows\System32\winevt\Logs" --csv "C:\Users\username\Desktop\HTB\latus"

On recherche l’ID 4625 (Account failed to log on), mais RAS.

Et effectivement on voit bien que les logs ont été effacés :

Il nous reste cependant une chance de les retrouver si on dispose de VSS (Volume Shadow Copy).

Le (VSS) est une fonctionnalité Windows qui crée des snapshots de l’état d’un disque à un moment donné. Si des VSS sont disponibles, on peut retrouver des versions antérieures de fichiers supprimés ou altérés, y compris les events log. Donc, même si un attaquant a effacé les logs sur la machine en live, il est parfois possible de récupérer ceux qui existaient au moment où le snapshot VSS a été créé.

Malheureusement, après vĂ©rification, on n’a pas de VSS. On est donc obligĂ© de se rediriger sur les Registry.

Pour ça nous allons utiliser un autre outil de Zimmerman, Registry Explorer.

On va aller voir du côté de la registry hive SAM. En effet, on pourra y retrouver des artéfacts dans SAM\Domains\Account\Users tels que :

  • last login time
  • last incorrect password
  • last password change
  • login counts
  • group membership
  • account creation time etc.

Pour cela, on va charger le fichier C___NONAME [NTFS]\[root]\Windows\System32\config\SAM dans Registry Explorer :

Et effectivement on retrouve le “Last Incorrect Password”

RĂ©ponse : 2024-06-26 07:24:35


Question 2
#

Quelles sont les 3 premières adresses IP auxquelles emman.t s’est connectĂ© via Remote Desktop (RDP) ?

Pour rĂ©pondre Ă  cette question on va aller regarder du cĂ´tĂ© du NTUSER.dat. C’est la registry hive situĂ©e dans le dossier de profil de l’utilisateur, il contient toutes les configurations personnelles et le prĂ©fĂ©rences de l’environnement de bureau.

Lorsqu’un utilisateur se connecte, ce fichier est chargĂ© pour appliquer ses paramètres spĂ©cifiques (les paramètres d’application, l’historique des activitĂ©s, etc.).

On va particulièrement porter notre attention sur HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client car c’est ici que sont stockĂ©s les paramètres RDP et la liste des serveurs auxquels l’utilisateur s’est connectĂ© via RDP.

On charge donc le fichier NTUSER.dat de l’utilisateur en question dans Registry Explorer et on se rend au chemin voulu :

RĂ©ponse : 192.168.86.250,192.168.25.128,192.168.25.131


Question 3
#

Quel est le nom d’utilisateur de destination utilisĂ© pour se connecter en Remote Desktop pour la première fois le 2024-06-20 Ă  16:01:05 UTC ?

On a déjà la réponse sur le screen de la question 2.

RĂ©ponse : tommyxiaomi


Question 4
#

Quelle est l’adresse IP de destination de la dernière session Remote Desktop (RDP) ?

Idem.

RĂ©ponse : 192.168.70.133


Question 5
#

emman.t est très nĂ©gligent en sauvegardant systĂ©matiquement ses identifiants RDP pour se connecter Ă  d’autres hĂ´tes, ce qui laisse penser que l’attaquant les a, d’une manière ou d’une autre, divulguĂ©s. Pouvez-vous confirmer les identifiants divulguĂ©s du serveur avec l’IP 192.168.70.133 ?

Cette question est un petit défi très intéressant.

Premièrement, allons droit au but, oĂą pouvons-nous trouver les credentials RDP ? Lorsqu’on se connecte en RDP via l’application de Microsoft par dĂ©faut, l’app nous propose de sauvegarder les credentials :

Pour stocker ces credentials, Windows utilise le système de Credential Manager pour gĂ©rer et stocker de manière “sĂ©curisĂ©e”. Lorsque l’utilisateur sauvegarde ses identifiants lors d’une connexion RDP, ces credentials sont enregistrĂ©s dans le dossier spĂ©cifique de l’utilisateur, ici situĂ© Ă  C:\Users\emman.t\AppData\Local\Microsoft\Credentials.

Credential Manager s’appuie sur la DPAPI (Data Protection API) afin de chiffrer les informations d’authentifications. L’API est très straightforward :

DPAPI_IMP BOOL CryptProtectData(
  [in]              DATA_BLOB                   *pDataIn,
  [in, optional]    LPCWSTR                     szDataDescr,
  [in, optional]    DATA_BLOB                   *pOptionalEntropy,
  [in]              PVOID                       pvReserved,
  [in, optional]    CRYPTPROTECT_PROMPTSTRUCT   *pPromptStruct,
  [in]              DWORD                       dwFlags,
  [out]             DATA_BLOB                   *pDataOut
);

Cette API est largement utilisĂ©e par Microsoft et d’autres applications telles que Chrome, Edge etc. afin de stocker des mots de passe et autres secrets en tout genre.

DPAPI fonctionne en utilisant des clĂ©s appelĂ©es masterkeys. Ces masterkeys servent Ă  chiffrer les donnĂ©es protĂ©gĂ©es par DPAPI. Chaque masterkey est elle-mĂŞme chiffrĂ©e Ă  l’aide d’un dĂ©rivĂ© du mot de passe de l’utilisateur ou de la clĂ© système DPAPI.

Ces masterkeys sont stockées dans :

  • Pour l’utilisateur : C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>
  • Pour le système : C:\Windows\System32\Microsoft\Protect\S-1-5-18

Ces masterkeys :

  • sont renouvelĂ©s automatiquement tous les 3 mois ou après un changement de mot de passe utilisateur.
  • mise en cache (stockage temporaire en clair) dans le processus LSASS (très utile memory forensic ou alors en pentest)

Voici comment fonctionne le mécanisme DPAPI :

Au centre, on retrouve la masterkey qui est la clé principale utilisée par DPAPI pour chiffrer et déchiffrer des secrets.

Cette Masterkey est elle-mĂŞme chiffrĂ©e et protĂ©gĂ©e. Selon la situation, elle peut ĂŞtre dĂ©chiffrĂ©e Ă  partir de diffĂ©rentes clĂ©s : - Le NT hash du mot de passe utilisateur d’un compte de domaine. - Le hash SHA1 du mot de passe d’un compte utilisateur local. - Une clĂ© machine nommĂ©e Domain Backup Key, spĂ©cifique aux environnements Active Directory, permettant de dĂ©chiffrer les masterkeys sans avoir le mot de passe utilisateur, si l’on possède les droits suffisants.

Une fois la Masterkey dĂ©chiffrĂ©e grâce Ă  l’une de ces clĂ©s, elle permet de dĂ©river une clĂ© de session (Session Key), qui est directement utilisĂ©e pour chiffrer ou dĂ©chiffrer les donnĂ©es protĂ©gĂ©es par DPAPI.

Pour dĂ©chiffrer des donnĂ©es protĂ©gĂ©es par DPAPI on peut s’aider de pas mal de tool :

Si vous souhaitez rentrer davantage dans les dĂ©tails de la DPAPI, je vous invite Ă  lire cette publication de Synacktiv (l’explication ci-dessus est basĂ© sur le post): https://www.synacktiv.com/publications/windows-secrets-extraction-a-summary

Maintenant qu’on sait tout ça, comment peut-on l’appliquer Ă  notre situation ? Ici j’ai souhaitĂ© partir sur :

  • Impacket (secretsdump.py)
  • NirSoft DataProtectionDecryptor

Le script secretsdump.py va nous permettre de rĂ©cupĂ©rer le mot de passe de l’utilisateur en question afin de pouvoir dĂ©chiffrer les secrets DPAPI :

secretsdump.py -sam "C:\C___NONAME [NTFS]\[root]\Windows\System32\SAM" --security "C:\C___NONAME [NTFS]\[root]\Windows\System32\SECURITY" --system  "C:\C___NONAME [NTFS]\[root]\Windows\System32\SYSTEM" LOCAL

Parfait, on a rĂ©cupĂ©rĂ© le hash du mot de passe de l’utilisateur en question, on peut ensuite le bruteforce :

Maintenant qu’on a son mot de passe on peut dĂ©chiffrer les credentials via l’outil DataProtectionDecryptor :

Il existe aussi une façon non intentionnel de trouver le mot de passe du user :

Effectivement, si on va dans l’historique des commandes powershell, on peut retrouver le moment ou le crĂ©ateur du challenge a crĂ©Ă© les users :

RĂ©ponse : Administrator:C@mv@0s3rv3r


Question 6
#

Quand l’application Remote Desktop Connection a-t-elle Ă©tĂ© exĂ©cutĂ©e pour la dernière fois ? (UTC)

Pour répondre à cette question on va se pencher sur les artéfacts Prefetch.

Le Prefetch est un mécanisme conçu pour accélérer le lancement des applications couramment utilisées en conservant certaines données relatives aux exécutions précédentes. Windows stocke ces informations sous forme de fichiers .pf dans le dossier suivant C:\Windows\Prefetch\.

Chaque fichier .pf contient notamment :

  • le nom de l’exĂ©cutable
  • le nombre de fois oĂą l’application a Ă©tĂ© lancĂ©e
  • les timestamps de dernière exĂ©cution
  • les chemins vers les fichiers associĂ©s et bibliothèques chargĂ©es durant le dĂ©marrage du processus

Dans le cas d’une connexion RDP, l’exĂ©cutable utilisĂ© est gĂ©nĂ©ralement MSTSC.EXE. L’analyse du fichier Prefetch associĂ© (MSTSC.EXE-XXXXXX.pf) permet ainsi de vĂ©rifier si une connexion RDP a Ă©tĂ© Ă©tablie depuis cette machine, ainsi que le moment prĂ©cis de son lancement.

Pour les charger dans Timeline Explorer on doit les parser, pour cela on va utiliser PECmd :

PECmd.exe -d "C:\___NONAME [NTFS]\[root]\Windows\Prefetch" --csv "C:\Users\username\Desktop\HTB\latus" 

Et effectivement on retrouve les informations de lancement de MSTSC.exe :

RĂ©ponse : 2024-06-28 13:56:48


Question 7
#

Quand l’application Remote Desktop Connection a-t-elle Ă©tĂ© fermĂ©e pour la dernière fois ? (UTC)

Premièrement on va chercher du côté du UserAssist (dans la registry hive NTUSER.dat) se situant : NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\.

Cette clé conserve l’historique d’utilisation des applications exécutées par l’utilisateur notamment :

  • le nombre d’exĂ©cutions d’un programme
  • le moment prĂ©cis de la dernière exĂ©cution de l’application
  • le moment prĂ©cis oĂą l’application a Ă©tĂ© fermĂ©e ou terminĂ©e (dernier arrĂŞt du processus)

Ces informations sont stockées dans des sous-clés encodées via ROT13 mais heureusement Registry Explorer nous rend tout cela lisible :

Mais ce qui nous choque en premier c’est la diffĂ©rence entre la valeur “Last Executed” contenu dans le UserAssist et la “Last Run” dans le Prefetch.

Pourquoi cette divergence entre Prefetch et UserAssist ?

  • Prefetch (.pf) :
    • Enregistre les exĂ©cutions directement au niveau du processus (mstsc.exe).
    • Le compteur augmente Ă  chaque chargement du processus en mĂ©moire, peu importe comment il est dĂ©marrĂ©.
  • UserAssist (registre) :
    • Enregistre uniquement les exĂ©cutions effectuĂ©es par interaction directe de l’utilisateur (ex : clic sur l’icĂ´ne, menu DĂ©marrer, barre de recherche, raccourci).
    • Ne comptabilise pas nĂ©cessairement les exĂ©cutions indirectes (exĂ©cution via ligne de commande, exĂ©cution automatique, scripts, etc.).

Donc on fait fausse route ici.

On peut alors se pencher sur la clé BAM (HKLM\SYSTEM\CurrentControlSet\Services\bam\UserSettings\) qui enregistre explicitement la durée de vie des applications.

En effet, BAM maintient pour chaque exécutable un historique précis comprenant :

  • le dernier moment d’exĂ©cution (lancement de l’application)
  • le moment prĂ©cis de fermeture (terminaison du processus)

Vous pouvez retrouver plus d’informations sur les artĂ©facts RDP ici : https://www.thedfirspot.com/post/lateral-movement-remote-desktop-protocol-rdp-artifacts

RĂ©ponse : 2024-06-28 14:01:26


Question 8
#

Quelle a Ă©tĂ© la durĂ©e de l’avant-dernière session RDP ?

Pour rĂ©pondre Ă  cette question on va se pencher sur l’ActivitiesCache.db :

Après l’avoir chargĂ© dans Timeline Explorer on voit bien les diffĂ©rentes “duration” des sessions RDP :

Pour une raison inconnue, la réponse prend -1 sec.

RĂ©ponse : 00:11:42


Question 9
#

Quand l’attaquant a-t-il dĂ©connectĂ© la dernière session Remote Desktop (RDP) ? (UTC)

Pour cela on va aller voir le fichier “Default.rdp” contenu dans le ...\Documents\ de l’utilisateur. En effet, ce fichier est gĂ©nĂ©rĂ© automatiquement par Windows lorsqu’une connexion RDP est Ă©tablie via l’application MSTSC.

On peut y retrouver :

  • l’adresse IP ou nom du serveur utilisĂ© lors de la dernière connexion RDP
  • le nom d’utilisateur ayant Ă©tĂ© utilisĂ© pour la connexion
  • le paramètres graphiques (rĂ©solution, couleurs, etc.)
  • l’options de partage des pĂ©riphĂ©riques locaux (presse-papiers, disques locaux, imprimantes, etc.)
  • les paramètres de performances (qualitĂ© graphique, compression, etc.).

Mais on peut aussi voir quand est-ce que le fichier a été modifié pour la dernière fois :

RĂ©ponse : 2024-06-28 13:51:03


Question 10
#

Quelle est la taille du bureau à distance configuré ?

On retourne sur le fichier Default.rdp et on y retrouve :

RĂ©ponse : 1920:1080


Question 11
#

Quel outil l’attaquant a-t-il utilisĂ© pour explorer le rĂ©seau après s’ĂŞtre dĂ©placĂ© latĂ©ralement vers 192.168.70.133 ?

Pour répondre à cette question on va devoir chercher du côté du cache bitmap RDP.

Lors de l’analyse des sessions utilisant le protocole RDP (Remote Desktop Protocol) sous Windows, le cache bitmap RDP constitue un artefact souvent négligé, mais pourtant très pertinent en forensic.

Ce cache permet d’amĂ©liorer les performances des sessions RDP en stockant localement des sections d’Ă©cran dĂ©jĂ  affichĂ©es. Ainsi, lorsqu’une partie de l’Ă©cran reste statique, le système peut rapidement rĂ©cupĂ©rer l’image en mĂ©moire locale plutĂ´t que de la recharger Ă  distance, ce qui fluidifie l’expĂ©rience utilisateur.

D’un point de vue forensic, ce cache peut reprĂ©senter une source prĂ©cieuse d’informations. En effet, l’analyse des fichiers du cache bitmap peut rĂ©vĂ©ler des dĂ©tails sensibles sur les activitĂ©s de l’utilisateur, telles que les fenĂŞtres ouvertes, les contenus affichĂ©s ou les actions rĂ©alisĂ©es pendant la session RDP.

Si vous voulez plus d’informations je vous invite Ă  lire le post : https://www.cyberengage.org/post/analyzing-and-extracting-bitmap-cache-files-from-rdp-sessions.

On retrouve ces fichiers ici C:\Users\user\AppData\Local\Microsoft\Terminal Server Client\Cache\.

Pour les parser & exporter on va utiliser le tool de l’ANSSI “BMC-Tools”.

Ensuite, on va utiliser le tool de la BSI Bund “RdpCacheStitcher” pour les analyser :

En reconstruisant, on voit donc bien que l’attaquant a utilisĂ© “NetBScanner” pour scanner le rĂ©seau.

RĂ©ponse : NetBScanner


Question 12
#

Quand l’attaquant a-t-il supprimĂ© le journal des Ă©vĂ©nements ? (UTC)

On revient sur ce qu’on avait trouvĂ© lors de la question 1 :

RĂ©ponse : 2024-06-28 14:03:25


Question 13
#

Ă€ quelle heure l’attaquant a-t-il dĂ©connectĂ© la session vers 192.168.70.129 ? (UTC)

Si on regarde juste après l’effacement des events log, on voit bien un “An account was logged off” :

RĂ©ponse : 2024-06-28 14:03:53


Lab terminé !