Aller au contenu

Mouvement latéral entre domaines Active Directory : méthodes, chemins et contraintes

Le mouvement latéral inter-domaines (Cross-Domain Lateral Movement) désigne l’ensemble des techniques permettant à un adversaire ayant pris pied dans un domaine source (DOMAINE_A) d’étendre son emprise sur des systèmes, des données ou des contrôleurs appartenant à un domaine distinct (DOMAINE_B).

Ces mouvements s’exécutent selon deux grandes topologies :

  • Intra-forêt : entre deux domaines d’une même forêt (Parent-Enfant, Arbre). Les relations de confiance sont transitives et bidirectionnelles.
  • Inter-forêts : entre deux forêts distinctes reliées par une relation d’approbation de forêt (Forest Trust) ou externe (External Trust).

Comprendre la mécanique des franchissements inter-domaines permet de :

  • Traquer l’origine de l’infection lors d’attaques multi-domaines : un ransomware déployé sur le Domaine B a fréquemment débuté des jours plus tôt par un phishing sur un poste d’un Domaine A subsidiaire ou de développement.
  • Déceler les autoroutes invisibles : les attaquants privilégient souvent les chemins les moins surveillés (ex: compromettre un compte de service du domaine enfant disposant de droits d’administration délégués sur un serveur passerelle du domaine parent).
  • Identifier les brèches de cloisonnement réseau et d’architecture : la présence d’une approbation active implique l’ouverture de ports RPC/SMB/Kerberos qui court-circuitent les pare-feux internes.

Matrice des méthodes de mouvement latéral inter-domaines

Section intitulée « Matrice des méthodes de mouvement latéral inter-domaines »
┌────────────────────────────────────────────────────────────────────────────┐
│ MÉTHODES DE FRANCHISSEMENT DE DOMAINE EN DFIR │
├────────────────────────────────────────────────────────────────────────────┤
│ 1. Exploitation sIDHistory (Intra-forêt ou si Quarantine désactivée) │
│ -> Forge d'Inter-Realm TGT avec RID 512/519 dans sIDHistory. │
├────────────────────────────────────────────────────────────────────────────┤
│ 2. Abus des Foreign Security Principals (FSP) │
│ -> Un compte/groupe du Domaine A est membre d'un groupe local dans B. │
├────────────────────────────────────────────────────────────────────────────┤
│ 3. Vol de sessions et de credentials en mémoire (LSASS Pivot) │
│ -> Un admin du Domaine B s'est connecté sur une machine du Domaine A. │
├────────────────────────────────────────────────────────────────────────────┤
│ 4. Abus de Délégation Kerberos (Unconstrained Delegation / RBCD) │
│ -> Capture de TGTs de comptes du Domaine B traversant le Domaine A. │
├────────────────────────────────────────────────────────────────────────────┤
│ 5. Kerberoasting cross-domaine │
│ -> Demande de TGS pour un SPN du Domaine B et cassage hors-ligne. │
└────────────────────────────────────────────────────────────────────────────┘

  • Franchir une frontière intra-forêt instantanément : avec le hash krbtgt d’un sous-domaine, la forge d’un ticket inter-domaine avec sIDHistory pour conquérir le domaine racine est mathématiquement garantie (en l’absence de durcissement manuel exceptionnel).
  • Pivoter vers un domaine sans relation de confiance par vol de session : si un administrateur du Domaine B se connecte en RDP sur un serveur du Domaine A (même sans aucune approbation entre A et B), son mot de passe ou son hash peut être extrait de LSASS par l’attaquant pour attaquer B.
  • Exploiter la resource-based constrained delegation (RBCD) cross-domaine : si un attaquant contrôle un compte d’ordinateur dans le Domaine A et dispose de droits en écriture sur l’attribut msDS-AllowedToActOnBehalfOfOtherIdentity d’un serveur du Domaine B, il peut compromettre ce serveur.

  • Franchir une approbation de forêt via sIDHistory si le SID filtering est actif : le KDC du domaine distant purge impitoyablement les SIDs étrangers avant d’accorder le TGS.
  • Effectuer un DCSync sur un DC du domaine b en utilisant les droits domain admin du domaine a : les droits de réplication AD ne sont pas partagés entre partitions de domaine ; le compte doit détenir explicitement les droits DS-Replication-Get-Changes-All sur la partition de B.
  • Utiliser NTLM pass-through si le canal netlogon inter-DC est bloqué au niveau réseau.

Confusion fréquenteRéalité forensique vérifiable
« L’attaquant n’a pas pu sauter de A vers B car il n’y a pas de relation d’approbation entre eux. »L’absence de confiance empêche l’authentification Kerberos/NTLM directe, mais n’empêche pas l’attaquant de voler des identifiants du Domaine B en mémoire sur les machines de A.
« Les mouvements latéraux inter-domaines laissent des traces sur un seul contrôleur de domaine. »Faux. Le saut génère des événements sur le DC source (demande de TGT/referral 4768/4769), sur le DC de ressource (validation de ticket 4769 / Netlogon 4776), et sur la machine cible (Logon 4624).
« Isoler le DC du Domaine A empêche tout accès vers le Domaine B. »Si l’attaquant dispose déjà de tickets Kerberos en cache ou de mots de passe de comptes du Domaine B, il peut attaquer B directement sans solliciter le DC de A.

Dans un groupe international, une attaque par ransomware commence dans la filiale australienne (apac.corp.local) :

  1. L’attaquant obtient les droits locaux sur un poste client à Sydney.
  2. Il cartographie les chemins avec BloodHound :
    • Le groupe APAC\Domain Users est imbriqué dans un groupe local CORP\Regional-Admins via un FSP sur le domaine racine.
    • Ce groupe Regional-Admins est administrateur local d’un serveur d’infrastructure JUMP-SRV dans le domaine racine corp.local.
  3. L’attaquant se connecte en SMB vers JUMP-SRV via un referral Kerberos.
  4. Sur JUMP-SRV, il dumpe LSASS et récupère les identifiants en clair d’un compte CORP\Enterprise Admins connecté en session RDP active.
  5. Résultat : l’attaquant a conquis le domaine racine en moins de 3 heures en combinant FSP et vol de credentials mémoire.

  1. Journaux de sécurité du DC du domaine source :
    • Event ID 4769 : demande de TGS avec ServiceName: krbtgt/DOMAINE_CIBLE (ticket referral).
  2. Journaux de sécurité du DC du domaine cible :
    • Event ID 4769 : TGS émis pour le service cible avec présentation d’un referral TGT.
    • Event ID 4675 : détection de filtrage de SIDs (si tentative d’injection sIDHistory bloquée).
  3. Journaux de sécurité de la machine cible :
    • Event ID 4624 (logon type 3) : TargetUserName et TargetDomainName identifiant le compte distant, LogonProcessName (Kerberos ou NtLmSsp).
    • Event ID 4672 : privilèges spéciaux attribués lors de l’ouverture de session.

  1. Reconstituer le graphe d’attaque initial : Utiliser BloodHound pour corréler les relations d’approbation (TrustedBy), les appartenances de groupes cross-domaines (MemberOf) et les sessions actives enregistrées.
  2. Analyser les TGS de type referral : Rechercher dans les événements 4769 de tous les DC les demandes ciblant des comptes de confiance inter-domaines (krbtgt/*).
  3. Traquer les connexions réseau type 3 inter-domaines : Isoler les événements 4624 sur les serveurs sensibles où TargetDomainName ne correspond pas au domaine local.

  • BloodHound / SharpHound :
    Fenêtre de terminal
    # Collecter les chemins d'attaque cross-domaines
    Invoke-BloodHound -CollectionMethod All,Trusts -Domain "corp.local"
  • Kansa / log parser :
    Fenêtre de terminal
    Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624} |
    Where-Object { $_.Properties[7].Value -eq 3 -and $_.Properties[5].Value -ne $env:USERDOMAIN } |
    Select-Object TimeCreated, @{N='Domain';E={$_.Properties[5].Value}}, @{N='User';E={$_.Properties[4].Value}}, @{N='IP';E={$_.Properties[18].Value}}

  • Les sauts inter-domaines s’appuient sur : approbations Kerberos/NTLM, FSP préexistants, ou vol de sessions en mémoire.
  • L’injection sIDHistory fonctionne par défaut en intra-forêt, mais est neutralisée par le SID Filtering inter-forêts.
  • La détection repose sur la corrélation croisée des Events 4769 sur les KDC et Events 4624 sur les cibles.