Microsoft 365 | PowerShell Security Audit - Teil 3: Daten-Governance, Compliance und Monitoring ⏱ 9 Min.

Microsoft 365 | PowerShell Security Audit - Teil 3: Daten-Governance, Compliance und Monitoring

Gruppen, DLP, Aufbewahrung & Bedrohungsschutz

In Teil 1 dieser Serie standen Identität und Zugriff im Mittelpunkt, in Teil 2 der Mail-Schutz, die Collaboration-Plattformen, die Geräte und die App-Berechtigungen, zusammen die Prüfpunkte 1 bis 58. Damit sind die Eingangstüren und die Datenkanäle abgedeckt. Was bleibt, ist die Klammer, die einen Tenant erst kontrollierbar macht: Datenklassifizierung, Aufbewahrung, erweiterter Bedrohungsschutz und eine lückenlose Protokollierung.

Teil 3 schließt den Audit mit den Prüfpunkten 59 bis 80 ab. Den Anfang machen die bestehenden Bausteine für Gruppen-Governance, Data Loss Prevention und das Unified Audit Log. Daran schließen zwölf zusätzliche Checks an, die in den ersten beiden Teilen noch fehlten: erweiterte Daten- und Compliance-Kontrollen wie Litigation Hold und Customer Lockbox, ein vertiefter E-Mail-Bedrohungsschutz mit Quarantäne- und Tenant-Allow-Block-Listen sowie Governance- und Lebenszyklus-Prüfungen von Access Reviews bis zu verwaisten Enterprise Apps.

Die Module und Connect-Hinweise sind in Teil 1 beschrieben, die Compliance-Checks laufen über Security & Compliance PowerShell per Connect-IPPSSession

Gruppen, Daten und Compliance

59. Verwaiste Microsoft 365 Groups

Nach Projektabschluss verlassen Mitarbeiter das Unternehmen oder wechseln die Abteilung, die Gruppe bleibt bestehen und verliert ihre Besitzer. Datenpakete und externe Gastzugriffe bleiben dann unbeaufsichtigt. Gesucht sind alle Unified Groups ganz ohne Owner, die Du neu zuweist oder archivierst.

Connect-MgGraph -Scopes "Group.Read.All","User.Read.All" -NoWelcome
$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All
foreach ($g in $groups) {
    $owners = Get-MgGroupOwner -GroupId $g.Id -All
    if (@($owners).Count -eq 0) { [PSCustomObject]@{ GroupName = $g.DisplayName; GroupId = $g.Id } }
}

60. Gruppen- und Teams-Erstellung eingeschränkt

Unkontrollierte Gruppen- und Teams-Erstellung führt zu Wildwuchs ohne Namenskonvention und Governance, dazu öffnet jede neue Gruppe potenziell externe Gastzugriffe. Die Einstellung liegt im Directory-Setting Group.Unified, fehlt das Setting-Objekt, gilt der Default True, also jeder darf anlegen. Restriktiv heißt: EnableGroupCreation auf False plus eine berechtigte Sicherheitsgruppe.

Connect-MgGraph -Scopes "Directory.Read.All" -NoWelcome
$setting = Get-MgDirectorySetting | Where-Object { $_.DisplayName -eq "Group.Unified" }
($setting.Values | Where-Object { $_.Name -eq "EnableGroupCreation" }).Value   # Befund: True oder Setting fehlt
# Je nach Modulversion heisst das Cmdlet Get-MgBetaDirectorySetting

61. Gastzugriff in Microsoft 365 Groups

Im selben Group.Unified-Setting steuert AllowToAddGuests, ob Gäste überhaupt zu Gruppen und damit zu Teams und SharePoint-Sites hinzugefügt werden dürfen. Der Default ist True, was den globalen Gastzugriff weit öffnet. Pro Gruppe lässt sich das über die Vorlage Group.Unified.Guest feiner steuern.

Connect-MgGraph -Scopes "Directory.Read.All" -NoWelcome
$setting = Get-MgDirectorySetting | Where-Object { $_.DisplayName -eq "Group.Unified" }
($setting.Values | Where-Object { $_.Name -eq "AllowToAddGuests" }).Value   # Befund: True ohne Guest-Governance

62. DLP-Richtlinien

Lizenz: Microsoft 365 E3 (Mail und SharePoint), E5 für Teams- und Endpoint-DLP

DLP erkennt schützenswerte Inhalte und bewertet den Kontext wie Zielort und Kanal, so unterscheidet es interne Nutzung von riskanter externer Freigabe. Ohne DLP-Policy verlassen DSGVO-relevante Daten unkontrolliert die Organisation. Geprüft werden Existenz und Modus der vorhandenen Richtlinien.

Connect-IPPSSession   # Security & Compliance PowerShell (Teil des ExchangeOnlineManagement-Moduls)
Get-DlpCompliancePolicy | Select-Object Name, Mode, Enabled | Format-Table

Lizenz: Microsoft 365 E3

Retention schützt vor dem Verlust rechtlich relevanter Daten und vor vorschnellem Löschen durch Nutzer. Ohne Policy können geschäftsrelevante Daten verschwinden, die für Audits oder Rechtsstreitigkeiten gebraucht werden. Sichtbar wird das in der Liste der aktiven Aufbewahrungsrichtlinien.

Connect-IPPSSession
Get-RetentionCompliancePolicy | Select-Object Name, Enabled, Mode | Format-Table

64. Vertraulichkeitsbezeichnungen

Lizenz: Microsoft 365 E3 (manuell), E5 für Auto-Labeling

Sensitivity Labels sind die Grundlage für automatischen Schutz wie Verschlüsselung und Zugriffsbeschränkung. Ohne veröffentlichte Labels gibt es keine Klassifizierung, an der DLP und Schutzmaßnahmen ansetzen. Eine leere Liste zeigt, dass die Klassifizierungsschicht fehlt.

Connect-IPPSSession
Get-Label | Select-Object DisplayName, Name | Format-Table

Protokollierung und Überwachung

65. Unified Audit Log Status

Lizenz: Microsoft 365 E3 (Standard Audit), E5 für Advanced Audit

Ohne Audit-Logs tappst Du nach einem Vorfall im Dunkeln. Die Protokollierung ist für Microsoft-365-Organisationen heute standardmäßig aktiv, mit zwei von Microsoft bestätigten Ausnahmen: die SMB-Lizenzen Business Basic, Standard und Premium sowie nicht verwaltete Tenants mit Enterprise-Testlizenzen. Den verlässlichen Wert liefert Get-AdminAuditLogConfig nur in der Exchange-Online-Session, in der Security-and-Compliance-Session steht UnifiedAuditLogIngestionEnabled immer auf False.

Connect-ExchangeOnline -ShowBanner:$false
Get-AdminAuditLogConfig |
    Select-Object UnifiedAuditLogIngestionEnabled, AdminAuditLogEnabled, LogLevel | Format-List

[SCREENSHOT: Microsoft Purview Portal > Audit > Überwachung starten]

66. Audit-Log-Aufbewahrung

Lizenz: Microsoft 365 E5 (Aufbewahrung über 180 Tage)

Standardmäßig werden Audit-Daten 180 Tage aufbewahrt, für forensische Analysen nach einem spät erkannten Vorfall reicht das oft nicht. Eine gezielte Retention-Policy verlängert die Aufbewahrung für kritische Workloads, die gültigen Werte reichen von ThreeMonths bis TenYears. Fehlt eine passende Policy, gilt nur der Standard.

Connect-IPPSSession
Get-UnifiedAuditLogRetentionPolicy | Select-Object Name, RetentionDuration, Priority | Format-Table

67. Alert-Richtlinien

Microsoft liefert vorkonfigurierte Alert Policies für kritische Ereignisse wie ungewöhnliche Dateifreigaben, Malware-Erkennung und Admin-Rollenänderungen. Ist eine davon deaktiviert, bleibt ein Angriff unbemerkt, bis der Schaden sichtbar wird. Die Spalte Disabled zeigt, welche Richtlinien stillgelegt sind.

Connect-IPPSSession
Get-ProtectionAlert | Select-Object Name, Disabled, Severity, Category | Sort-Object Category | Format-Table

68. Identity Secure Score

Der Secure Score verdichtet den Sicherheitsstatus des Tenants zu einer Kennzahl mit konkreten Verbesserungsvorschlägen. Regelmäßig dokumentiert macht er Fortschritt und Rückschritte sichtbar und eignet sich als Baseline-Vergleich zwischen zwei Audit-Läufen. Der aktuelle Wert steht in CurrentScore im Verhältnis zu MaxScore.

Connect-MgGraph -Scopes "SecurityEvents.Read.All" -NoWelcome
Get-MgSecuritySecureScore -Top 1 |
    Select-Object CurrentScore, MaxScore, CreatedDateTime | Format-List

Erweiterte Daten- und Compliance-Kontrollen

69. Litigation Hold auf Postfächern

Lizenz: Exchange Online Plan 2 oder Microsoft 365 E3

Litigation Hold friert den Inhalt eines Postfachs ein, sodass auch gelöschte oder veränderte Elemente für rechtliche Verfahren erhalten bleiben. Für Geschäftsführung, Rechtsabteilung und Finanzbuchhaltung ist das oft Pflicht. Postfächer mit LitigationHoldEnabled = False in diesen Bereichen sind eine Compliance-Lücke.

Connect-ExchangeOnline -ShowBanner:$false
Get-Mailbox -ResultSize Unlimited |
    Where-Object { $_.LitigationHoldEnabled -eq $false } |
    Select-Object UserPrincipalName, LitigationHoldEnabled, RetentionHoldEnabled | Format-Table

70. Auto-Labeling-Richtlinien

Lizenz: Microsoft 365 E5

Manuelle Klassifizierung greift in der Praxis nie flächendeckend, weil Nutzer sie vergessen oder umgehen. Auto-Labeling erkennt regulierte Inhalte wie IBAN, Steuernummern oder Personalausweisnummern automatisch und wendet Labels an. Ohne aktive Auto-Labeling-Policy bleiben sensible Dokumente in SharePoint und OneDrive ungeschützt.

Connect-IPPSSession
Get-AutoSensitivityLabelPolicy | Select-Object Name, Mode, Enabled | Format-Table
# Befund: keine aktive Policy fuer regulierte Datentypen

71. Customer Lockbox

Lizenz: Microsoft 365 E5

Customer Lockbox erzwingt eine ausdrückliche Genehmigung, bevor ein Microsoft-Support-Techniker im Rahmen einer Anfrage auf Inhaltsdaten zugreifen kann. Ohne diesen Schalter kann der Zugriff ohne Deine Freigabe erfolgen. Für regulierte Branchen ist CustomerLockBoxEnabled = True ein erwarteter Wert.

Connect-ExchangeOnline -ShowBanner:$false
Get-OrganizationConfig | Select-Object CustomerLockBoxEnabled   # Soll: True

72. Ablaufrichtlinie für Microsoft 365 Groups

Lizenz: Entra ID P1

Ohne Ablaufrichtlinie verfallen Gruppen und Teams nie automatisch, ungenutzte Gruppen sammeln sich über Jahre mit ihren Dateien und Gastzugriffen an. Eine Lifecycle-Policy zwingt Besitzer zur regelmäßigen Bestätigung und archiviert sonst automatisch. Fehlt die Policy, gibt es keine automatische Bereinigung.

powershell

Connect-MgGraph -Scopes "Directory.Read.All" -NoWelcome
Get-MgGroupLifecyclePolicy |
    Select-Object GroupLifetimeInDays, ManagedGroupTypes, AlternateNotificationEmails | Format-List
# Befund: keine Policy vorhanden

Erweiterter E-Mail-Bedrohungsschutz

73. Anti-Malware Common Attachment Filter

Der Common Attachment Filter blockiert gefährliche Dateitypen wie exe, js, vbs oder scr bereits am Gateway, unabhängig vom Inhalt und per True-Typing auch bei umbenannter Endung. Steht EnableFileFilter auf False, können Nutzer ausführbare Anhänge empfangen, ein klassischer Infektionsweg.

powershell

Connect-ExchangeOnline -ShowBanner:$false
Get-MalwareFilterPolicy |
    Select-Object Name, EnableFileFilter, @{N="FileTypes";E={($_.FileTypes -join ", ")}} | Format-List
# Befund: EnableFileFilter = False

74. Quarantäne-Richtlinien

Quarantäne-Richtlinien legen fest, was Nutzer mit abgefangenen Nachrichten tun dürfen und ob sie überhaupt benachrichtigt werden. Ist die Quarantäne-Benachrichtigung (ESNEnabled) aus, bemerkt niemand fälschlich blockierte Geschäftsmails, und legitime Kommunikation versickert unbemerkt. Geprüft werden die Benachrichtigungseinstellungen je Policy.

Connect-ExchangeOnline -ShowBanner:$false
Get-QuarantinePolicy | Select-Object Name, ESNEnabled, EndUserSpamNotificationFrequency | Format-Table
# Befund: ESNEnabled = False bei produktiv genutzten Policies

75. Tenant Allow/Block List

Über die Tenant Allow/Block List pflegen Admins manuelle Ausnahmen für Absender, URLs und Dateihashes. Ein dauerhafter Allow-Eintrag ohne Ablaufdatum ist ein gezielt offen gehaltenes Loch im Schutz, das nach Kompromittierung der Gegenseite zum Einfallstor wird. Jeder Allow-Eintrag braucht ein Ablaufdatum und eine Begründung.

Connect-ExchangeOnline -ShowBanner:$false
foreach ($type in "Sender","Url","FileHash") {
    Get-TenantAllowBlockListItems -ListType $type -Allow |
        Select-Object @{N="ListType";E={$type}}, Value, ExpirationDate, Notes
}
# Befund: Allow-Eintraege ohne ExpirationDate

76. Outbound-Spam Empfängerlimits

Sendelimits bremsen einen kompromittierten Account aus, bevor er Tausende Mails verschickt oder Daten an viele externe Empfänger ausleitet. Steht ein Limit auf 0, gelten die Service-Defaults, die für gezielte Exfiltration zu großzügig sein können. Bewusst gesetzte Werte plus eine harte Aktion bei Überschreitung begrenzen den Schaden.

Connect-ExchangeOnline -ShowBanner:$false
Get-HostedOutboundSpamFilterPolicy |
    Select-Object Name, RecipientLimitExternalPerHour, RecipientLimitInternalPerHour, RecipientLimitPerDay, ActionWhenThresholdReached |
    Format-List

Governance, Identitäten und Lebenszyklus

77. Access Reviews für Rollen und Gäste

Lizenz: Entra ID P2

Access Reviews verhindern Berechtigungsdrift, also Rollen und Gastzugriffe, die über Projekte und Jobwechsel unkontrolliert bestehen bleiben. Ohne periodische Reviews sammeln sich über Monate Berechtigungen an, die längst nicht mehr nötig sind. Existiert keine Review-Definition für privilegierte Rollen oder Gäste, fehlt die Re-Zertifizierung.

Connect-MgGraph -Scopes "AccessReview.Read.All" -NoWelcome
Get-MgIdentityGovernanceAccessReviewDefinition -All |
    Select-Object DisplayName, Status, @{N="Scope";E={$_.Scope.AdditionalProperties.query}} | Format-Table
# Befund: keine Reviews fuer privilegierte Rollen oder Gaeste

78. Enterprise Apps ohne Eigentümer

Eine Enterprise App ohne benannten Eigentümer ist verwaist: Niemand verantwortet ihre Berechtigungen, ihren Lebenszyklus oder ihre Abschaltung. Genau solche Apps tragen oft alte, überprivilegierte Consent-Grants. Gesucht sind Service Principals vom Typ Application ganz ohne Owner.

Connect-MgGraph -Scopes "Application.Read.All","Directory.Read.All" -NoWelcome
foreach ($sp in (Get-MgServicePrincipal -All -Filter "servicePrincipalType eq 'Application'")) {
    $owners = Get-MgServicePrincipalOwner -ServicePrincipalId $sp.Id -All
    if (@($owners).Count -eq 0) { [PSCustomObject]@{ App = $sp.DisplayName; AppId = $sp.AppId } }
}

79. Teams Drittanbieter-Cloud-Speicher

Standardmäßig dürfen Teams-Nutzer Dropbox, Box, Google Drive, ShareFile und Egnyte als Speicher einbinden, alle fünf Schalter stehen auf True. Damit fließen Unternehmensdateien an Ablagen außerhalb Deiner Governance. Nicht genehmigte Anbieter gehören auf False.

Connect-MicrosoftTeams
Get-CsTeamsClientConfiguration |
    Select-Object AllowDropBox, AllowBox, AllowGoogleDrive, AllowShareFile, AllowEgnyte | Format-List
# Befund: nicht genehmigte Anbieter auf True

80. Safe Documents für Office-Apps

Lizenz: Microsoft 365 E5 oder Defender for Office 365 Plan 2

Safe Documents lädt Dateien, die in der geschützten Ansicht von Office-Apps geöffnet werden, zur Prüfung an Microsoft Defender for Endpoint hoch, bevor der Nutzer sie verlässt. Ohne diesen Schutz reicht ein Klick auf "Bearbeitung aktivieren", um eine präparierte Datei scharf zu schalten. EnableSafeDocs soll aktiv und AllowSafeDocsOpen auf False stehen, damit als schädlich erkannte Dokumente nicht trotzdem geöffnet werden.

Connect-ExchangeOnline -ShowBanner:$false
Get-AtpPolicyForO365 | Select-Object Name, EnableSafeDocs, AllowSafeDocsOpen | Format-List
# Befund: EnableSafeDocs = False oder AllowSafeDocsOpen = True

Fazit der Serie

Mit den 80 Prüfpunkten dieser drei Teile ist ein Microsoft 365 Tenant entlang aller relevanten Angriffsflächen durchleuchtet: Identität und Zugriff in Teil 1, Mail-Schutz, Collaboration und Geräte in Teil 2, Daten-Governance, Compliance und Monitoring in Teil 3. Die grafische Prüfung über die einzelnen Admin Center hätte diese Tiefe nie erreicht, weil sie aggregiert, sich laufend verändert und die Zusammenhänge zwischen Identitäten, Berechtigungen und Zugriffsrouten verdeckt. PowerShell liefert stattdessen versionierbare Rohdaten für eine forensische Auswertung.

Der nächste Schritt ist die Automatisierung. Bündele die für Deinen Tenant relevanten Bausteine in ein Sammelskript mit CSV- und HTML-Report und lege es als Azure Automation Runbook mit festem Rhythmus ab, etwa monatlich. Sichere die Exporte revisionssicher außerhalb des Tenants, in Azure Blob Storage oder Deinem SIEM. Ein Tenant gilt erst dann als kontrolliert, wenn jede Abweichung von der Baseline maschinell erfasst und gemeldet wird. Und vergiss am Ende jedes Laufs den sauberen Abbau aller Sitzungen nicht, über Disconnect-MgGraph, Disconnect-ExchangeOnline, Disconnect-MicrosoftTeams, Disconnect-PnPOnline und Disconnect-SPOService.


Teilen:
Noch keine Kommentare

Sei der Erste und starte die Diskussion mit einem hilfreichen Beitrag.

Kommentar hinterlassen

Dein Beitrag wird vor der Veröffentlichung kurz geprüft — fachlich, respektvoll und auf den Punkt ist hier genau richtig.

E-Mail Adresse wird nicht veröffentlicht.