Aller au contenu

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.


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 hash krbtgt extrait 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.

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) :

  1. DS-Replication-Get-Changes (GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
  2. DS-Replication-Get-Changes-All (GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
  3. 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)
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 ▼

  • 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 ntPwdHistory est 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.

  • 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 RPC ERROR_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 SubjectUserName et SubjectUserSid enregistre obligatoirement l’identité du compte qui a initié l’appel DRSGetNCChanges.

Confusion fréquenteRé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.

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 :

  1. Recherche des événements 4662 :
    • Horodatage : 03:22:15 UTC
    • SubjectUserName: svc_backup
    • ObjectServer: DS
    • Properties: {1131f6ad-9c07-11d1-f79f-00c04fc2dcd2} (GUID de DS-Replication-Get-Changes-All)
  2. 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.
  3. Corrélation avec l’Event 4624 Type 3 :
    • IP source : 10.10.4.88 (un serveur applicatif compromis où le mot de passe de svc_backup était stocké en clair dans un fichier de configuration).
  4. Diagnostic : l’attaquant a utilisé le compte de service pour exécuter secretsdump.py et dumper le hash krbtgt. La réinitialisation immédiate du compte krbtgt à deux reprises est ordonnée.

  1. 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} (Classe domainDNS).
      • AccessMask: 0x100 (Control Access).
      • Properties : contient le GUID 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2.
    • Event ID 4624 (logon type 3) : connexion RPC associée au compte appelant.
  2. Surveillance réseau :
    • Paquets RPC vers l’interface drsuapi (requêtes DRSGetNCChanges) émis par une adresse IP qui n’est pas un contrôleur de domaine répertorié.

  1. Auditer les droits de réplication dans l’annuaire : Lister tous les comptes non-DC qui possèdent DS-Replication-Get-Changes-All sur la racine du domaine.
  2. 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 ($).
  3. Identifier l’adresse IP d’origine : Corréler le Logon ID de l’Event 4662 avec l’Event 4624 correspondant pour localiser la machine d’où l’attaque a été lancée.

  • PowerView / ActiveDirectory PowerShell :
    Fenêtre de terminal
    # Identifier les comptes disposant des droits DCSync
    Get-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}}

  • 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-Changes et DS-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.