DCSync : fonctionnement, prérequis et artefacts forensiques
Développée en 2015 par Benjamin Delpy et Vincent Le Toux dans l’outil Mimikatz (lsadump::dcsync), l’attaque DCSync exploite le protocole légitime de réplication d’Active Directory (MS-DRSR - Directory Replication Service Remote Protocol) pour extraire à distance les hashs de mots de passe, clés Kerberos (AES, RC4) et historiques de mots de passe de n’importe quel compte de l’annuaire, y compris krbtgt.
L’attaque s’opère entièrement via des appels de procédure distante (RPC) sur l’interface drsuapi (UUID e3514235-4b06-11d1-ab04-00c04fc2dcd2) et ne nécessite aucun accès physique ou interactif au DC.
Pourquoi c’est important en DFIR
Section intitulée « Pourquoi c’est important en DFIR »DCSync est l’étape charnière qui transforme une compromission locale en domination totale et persistante :
- Extraction du secret suprême (
krbtgt) : une fois le hashkrbtgtextrait via DCSync, l’adversaire peut forger des Golden Tickets valables pendant des années, survivant même à la reconstruction complète des postes de travail. - Absence totale de traces d’exécution sur le DC : l’enquêteur qui cherche des exécutables suspects, des services temporaires (Event 7045) ou des logs PowerShell sur le contrôleur de domaine ne trouvera rien. Seuls les journaux d’accès au service d’annuaire (Event ID 4662) permettent de détecter l’attaque.
- Délégation abusive de droits de réplication : DCSync n’est pas réservé aux membres de
Domain Admins. Tout compte auquel ont été accordés des droits de réplication (souvent des comptes de synchronisation Azure AD Connect / Entra ID Connect) peut exécuter DCSync.
Comment ça fonctionne
Section intitulée « Comment ça fonctionne »Prérequis d’autorisation dans la DACL de l’objet domaine
Section intitulée « Prérequis d’autorisation dans la DACL de l’objet domaine »Pour qu’un compte puisse exécuter DCSync, il doit posséder les droits étendus (Extended Rights) suivants sur l’objet racine du domaine (DC=domain,DC=local) :
DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)DS-Replication-Get-Changes-In-Filtered-Set(requis uniquement dans certaines configurations avec contrôleurs de domaine en lecture seule - RODC).
Par défaut, seuls les groupes suivants possèdent ces droits :
Administrators(RID 544)Domain Admins(RID 512)Enterprise Admins(RID 519)Domain Controllers(RID 516)
Déroulement protocolaire de l’attaque
Section intitulée « Déroulement protocolaire de l’attaque »Attaquant (Poste compromis) Contrôleur de Domaine (DC) │ │ │ 1. Liaison RPC sur endpoint mapper (Port 135) │ ├────────────────────────────────────────────────────────►│ │◄────────────────────────────────────────────────────────┤ 2. Renvoie port RPC dynamique │ │ │ 3. DRSBind (Interface drsuapi sur port dynamique) │ ├────────────────────────────────────────────────────────►│ │◄────────────────────────────────────────────────────────┤ 4. Contexte de réplication validé │ │ │ 5. DRSGetNCChanges (Demande réplication de "krbtgt") │ ├────────────────────────────────────────────────────────►│ │ │ 6. Vérifie droits étendus dans DACL │ │ Génère Event ID 4662 │◄────────────────────────────────────────────────────────┤ 7. Renvoie attributs chiffrés : │ │ - unicodePwd (Hash NT) ▼ │ - supplementalCredentials (AES)Reconstitue les clés Kerberos & NTLM ▼Ce qui est possible
Section intitulée « Ce qui est possible »- Extraire les identifiants de n’importe quel compte sans redémarrer ni bloquer le DC : l’extraction est instantanée et silencieuse.
- Récupérer l’historique complet des anciens mots de passe : l’attribut
ntPwdHistoryest intégralement répliqué, permettant de reconstituer les pratiques de mot de passe des utilisateurs. - Détecter DCSync avec certitude si l’audit d’accès aux objets d’annuaire est activé : L’Event ID 4662 horodate précisément l’opération et identifie le compte source ainsi que l’adresse IP.
Ce qui n’est pas possible
Section intitulée « Ce qui n’est pas possible »- Exécuter DCSync sans détenir les droits étendus de réplication : si le compte ne détient pas
DS-Replication-Get-Changes-All, le DC renvoie immédiatement l’erreur RPCERROR_DS_DRA_ACCESS_DENIED(0x2004). - Exécuter DCSync si le port RPC dynamique OU le port 135 est filtré par le pare-feu du DC : le trafic exige une connectivité réseau directe vers le service RPC du DC.
- Masquer le compte demandeur dans l’event 4662 : le champ
SubjectUserNameetSubjectUserSidenregistre obligatoirement l’identité du compte qui a initié l’appelDRSGetNCChanges.
Confusions fréquentes en DFIR
Section intitulée « Confusions fréquentes en DFIR »| Confusion fréquente | Réalité forensique vérifiable |
|---|---|
| « L’attaquant a accédé au DC, nous devons analyser le master boot record et la mémoire du DC. » | DCSync est exécuté à distance depuis un poste client. Le DC n’a subi aucune intrusion système directe ni modification de fichiers. |
| « Seul le compte Domain Admin peut faire un DCSync. » | Faux. Les comptes de service de synchronisation d’annuaire (ex: MSOL_... pour Azure AD Connect) possèdent ces droits par conception et sont des cibles de choix. |
| « Un DCSync génère un événement 4624 de type 2 (Interactif) ou 10 (RDP). » | Non. DCSync génère un événement 4624 de Type 3 (réseau) via le protocole RPC. |
Exemple concret d’investigation
Section intitulée « Exemple concret d’investigation »Lors d’un audit de sécurité consécutif à une compromission de compte, l’analyste DFIR inspecte les journaux de sécurité du contrôleur de domaine principal DC01 :
- Recherche des événements 4662 :
- Horodatage : 03:22:15 UTC
SubjectUserName: svc_backupObjectServer: DSProperties: {1131f6ad-9c07-11d1-f79f-00c04fc2dcd2}(GUID deDS-Replication-Get-Changes-All)
- L’analyste examine le compte
svc_backup:- C’est un compte de service tiers, non membre de
Domain Admins, mais auquel un administrateur avait délégué les droits de réplication 6 mois plus tôt pour un script de synchronisation.
- C’est un compte de service tiers, non membre de
- Corrélation avec l’Event 4624 Type 3 :
- IP source :
10.10.4.88(un serveur applicatif compromis où le mot de passe desvc_backupétait stocké en clair dans un fichier de configuration).
- IP source :
- Diagnostic : l’attaquant a utilisé le compte de service pour exécuter
secretsdump.pyet dumper le hashkrbtgt. La réinitialisation immédiate du comptekrbtgtà deux reprises est ordonnée.
Artefacts et traces forensiques
Section intitulée « Artefacts et traces forensiques »- Journaux de sécurité DC (audit Directory service access) :
- Event ID 4662 : opération sur un objet d’annuaire.
ObjectType: {19195a5b-6da0-11d0-afd3-00c04fd930c9}(ClassedomainDNS).AccessMask: 0x100(Control Access).Properties: contient le GUID1131f6ad-9c07-11d1-f79f-00c04fc2dcd2.
- Event ID 4624 (logon type 3) : connexion RPC associée au compte appelant.
- Event ID 4662 : opération sur un objet d’annuaire.
- Surveillance réseau :
- Paquets RPC vers l’interface
drsuapi(requêtesDRSGetNCChanges) émis par une adresse IP qui n’est pas un contrôleur de domaine répertorié.
- Paquets RPC vers l’interface
Méthodes d’investigation
Section intitulée « Méthodes d’investigation »- Auditer les droits de réplication dans l’annuaire :
Lister tous les comptes non-DC qui possèdent
DS-Replication-Get-Changes-Allsur la racine du domaine. - Filtrer l’event ID 4662 sur les DC :
Isoler les événements 4662 contenant le GUID de réplication, et exclure les comptes machines des contrôleurs de domaine légitimes (
$). - Identifier l’adresse IP d’origine :
Corréler le
Logon IDde l’Event 4662 avec l’Event 4624 correspondant pour localiser la machine d’où l’attaque a été lancée.
Outils d’investigation
Section intitulée « Outils d’investigation »- PowerView / ActiveDirectory PowerShell :
Fenêtre de terminal # Identifier les comptes disposant des droits DCSyncGet-DomainObjectAcl -SearchBase "DC=corp,DC=local" -ResolveGUIDs |Where-Object { $_.ActiveDirectoryRights -match 'ExtendedRight' -and ($_.SecurityIdentifier -match '1131f6ad-9c07-11d1-f79f-00c04fc2dcd2' -or $_.AceQualifier -eq 'AccessAllowed') } - Kansa / log parser :
Fenêtre de terminal Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4662} |Where-Object { $_.Message -like '*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*' } |Select-Object TimeCreated, @{N='Account';E={$_.Properties[1].Value}}
Points clés à retenir
Section intitulée « Points clés à retenir »- DCSync est une attaque réseau RPC (DRSUAPI), sans injection de code sur le contrôleur de domaine.
- Elle exige les droits étendus
DS-Replication-Get-ChangesetDS-Replication-Get-Changes-All. - L’attaque génère l’Event ID 4662 sur le DC cible avec le GUID de réplication.
- Tout appel de réplication émis par une machine qui n’est pas un DC légitime est une alerte critique d’extrusion de base NTDS.