Auditing der Azure Active Directory-Konfiguration
Wann verwenden
- Bei der Durchführung einer Sicherheitsbewertung der Identitätskonfiguration eines Azure-Mandanten
- Wenn Compliance-Audits die Überprüfung von Authentifizierungsrichtlinien, MFA-Erzwingung und Rollenzuweisungen erfordern
- Beim Onboarding eines neuen Azure-Mandanten nach Fusion oder Übernahme
- Bei der Untersuchung verdächtiger Anmeldeaktivitäten oder kompromittierter Konten
- Bei der Validierung, dass Conditional Access-Richtlinien ausreichend vor identitätsbasierten Angriffen schützen
Nicht verwenden für lokale Active Directory-Audits (PingCastle oder BloodHound AD verwenden), für Azure-Ressourcen-RBAC-Audits ohne Identitätskontext oder für Echtzeit-Bedrohungserkennung (Microsoft Defender for Identity verwenden).
Voraussetzungen
- Rolle „Globaler Leser“ oder „Sicherheitsleser“ im Ziel-Microsoft-Entra-ID-Mandanten
- Microsoft Graph PowerShell SDK installiert (
Install-Module Microsoft.Graph) - Az CLI im Ziel-Mandanten authentifiziert (
az login --tenant TENANT_ID) - ScoutSuite mit konfiguriertem Azure-Anbieter für automatisierte Bewertung
- Zugriff auf Azure AD-Überwachungsprotokolle und Anmeldeprotokolle (erfordert Azure AD Premium P1/P2)
Arbeitsablauf
Schritt 1: Aufzählung der Mandantenkonfiguration und Security Defaults
Bewertung der grundlegenden Identitätssicherheitseinstellungen des Mandanten, einschließlich Security Defaults und Legacy-Authentifizierungsstatus.
# Mit Microsoft Graph verbinden
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
# Mandantendetails abrufen
Get-MgOrganization | Select-Object DisplayName, Id, VerifiedDomains
# Prüfen, ob Security Defaults aktiviert sind
Get-MgPolicyIdentitySecurityDefaultEnforcementPolicy | Select-Object IsEnabled
# Authentifizierungsmethoden-Richtlinien auflisten
Get-MgPolicyAuthenticationMethodPolicy | ConvertTo-Json -Depth 5
# Legacy-Authentifizierungsstatus via Conditional Access prüfen
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
$_.Conditions.ClientAppTypes -contains "other"
} | Select-Object DisplayName, State
Schritt 2: Prüfung privilegierter Rollenzuweisungen
Überprüfung der Verzeichnisrollenzuweisungen, um überprivilegierte Benutzer, permanente Administratorkonten und riskante Rollenkonfigurationen zu identifizieren.
# Alle Zuweisungen der Rolle „Globaler Administrator" auflisten
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 'Globaler Administrator'" \
--query "value[0].id" -o tsv
# Alle privilegierten Rollenzuweisungen über die Graph-API auflisten
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$expand=principal" \
--query "value[*].{Rolle:roleDefinitionId, Principal:principal.displayName, PrincipalTyp:[email protected]}" \
-o table
# Prüfen auf Benutzer mit mehreren Admin-Rollen
az ad user list --query "[].{UPN:userPrincipalName, Anzeigename:displayName}" -o table
# Dienstprinzipale mit Admin-Rollenzuweisungen auflisten
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$filter=principalOrganizationId eq 'TENANT_ID'" \
-o json
Schritt 3: Überprüfung der Conditional Access-Richtlinien
Audit der Conditional Access-Richtlinien auf Abdeckungslücken, insbesondere in Bezug auf MFA-Erzwingung, Geräte-Compliance und standortbasierte Einschränkungen.
# Alle Conditional Access-Richtlinien auflisten
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State, @{
N='GrantSteuerelemente'; E={$_.GrantControls.BuiltInControls -join ', '}
} | Format-Table -AutoSize
# Richtlinien im Nur-Bericht-Modus identifizieren (nicht erzwungen)
Get-MgIdentityConditionalAccessPolicy | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} |
Select-Object DisplayName
# MFA-Erzwingungsabdeckung prüfen
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.GrantControls.BuiltInControls -contains "mfa"
} | Select-Object DisplayName, State, @{
N='Benutzer'; E={$_.Conditions.Users.IncludeUsers -join ', '}
}
# Richtlinien finden, die Gruppen ausschließen (potenzielle Umgehung)
Get-MgIdentityConditionalAccessPolicy | Where-Object {
$_.Conditions.Users.ExcludeGroups.Count -gt 0
} | Select-Object DisplayName, @{
N='AusgeschlosseneGruppen'; E={$_.Conditions.Users.ExcludeGroups -join ', '}
}
Schritt 4: Identifizierung inaktiver Konten und Gastbenutzer
Finden von Konten, die sich in letzter Zeit nicht angemeldet haben, deaktivierten Konten mit aktiven Rollenzuweisungen und riskanten Gastbenutzerkonfigurationen.
# Benutzer finden, die sich seit 90+ Tagen nicht angemeldet haben
az ad user list --query "[?signInActivity.lastSignInDateTime < '2025-11-25T00:00:00Z'].{UPN:userPrincipalName, LetzteAnmeldung:signInActivity.lastSignInDateTime, Aktiviert:accountEnabled}" -o table
# Alle Gastbenutzer auflisten
az ad user list --filter "userType eq 'Gast'" \
--query "[].{UPN:userPrincipalName, Anzeigename:displayName, Erstellungsdatum:createdDateTime}" \
-o table
# Gastbenutzer mit privilegierten Rollen finden
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$expand=principal" \
--query "value[?principal.userType=='Gast'].{Rolle:roleDefinitionId,Gast:principal.userPrincipalName}" \
-o table
# Konten mit deaktiviertem MFA prüfen
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/reports/authenticationMethods/userRegistrationDetails" \
--query "value[?!isMfaRegistered].{UPN:userPrincipalName,MfaRegistriert:isMfaRegistered}" \
-o table
Schritt 5: Analyse der Anmeldeprotokolle auf riskante Aktivitäten
Überprüfung der Anmeldeprotokolle zur Identifizierung anomaler Authentifizierungsmuster, fehlgeschlagener MFA-Herausforderungen und riskanter Anmeldeerkennungen.
# Riskante Anmeldungen der letzten 7 Tage abrufen
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[*].{Benutzer:userPrincipalName,Risiko:riskLevelDuringSignIn,IP:ipAddress,App:appDisplayName,Status:status.errorCode}" \
-o table
# Anmeldungen von unbekannten Standorten abrufen
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=riskEventTypes_v2/any(r:r eq 'unfamiliarFeatures')" \
--query "value[*].{Benutzer:userPrincipalName,Ort:location.city,IP:ipAddress}" \
-o table
# Auf Legacy-Authentifizierungsanmeldungen prüfen
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps und Desktopclients'" \
--query "value[*].{Benutzer:userPrincipalName,ClientApp:clientAppUsed,Status:status.errorCode}" \
-o table
Schritt 6: Automatisierte Bewertung mit ScoutSuite durchführen
Ausführung von ScoutSuite für umfassende automatisierte Prüfungen der gesamten Azure-Mandantenkonfiguration.
# ScoutSuite gegen Azure ausführen
python3 -m ScoutSuite azure --cli \
--report-dir ./scoutsuite-azure-report \
--all-abo subscriptions
# Den generierten HTML-Bericht anzeigen
open ./scoutsuite-azure-report/azure-report.html
Schlüsselkonzepte
| Begriff | Definition |
|---|---|
| Microsoft Entra ID | Microsofts cloudbasierter Identitäts- und Zugriffsverwaltungsdienst, ehemals Azure Active Directory, bietet Authentifizierung und Autorisierung |
| Conditional Access | Richtlinien-Engine, die Signale (Benutzer, Gerät, Standort, Risiko) auswertet, um Zugriffskontrollen wie MFA, Geräte-Compliance oder Zugriffssperre durchzusetzen |
| Security Defaults | Microsofts grundlegende Identitätsschutzeinstellungen, die MFA-Registrierung erzwingen, Legacy-Authentifizierung blockieren und privilegierte Aktionen schützen |
| Privileged Identity Management | Azure AD Premium P2-Funktion für Just-in-Time-privilegierten Zugriff mit Genehmigungsworkflows und zeitlich begrenzter Rollenaktivierung |
| Legacy-Authentifizierung | Ältere Authentifizierungsprotokolle (POP3, IMAP, SMTP, ActiveSync), die MFA nicht unterstützen und häufig für Credential-Angriffe ausgenutzt werden |
| Riskante Anmeldung | Erkennung von Anmeldeanomalien durch Microsoft Entra Identity Protection, einschließlich unmöglicher Reisen, unbekannter Standorte und mit Malware verknüpfter IPs |
Tools & Systeme
- Microsoft Graph API: Primäre programmatische Schnittstelle zum Abfragen der Entra ID-Konfiguration, -Richtlinien, -Rollen und -Überwachungsprotokolle
- Microsoft Graph PowerShell SDK: PowerShell-Modul für die Verwaltung von Entra ID und Sicherheitsaudit-Aufgaben
- ScoutSuite: Multi-Cloud-Auditing-Tool mit Azure-Anbieterunterstützung für IAM-, Speicher-, Netzwerk- und Identitätsprüfungen
- AzureADRecon: Community-Tool für umfassende Azure AD-Aufklärung und Sicherheitsbewertungsberichte
- Microsoft Defender for Identity: Cloudbasierte Sicherheitslösung zur Erkennung identitätsbasierter Bedrohungen und kompromittierter Anmeldeinformationen
Häufige Szenarien
Szenario: Sicherheitsbewertung eines Azure-Mandanten nach Übernahme
Kontext: Nach der Übernahme eines Unternehmens muss das Sicherheitsteam die Identitätssicherheitslage des Azure-Mandanten bewerten, bevor es in das Unternehmens-Entra ID integriert wird.
Vorgehen:
- Alle Globalen Administratoren auflisten und auf persönliche Konten in Admin-Rollen prüfen
- Conditional Access-Richtlinien überprüfen, ob MFA für alle Benutzer (nicht nur Admins) erzwungen wird
- Gastbenutzer mit privilegiertem Zugriff identifizieren, die auf übermäßige Berechtigungen von Drittanbietern hinweisen könnten
- Auf inaktive Konten (keine Anmeldung seit 90+ Tagen) prüfen, die Ziele für Credential-Angriffe sein könnten
- Anmeldeprotokolle auf Legacy-Authentifizierungsnutzung prüfen, die MFA umgeht
- Sicherstellen, dass Security Defaults oder äquivalente CA-Richtlinien Legacy-Auth-Protokolle blockieren
- Einen Risikobericht mit priorisierten Korrekturmaßnahmen vor der Mandantenintegration erstellen
Fallstricke: Azure AD Premium P2 ist für riskante Anmeldeerkennungen und PIM erforderlich. Wenn der erworbene Mandant eine niedrigere Lizenzstufe verwendet, sind viele Identitätsschutzfunktionen nicht verfügbar. Gastbenutzer von Partnermandanten können durch dynamische Gruppen impliziten Zugriff haben, der in Standard-Rollenzuweisungsabfragen nicht sichtbar ist.
Ausgabeformat
Sicherheitsaudit-Bericht für Azure Active Directory
=====================================================
Mandant: acme-acquired.onmicrosoft.com
Mandanten-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Audit-Datum: 2026-02-23
Lizenz: Azure AD Premium P2
IDENTITÄTSKONFIGURATION:
Security Defaults: Deaktiviert (Conditional Access wird verwendet)
Conditional Access-Richtlinien: 12 (8 erzwungen, 3 nur Bericht, 1 deaktiviert)
Legacy-Authentifizierung blockiert: Teilweise (nur für Admins blockiert)
PRIVILEGIERTER ZUGRIFF:
Globale Administratoren: 8 (empfohlen: <= 4)
Permanente Admin-Zuweisungen: 6 (keine PIM-Aktivierung erforderlich)
Dienstprinzipale mit Admin-Zugriff: 3
Gastbenutzer mit privilegierten Rollen: 2
KONTOHYGIENE:
Gesamtbenutzer: 1.247
Inaktive Konten (90+ Tage): 89
Gastbenutzer: 234
Benutzer ohne MFA-Registrierung: 156
ANMELDERISIKO:
Riskante Anmeldungen (letzte 30 Tage): 34
Legacy-Auth-Anmeldungen (letzte 7 Tage): 67
Erkennung unmöglicher Reisen: 5
Anmeldungen von unbekannten Standorten: 12
KRITISCHE ERKENNTNISSE:
1. 8 Globale Administratoren mit permanenten Zuweisungen (PIM verwenden)
2. Legacy-Authentifizierung für Nicht-Admin-Benutzer nicht blockiert
3. 156 Benutzer ohne MFA-Registrierung
4. 2 Gastbenutzer mit der Rolle „Privilegierter Rollenadministrator"