Aller au contenu

Appartenance à des groupes inter-domaines et foreign security principals

Lorsqu’un administrateur souhaite attribuer des droits sur une ressource du Domaine A à un utilisateur ou un groupe du Domaine B (relié par une approbation) :

  1. Le conteneur ForeignSecurityPrincipals : situé à la racine de la partition de domaine (CN=ForeignSecurityPrincipals,DC=domain,DC=local), il héberge des objets de classe foreignSecurityPrincipal.
  2. Représentation par SID : chaque FSP est nommé par le SID exact de l’entité externe (ex: CN=S-1-5-21-29482-1002,CN=ForeignSecurityPrincipals,DC=corp,DC=local).
  3. Le principe AGUDLP / AGDLP :
    • Accounts $ ightarrow$ mis dans des groupes Globaux (domaine de comptes).
    • Groupes Globaux $ ightarrow$ mis dans des groupes Universels (optionnel, forêt).
    • Groupes Universels $ ightarrow$ mis dans des groupes Domaine Local (domaine de ressource, sous forme de FSP).
    • Groupes Domaine Local $ ightarrow$ reçoivent les Permissions sur les ressources (DACL).

L’audit des Foreign Security Principals est le moyen le plus rapide d’identifier comment des comptes externes ont pénétré le domaine :

  • Identification des portes dérobées inter-domaines : si un groupe global d’une forêt externe est ajouté dans le groupe local Administrators ou Remote Desktop Users du domaine local, un objet FSP est immédiatement créé dans l’annuaire. C’est un indicateur immédiat de chemin d’accès externe.
  • Persistance fantôme (FSP persistence) : même si la relation de confiance est supprimée ou désactivée, les objets FSP orphelins et leurs références dans les groupes locaux de domaine subsistent dans l’annuaire.
  • Résolution des SIDs dans BloodHound : lorsqu’un chemin d’attaque traverse une approbation, le lien MemberOf passe obligatoirement par un FSP. Savoir corréler un FSP avec son compte réel dans le domaine distant est indispensable.

DOMAINE B (Comptes) DOMAINE A (Ressources)
┌─────────────────────────┐ ┌──────────────────────────────────────────────┐
│ Compte Utilisateur : │ │ Conteneur : │
│ alice@domaineB.local │ │ CN=ForeignSecurityPrincipals,DC=domA,DC=loc │
│ SID: S-1-5-21-B-1005 │ ├──────────────────────────────────────────────┤
└───────────┬─────────────┘ │ Objet FSP créé automatiquement : │
│ │ CN=S-1-5-21-B-1005 │
│ Ajout dans groupe └──────────────────────┬───────────────────────┘
│ │
│ ▼ Membre de
│ ┌──────────────────────────────────────────────┐
└───────────────────────────────►│ Groupe Domaine Local : │
│ "DL_Serveurs_Admins" │
│ (Contient le FSP S-1-5-21-B-1005) │
└──────────────────────────────────────────────┘
  1. Création à la demande : l’objet FSP n’est pas créé lors de l’établissement de l’approbation : il est créé dynamiquement au moment où le premier compte ou groupe externe est sélectionné dans l’interface de délégation ou ajouté via LDAP.
  2. Traduction LSA : lors de l’affichage dans l’explorateur Windows, la fonction LookupAccountSid contacte le DC du Domaine B via l’approbation pour résoudre S-1-5-21-B-1005 en DOMAINEBlice. Si la confiance est rompue, seul le SID brut s’affiche.

  • Ajouter un groupe global externe dans un groupe domaine local : c’est le fonctionnement canonique prévu par Microsoft pour déléguer des accès cross-domaines.
  • Énumérer tous les comptes externes ayant des accès locaux en une seule commande : l’interrogation de l’unité d’organisation CN=ForeignSecurityPrincipals liste l’intégralité des identités externes ayant déjà reçu une assignation de droit dans le domaine.
  • Identifier les well-known SIDs représentés en FSP : certains SIDs universels comme S-1-5-11 (Authenticated Users) ou S-1-5-4 (Interactive) disposent de leurs propres objets FSP pré-créés.

  • Ajouter un utilisateur externe dans un groupe global local : les règles de portée Active Directory interdisent formellement d’ajouter un membre externe dans un groupe de portée Globale (Global Group). Seuls les groupes de portée Domaine Local (Domain Local) acceptent des membres cross-domaines / cross-forêts.
  • Créer manuellement un faux FSP sans que le SID n’existe : un administrateur peut créer un FSP pour n’importe quel SID arbitraire, mais sans ticket Kerberos valide ou sans validation Netlogon authentifiant ce SID, l’attaquant ne pourra pas utiliser les droits de ce FSP.
  • Déplacer un FSP dans une autre OU : les FSP doivent impérativement résider dans le conteneur système CN=ForeignSecurityPrincipals.

Confusion fréquenteRéalité forensique vérifiable
« Cet objet dans ForeignSecurityPrincipals prouve que le compte externe s’est connecté. »Non. Un FSP est créé lorsqu’un administrateur ajoute un compte ou un groupe externe dans un groupe ou une ACL locale, même si ce compte ne s’est jamais connecté.
« Si je supprime le compte distant, le FSP disparaît du domaine local. »Non. Le FSP reste orphelin dans le domaine de ressource jusqu’à ce qu’un administrateur nettoie explicitement le groupe local et le conteneur FSP.
« Les FSP ne s’appliquent qu’aux approbations de forêt. »Les FSP s’appliquent à tous les types d’approbations : Parent-Enfant, Externe, Forêt et Realm.

Lors de l’analyse d’une persistance post-compromission sur un domaine racine root.corp :

  1. L’enquêteur inspecte le groupe local Administrators (S-1-5-32-544) sur le DC racine.
  2. Il remarque un membre sous forme de SID non résolu : S-1-5-21-99887766-500.
  3. L’enquêteur consulte CN=ForeignSecurityPrincipals,DC=root,DC=corp et découvre un objet CN=S-1-5-21-99887766-500 dont l’attribut whenCreated coïncide avec la date de l’incident.
  4. L’analyse des approbations montre que S-1-5-21-99887766 correspond au domaine de test dev.local relié par une approbation bidirectionnelle.
  5. Conclusion : l’attaquant a ajouté le compte Administrateur local du domaine de dev directement dans les administrateurs du domaine racine via un FSP, lui garantissant un accès T0 permanent depuis l’environnement de développement.

  1. Active Directory naming context :
    • Conteneur CN=ForeignSecurityPrincipals,DC=domain,DC=local.
    • Attributs des objets FSP : cn (SID), whenCreated, whenChanged, memberOf (liste des groupes locaux de domaine dont le FSP fait partie).
  2. Journaux de sécurité DC :
    • Event ID 4728 / 4732 : un membre a été ajouté à un groupe de sécurité (le champ MemberName contiendra le DistinguishedName du FSP).
    • Event ID 4729 / 4733 : un membre a été retiré d’un groupe de sécurité.

  1. Lister tous les foreign security principals du domaine : Exécuter Get-ADObject -Filter 'objectClass -eq "foreignSecurityPrincipal"' -Properties *.
  2. Identifier les groupes privilégiés contenant des FSP : Vérifier si des FSP figurent dans Administrators, Backup Operators, Remote Desktop Users, Account Operators.
  3. Résoudre les SIDs distants : Contacter le DC du domaine distant ou examiner les bases NTDS archivées pour faire correspondre chaque SID de FSP à une identité nominale.

  • PowerShell AD module :
    Fenêtre de terminal
    Get-ADObject -SearchBase "CN=ForeignSecurityPrincipals,DC=domain,DC=local" -Filter * -Properties memberOf |
    Select-Object Name, whenCreated, memberOf
  • PowerView :
    Fenêtre de terminal
    Get-DomainForeignUser
    Get-DomainForeignGroupMember
  • BloodHound : Requête Cypher : MATCH (f:User)-[:MemberOf]->(g:Group) WHERE f.domain <> g.domain RETURN f, g pour révéler instantanément toutes les adhésions cross-domaines.

  • Les FSP matérialisent les identités externes dans le domaine local de ressources.
  • L’analyse de CN=ForeignSecurityPrincipals permet de cartographier tous les accès inter-domaines accordés.
  • Seuls les groupes de portée Domaine Local peuvent contenir des membres externes d’autres forêts.
  • L’Event ID 4732 consigne l’ajout d’un FSP dans un groupe local.