Groupes Windows et imbrication : modélisation des droits effectifs
Dans Windows et Active Directory, un groupe de sécurité est un principal détenant son propre SID qui sert à agréger d’autres principaux (utilisateurs, ordinateurs ou autres groupes).
La portée d’un groupe et sa capacité à franchir les frontières de domaines dépendent de son type et de son étendue (Scope) :
- Groupes locaux (SAM) : valables uniquement sur la machine locale.
- Groupes globaux de domaine (Global Groups) : regroupent des utilisateurs d’un même domaine pour leur attribuer un rôle.
- Groupes locaux de domaine (Domain Local Groups) : utilisés pour affecter des permissions d’accès aux ressources hébergées dans ce domaine.
- Groupes universels (Universal Groups) : stockés dans le Catalogue Global (GC), capables de contenir des membres de n’importe quel domaine de la forêt.
Pourquoi c’est important en DFIR
Section intitulée « Pourquoi c’est important en DFIR »L’analyse forensique des groupes est le cœur de la détection des élévations de privilèges discrètes et des mouvements latéraux :
- Prouver le chemin d’élévation indirecte : lorsqu’un utilisateur standard commet une action réservée aux administrateurs, l’analyste doit immédiatement reconstruire son arborescence d’appartenance transitive.
- Détecter les portes dérobées d’accès : les attaquants avancés (ex: APT29, ransomware FIN7) créent souvent un groupe anodin (ex:
Printer_Operators_L2), l’imbriquent discrètement dans un groupe sensible (BUILTIN\Administrators), puis ajoutent leur compte de persistance au premier groupe. - Comprendre la propagation cross-domaine : dans les architectures multi-domaines, un groupe local de domaine du Domaine B peut contenir un groupe global du Domaine A, permettant à des identités de A de posséder des accès administratifs sur B sans qu’aucun compte du Domaine B ne soit créé (voir Fiche 18 : Cross-Domain Group Membership and Foreign Security Principals).
Comment ça fonctionne
Section intitulée « Comment ça fonctionne »La règle d’architecture AGDLP / AGUDLP
Section intitulée « La règle d’architecture AGDLP / AGUDLP »Microsoft préconise la stratégie AGDLP (ou AGUDLP en multi-domaines) pour régir les autorisations :
- A (Accounts) : les comptes utilisateurs.
- G (Global Groups) : les comptes sont placés dans un groupe global représentant leur métier ou rôle (ex:
GG_Comptabilite). - U (Universal Groups) : en multi-forêts/multi-domaines, les groupes globaux sont agrégés dans un groupe universel.
- DL (Domain Local Groups) : les groupes globaux sont imbriqués dans un groupe local de domaine représentant l’accès à une ressource spécifique (ex:
DL_Partage_Compta_Lecture). - P (Permissions) : la permission NTFS ou de partage est accordée uniquement au groupe local de domaine.
[Compte Utilisateur (jdoe)] │ ▼ (Membre de)[Groupe Global (GG_Finance)] (Domaine A) │ ▼ (Imbriqué dans)[Groupe Local de Domaine (DL_Billing_Write)] (Domaine B) │ ▼ (DACL / ACE)[Dossier Sécurisé (\\FS01\Factures)]Le calcul du jeton d’accès lors du logon
Section intitulée « Le calcul du jeton d’accès lors du logon »Lorsque l’utilisateur s’authentifie, le système résout récursivement toutes ses appartenances directes et indirectes :
- Le DC évalue les groupes globaux et universels du domaine.
- La machine locale contactée évalue les groupes locaux de domaine et les groupes locaux SAM.
- L’ensemble de ces SIDs est injecté dans le champ
Groupsdu jeton d’accès du processus.
Ce qui est possible
Section intitulée « Ce qui est possible »- Imbriquer des groupes locaux dans d’autres groupes locaux : impossible dans la SAM locale, mais un groupe global peut être membre d’un groupe local SAM.
- Hériter des privilèges de multiples niveaux d’imbrication : si
User Aest dansGroup 1, qui est dansGroup 2, qui est dansGroup 3, qui est dansAdministrators,User Apossède tous les privilèges administratifs locaux. - Vérifier l’appartenance effective en temps réel : la commande
whoami /groupsaffiche tous les SIDs de groupes effectivement présents dans le jeton actif, y compris les appartenances indirectes.
Ce qui n’est pas possible
Section intitulée « Ce qui n’est pas possible »- Un groupe global ne peut pas contenir de membres issus d’autres domaines : un groupe global n’accepte que des comptes ou des groupes globaux issus de son propre domaine.
- Un groupe local de domaine ne peut pas être utilisé pour assigner des permissions dans un autre domaine : sa portée est strictement confinée au domaine qui l’héberge.
- Actualiser les droits d’un groupe sans réouverture de session : si un attaquant est ajouté à un groupe alors que sa session est ouverte, son jeton d’accès actif ne change pas. Il doit fermer sa session et se reconnecter, ou forcer le renouvellement de son ticket TGT Kerberos.
Confusions fréquentes
Section intitulée « Confusions fréquentes »Exemple concret : l’attaque de persistance par imbrication cachée
Section intitulée « Exemple concret : l’attaque de persistance par imbrication cachée »- L’attaquant dispose d’un accès administrateur éphémère. Il veut installer une porte dérobée discrète.
- Il crée un groupe de sécurité
VPN_Monitoring_Service. - Il ajoute
VPN_Monitoring_Servicecomme membre du groupeDnsAdmins. - Il ajoute son compte non privilégié
CORP\jdoecomme membre deVPN_Monitoring_Service. - Lors d’un audit de sécurité standard, l’équipe SOC examine les membres directs de
Domain AdminsetAdministrators: rien d’anormal. - L’attaquant utilise son compte
jdoepour exploiter le vecteurDnsAdmins(chargement d’une DLL système par le service DNS du DC) et réexécuter du code arbitraire sousSYSTEMsur le contrôleur de domaine (voir Fiche 28 : domain controllers as lateral movement hubs).
Artefacts / traces
Section intitulée « Artefacts / traces »Dans Security.evtx sur les contrôleurs de domaine :
EventID: 4728 # Membre ajouté à un groupe de sécurité globalTargetUserName: GG_SupportMemberSid: S-1-5-21-111111111-222222222-333333333-1145SubjectUserName: Administrator
EventID: 4732 # Membre ajouté à un groupe de sécurité localTargetUserName: AdministratorsMemberSid: S-1-5-21-111111111-222222222-333333333-1080 (GG_Support)Méthodes d’investigation
Section intitulée « Méthodes d’investigation »- Reconstituer récursivement tous les groupes d’un utilisateur (appartenance transitive) :
Fenêtre de terminal Get-ADUser -Identity "jdoe" | Get-ADPrincipalGroupMembership | Select-Object Name, GroupScope, SID - Détecter tous les membres transitifs d’un groupe privilégié :
Fenêtre de terminal Get-ADGroupMember -Identity "Administrators" -Recursive | Select-Object Name, SamAccountName, objectClass, SID - Cartographier les chemins d’attaque via BloodHound :
Utiliser SharpHound pour extraire le graphe complet des relations
MemberOfet exécuter la requête cypher :MATCH p=(u:User)-[:MemberOf*1..]->(g:Group) RETURN p
Points clés à retenir
Section intitulée « Points clés à retenir »- Les droits réels dépendent de l’imbrication transitive, jamais de la seule appartenance directe.
memberOfdans l’AD ne reflète pas les groupes indirects : utilisez toujours des requêtes récursives. :- L’ajout à un groupe ne modifie pas les sessions actives : une nouvelle authentification est obligatoire. :
- La surveillance des event IDs 4728 et 4732 est obligatoire pour détecter les modifications de groupes.