Audit de la configuration d'Azure Active Directory
Quand l'utiliser
- Lors d'une évaluation de sécurité de la configuration identitaire d'un tenant Azure
- Quand des audits de conformité exigent la revue des politiques d'authentification, de l'application de la MFA et des attributions de rôles
- Lors de l'intégration d'un nouveau tenant Azure après une fusion ou acquisition
- Quand vous enquêtez sur une activité de connexion suspecte ou des comptes compromis
- Pour valider que les politiques d'accès conditionnel protègent correctement contre les attaques basées sur l'identité
Ne pas utiliser pour l'audit Active Directory sur site (utilisez PingCastle ou BloodHound AD), pour l'audit RBAC au niveau des ressources Azure sans contexte identitaire, ni pour la détection de menaces en temps réel (utilisez Microsoft Defender for Identity).
Prérequis
- Rôle Global Reader ou Security Reader dans le tenant Microsoft Entra ID cible
- Kit SDK Microsoft Graph PowerShell installé (
Install-Module Microsoft.Graph) - Azure CLI authentifié auprès du tenant cible (
az login --tenant TENANT_ID) - ScoutSuite configuré avec le fournisseur Azure pour une évaluation automatisée
- Accès aux journaux d'audit Azure AD et aux journaux de connexion (nécessite Azure AD Premium P1/P2)
Workflow
Étape 1 : Énumérer la configuration du tenant et les paramètres de sécurité par défaut
Évaluez les paramètres de sécurité identitaire de base du tenant, notamment les paramètres de sécurité par défaut et l'état de l'authentification héritée.
# Connexion à Microsoft Graph
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
# Obtenir les détails du tenant
Get-MgOrganization | Select-Object DisplayName, Id, VerifiedDomains
# Vérifier si les paramètres de sécurité par défaut sont activés
Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy | Select-Object IsEnabled
# Lister les politiques de méthodes d'authentification
Get-MgPolicyAuthenticationMethodPolicy | ConvertTo-Json -Depth 5
# Vérifier l'état de l'authentification héritée via l'accès conditionnel
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
$_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
Étape 2 : Auditer les attributions de rôles privilégiés
Passez en revue les attributions de rôles d'annuaire pour identifier les utilisateurs sur-privilégiés, les comptes administrateurs permanents et les configurations de rôles risquées.
# Lister toutes les attributions d'administrateur général
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles/filterByIds" \
--body '{"ids":["62e90394-69f5-4237-9190-012177145e10"]}' | \
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles?filter=displayName eq 'Global Administrator'" \
--query "value[0].id" -o tsv
# Lister toutes les attributions de rôles privilégiés à l'aide de l'API Graph
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$expand=principal" \
--query "value[*].{Role:roleDefinitionId, Principal:principal.displayName, PrincipalType:[email protected]}" \
-o table
# Vérifier les utilisateurs avec plusieurs rôles d'administration
az ad user list --query "[].{UPN:userPrincipalName, DisplayName:displayName}" -o table
# Lister les principaux de service avec des attributions de rôles d'administration
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$filter=principalOrganizationId eq 'TENANT_ID'" \
-o json
Étape 3 : Examiner les politiques d'accès conditionnel
Auditez les politiques d'accès conditionnel pour détecter les lacunes de couverture, en particulier concernant l'application de la MFA, la conformité des appareils et les restrictions basées sur la localisation.
# Lister toutes les politiques d'accès conditionnel
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, @{
N='ContrôlesAccord'; E={$_.GrantControls.BuiltInControls -join ', '}
} | Format-Table -AutoSize
# Identifier les politiques en mode rapport uniquement (non appliquées)
Get-MgIdentityConditionalAccessPolicy | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} |
Select-Object DisplayName
# Vérifier la couverture de l'application de la MFA
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.GrantControls.BuiltInControls -contains "mfa"
} | Select-Object DisplayName, State, @{
N='Utilisateurs'; E={$_.Conditions.Users.IncludeUsers -join ', '}
}
# Trouver les politiques qui excluent des groupes (contournement potentiel)
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.Users.ExcludeGroups.Count -gt 0
} | Select-Object DisplayName, @{
N='GroupesExclus'; E={$_.Conditions.Users.ExcludeGroups -join ', '}
}
Étape 4 : Identifier les comptes obsolètes et les utilisateurs invités
Trouvez les comptes qui ne se sont pas connectés récemment, les comptes désactivés avec des attributions de rôles actives et les configurations d'utilisateurs invités risquées.
# Trouver les utilisateurs qui ne se sont pas connectés depuis 90 jours ou plus
az ad user list --query "[?signInActivity.lastSignInDateTime < '2025-11-25T00:00:00Z'].{UPN:userPrincipalName, DernièreConnexion:signInActivity.lastSignInDateTime, Activé:accountEnabled}" -o table
# Lister tous les utilisateurs invités
az ad user list --filter "userType eq 'Guest'" \
--query "[].{UPN:userPrincipalName, DisplayName:displayName, DateCréation:createdDateTime}" \
-o table
# Trouver les utilisateurs invités avec des rôles privilégiés
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$expand=principal" \
--query "value[?principal.userType=='Guest'].{Rôle:roleDefinitionId,Invité:principal.userPrincipalName}" \
-o table
# Vérifier les comptes avec MFA désactivée
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/reports/authenticationMethods/userRegistrationDetails" \
--query "value[?!isMfaRegistered].{UPN:userPrincipalName,MfaEnregistrée:isMfaRegistered}" \
-o table
Étape 5 : Analyser les journaux de connexion pour une activité risquée
Examinez les journaux de connexion pour identifier les modèles d'authentification anormaux, les échecs de défis MFA et les détections de connexion risquées.
# Obtenir les connexions risquées des 7 derniers jours
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=riskLevelDuringSignIn ne 'none' and createdDateTime ge 2026-02-16T00:00:00Z" \
--query "value[*].{Utilisateur:userPrincipalName,Risque:riskLevelDuringSignIn,IP:ipAddress,Application:appDisplayName,Statut:status.errorCode}" \
-o table
# Obtenir les connexions depuis des localisations inconnues
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=riskEventTypes_v2/any(r:r eq 'unfamiliarFeatures')" \
--query "value[*].{Utilisateur:userPrincipalName,Localisation:location.city,IP:ipAddress}" \
-o table
# Vérifier les connexions par authentification héritée
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps and Desktop clients'" \
--query "value[*].{Utilisateur:userPrincipalName,ApplicationClient:clientAppUsed,Statut:status.errorCode}" \
-o table
Étape 6 : Exécuter une évaluation automatisée avec ScoutSuite
Exécutez ScoutSuite pour des vérifications automatisées complètes de la configuration du tenant Azure.
# Exécuter ScoutSuite contre Azure
python3 -m ScoutSuite azure --cli \
--report-dir ./scoutsuite-azure-report \
--all-subscriptions
# Consulter le rapport HTML généré
open ./scoutsuite-azure-report/azure-report.html
Concepts clés
| Terme | Définition |
|---|---|
| Microsoft Entra ID | Service cloud de gestion des identités et des accès de Microsoft, anciennement Azure Active Directory, fournissant l'authentification et l'autorisation |
| Accès conditionnel | Moteur de politique qui évalue les signaux (utilisateur, appareil, localisation, risque) pour appliquer des contrôles d'accès comme la MFA, la conformité des appareils ou le blocage d'accès |
| Paramètres de sécurité par défaut | Paramètres de protection d'identité de base de Microsoft qui imposent l'enregistrement MFA, bloquent l'authentification héritée et protègent les actions privilégiées |
| Gestion des identités privilégiées | Fonctionnalité Azure AD Premium P2 permettant un accès privilégié juste-à-temps avec des workflows d'approbation et une activation de rôle limitée dans le temps |
| Authentification héritée | Protocoles d'authentification plus anciens (POP3, IMAP, SMTP, ActiveSync) qui ne prennent pas en charge la MFA et sont couramment exploités pour les attaques par vol d'identifiants |
| Connexion risquée | Détection par Microsoft Entra Identity Protection d'anomalies de connexion, notamment les déplacements impossibles, les localisations inconnues et les IP liées à des logiciels malveillants |
Outils et systèmes
- Microsoft Graph API : Interface programmatique principale pour interroger la configuration Entra ID, les politiques, les rôles et les journaux d'audit
- Microsoft Graph PowerShell SDK : Module PowerShell pour la gestion Entra ID et les tâches d'audit de sécurité
- ScoutSuite : Outil d'audit multi-cloud avec prise en charge du fournisseur Azure pour les vérifications IAM, stockage, réseau et identité
- AzureADRecon : Outil communautaire pour la reconnaissance complète Azure AD et la génération de rapports d'évaluation de sécurité
- Microsoft Defender for Identity : Solution de sécurité basée sur le cloud pour détecter les menaces basées sur l'identité et les identifiants compromis
Scénarios courants
Scénario : Évaluation de la sécurité d'un tenant Azure après acquisition
Contexte : Après l'acquisition d'une entreprise, l'équipe de sécurité doit évaluer la posture identitaire du tenant Azure avant de l'intégrer à l'Entra ID de l'entreprise.
Approche :
- Énumérer tous les administrateurs généraux et vérifier les comptes personnels dans des rôles d'administration
- Examiner les politiques d'accès conditionnel pour confirmer que la MFA est appliquée à tous les utilisateurs, pas seulement aux administrateurs
- Identifier les utilisateurs invités avec un accès privilégié pouvant indiquer un sur-privilège de fournisseur tiers
- Vérifier les comptes obsolètes (aucune connexion depuis 90 jours ou plus) qui pourraient être des cibles d'attaques par vol d'identifiants
- Consulter les journaux de connexion pour détecter l'utilisation de l'authentification héritée contournant la MFA
- Vérifier que les paramètres de sécurité par défaut ou les politiques CA équivalentes bloquent les protocoles d'authentification héritée
- Produire un rapport de risques avec des mesures de correction priorisées avant l'intégration du tenant
Pièges : Azure AD Premium P2 est requis pour les détections de connexion risquées et le PIM. Si le tenant acquis utilise un niveau de licence inférieur, de nombreuses fonctionnalités de protection d'identité ne seront pas disponibles. Les utilisateurs invités de tenants partenaires peuvent avoir un accès implicite via des groupes dynamiques qui ne sont pas visibles dans les requêtes d'attribution de rôles standard.
Format de sortie
Rapport d'audit de sécurité Azure Active Directory
===============================================
Tenant : acme-acquired.onmicrosoft.com
ID du tenant : a1b2c3d4-e5f6-7890-abcd-ef1234567890
Date d'audit : 23/02/2026
Licence : Azure AD Premium P2
CONFIGURATION D'IDENTITÉ :
Sécurité par défaut : Désactivé (accès conditionnel en cours d'utilisation)
Politiques d'accès conditionnel : 12 (8 appliquées, 3 rapport uniquement, 1 désactivée)
Authentification héritée bloquée : Partielle (bloquée pour les admins uniquement)
ACCÈS PRIVILÉGIÉ :
Administrateurs généraux : 8 (recommandé : <= 4)
Attributions d'administration permanentes : 6 (aucune activation PIM requise)
Principaux de service avec admin : 3
Utilisateurs invités avec rôles privilégiés : 2
HYGIÈNE DES COMPTES :
Nombre total d'utilisateurs : 1 247
Comptes obsolètes (90+ jours) : 89
Utilisateurs invités : 234
Utilisateurs sans MFA enregistrée : 156
RISQUE DE CONNEXION :
Connexions risquées (30 derniers jours) : 34
Connexions par authentification héritée (7 derniers jours) : 67
Détections de déplacement impossible : 5
Connexions depuis une localisation inconnue : 12
CONSTATATIONS CRITIQUES :
1. 8 administrateurs généraux avec des attributions permanentes (utilisez PIM)
2. L'authentification héritée n'est pas bloquée pour les utilisateurs non administrateurs
3. 156 utilisateurs sans enregistrement MFA
4. 2 utilisateurs invités avec le rôle Administrateur de rôle privilégié