
PowerShell-Modul für die Protokollsammlung von Office 365 und Azure

DFIR-O365RC wurde auf der SSTIC 2021 (Symposium sur la sécurité des technologies de l'information et des communications) vorgestellt. Folien und eine Aufzeichnung des Vortrags (auf Französisch) sind hier verfügbar.
⚠️ Am 31. März 2024 hat Microsoft die Authentifizierungsmethode eingestellt, die wir für DFIR-O365RC verwendet haben. Dies führte zur Veröffentlichung von Version 2.0.0 im August 2024 mit bahnbrechenden Änderungen in Bezug auf die Authentifizierung und einer umfassenden Überarbeitung des Codes. ⚠️
Das PowerShell-Modul DFIR-O365RC ist eine Sammlung von Funktionen, die es einem Forensik-Analysten ermöglicht, für Microsoft-365-Kompromittierungen relevante Protokolle zu sammeln und Entra-ID-Untersuchungen durchzuführen.
Die Protokolle werden im JSON-Format generiert und aus zwei Hauptdatenquellen abgerufen:
Diese beiden Datenquellen können über verschiedene Endpunkte abgefragt werden:
* Die Office 365 Management API ist für die Echtzeitanalyse von Daten mit einem SIEM gedacht. DFIR-O365RC ist ein Forensik-Tool, es zielt nicht auf die Echtzeitüberwachung einer Microsoft-365-Umgebung ab.
DFIR-O365RC ruft Daten ab aus:
Wenn Sie böswillige Aktivitäten in Microsoft 365 untersuchen, ruft Search-O365 (aus Exchange Online PowerShell) auch das Mailbox-Auditprotokoll ab, obwohl das Cmdlet Search-MailboxAuditLog eingestellt wird.
Wenn Sie andere Azure-Ressourcen untersuchen, können Sie mit DFIR-O365RC:
Dies ist die empfohlene Methode zur Nutzung von DFIR-O365RC
Geben Sie einfach Folgendes ein:```bash sudo docker pull anssi/dfir-o365rc:latest sudo docker run --rm -v .:/mnt/host -it anssi/dfir-o365rc:latest
DFIR-O365RC ist einsatzbereit:```bash
PowerShell 7.4.2
DFIR-O365RC: PowerShell module for Microsoft 365 and Entra ID log collection
https://github.com/ANSSI-FR/DFIR-O365RC
PS /mnt/host/output>
Wenn Sie Ihr Docker-Image manuell erstellen möchten, klonen Sie das Repository und verwenden Sie docker compose (oder das alte docker-compose), um das Image zu erstellen, den Container auszuführen und ein Volume zu mounten (im output/ Ordner):```bash
sudo docker compose build dfir-o365rc
sudo docker compose run dfir-o365rc
sudo docker-compose run dfir-o365rc
### Verwenden von PowerShell
Sie können das Modul auf *PowerShell Desktop* und *PowerShell Core* installieren.
Bitte beachten Sie, dass das Cmdlet `Connect-ExchangeOnline` [Microsoft .NET Framework 4.7.2 oder höher erfordert](https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#windows).
So installieren Sie das Modul aus der PowerShell Gallery :```powershell
Install-Module -Name DFIR-O365RC
Sie können das Modul auch manuell installieren, indem Sie das DFIR-O365RC-Repository klonen, die erforderlichen Abhängigkeiten installieren (überprüfen Sie DFIR-O365RC.psd1) und das DFIR-O365RC-Verzeichnis in einem der Modulpfade Ihrer PowerShell hinzufügen.
Nachdem das Modul importiert wurde, müssen Sie eine Entra-Anwendung erstellen, die den Protokollsammelprozess für Sie übernimmt.
Gehen Sie dazu wie folgt vor:
Erstellen Sie ein selbstsigniertes Zertifikat und erhalten Sie den base64-codierten öffentlichen Teil:
Unter Linux mit PowerShell Core oder dem Docker-Container: ```bash openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -nodes -out exampleDFIRO365RC.crt -keyout exampleDFIRO365RC.key -batch openssl pkcs12 -inkey exampleDFIRO365RC.key -in exampleDFIRO365RC.crt -export -out exampleDFIRO365RC.pfx # Enter a password for the certificate openssl x509 -in exampleDFIRO365RC.crt -outform DER -out - | base64 | tr -d "\n"
Unter Windows mit PowerShell: ```powershell $certificate = New-SelfSignedCertificate -Subject "CN=exampleDFIRO365RC" -KeySpec KeyExchange -NotBefore (Get-Date) -NotAfter (Get-Date).AddDays(365) $certificatePassword = Read-Host -MaskInput "Please enter a password for the certificate" $certificateSecurePassword = ConvertTo-SecureString -String $certificatePassword -AsPlainText -Force Export-PfxCertificate -Cert $certificate -FilePath exampleDFIRO365RC.pfx -Password $certificateSecurePassword Write-Host ([System.Convert]::ToBase64String($certificate.GetRawCertData()))
2) Verwenden Sie das `New-Application`-Cmdlet aus dem Modul DFIR-O365RC: ```powershell
$certificateb64="<base64-encoded public part from step 1>"
New-Application -certificateb64 $certificateb64
Optional, wenn Sie in der Lage sein möchten, Protokolle in den Abonnements des Mandanten zu sammeln (nicht erforderlich, wenn Sie nicht Get-AzRMActivityLogs verwenden möchten): ```powershell
New-Application -certificateb64 $certificateb64 -subscriptions
Optional, wenn Sie in der Lage sein möchten, Protokolle in den Azure DevOps-Organisationen des Mandanten zu sammeln (dies kann lange dauern und ist nicht erforderlich, wenn Sie nicht vorhaben, `Get-AzDevOpsActivityLogs` zu verwenden): ```powershell
New-Application -certificateb64 $certificateb64 -organizations
Um die Anwendung zu erstellen, müssen Sie sich mehrmals bei Azure anmelden, indem Sie ein hoch privilegiertes Konto verwenden.
Sobald die Anwendung erstellt ist, erhalten Sie eine Ausgabe ähnlich der folgenden: ```powershell Done creating the application with the required permissions Please use the following identifiers: WARNING: AppID: xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx WARNING: Tenant: example.onmicrosoft.com
### Aktualisieren der Anwendung
Sobald die Anwendung erstellt wurde, können Sie mit dem Cmdlet `Update-Application` aus dem Modul weiterhin dessen Anmeldeinformationen und Berechtigungen aktualisieren:
- Sie können ein neues Zertifikat zur Anwendung hinzufügen:
`Update-Application -certificateb64 <base64-kodierter öffentlicher Teil>`
- Sie können neue Abonnements angeben, in denen Sie Protokolle sammeln möchten:
`Update-Application -subscriptions`
- Sie können neue Azure DevOps-Organisationen angeben, in denen Sie Protokolle sammeln möchten:
`Update-Application -organizations`
- Sie können die Berechtigungen der Anwendung aktualisieren, was besonders nützlich ist, wenn Sie eine alte Anwendung haben und die Berechtigungen seit der Erstellung aktualisiert wurden:
`Update-Application -permissions`
### Entfernen der Anwendung
Wenn Sie mit der Protokollsammelung fertig sind, können Sie die Anwendung mit dem Cmdlet `Remove-Application` aus dem Modul löschen.
Zum Entfernen der Anwendung müssen Sie sich mehrmals bei Azure anmelden, und zwar mit einem **hochprivilegierten** Konto.
Wenn die Anwendung Protokolle von Abonnements oder Azure DevOps-Organisationen sammeln konnte, müssen Sie die Schalter `-organizations` und/oder `-subscriptions` hinzufügen.
## Berechtigungen und Lizenzanforderungen
⚠️
Ab Version 2.0.0 läuft das Tool nun im Kontext eines Dienstprinzipals mit [App-only-Zugriff / Anwendungsberechtigungen](https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#app-only-access-access-without-a-user).
Um Version 2.0.0 und höher zu verwenden, müssen Sie [eine Anwendung erstellen](#creating-the-application).
Sobald die Anwendung erstellt wurde, wird das Skript mit den Anmeldeinformationen und Berechtigungen der Anwendung ausgeführt.
⚠️
Die Anwendung wird mit dem geringstmöglichen erforderlichen Berechtigungssatz erstellt:
- `Exchange.ManageAsApp` für die `Office 365 Exchange Online`-API (erforderlich, um Exchange Online PowerShell-Cmdlets ausführen zu können)
- `AuditLog.Read.All` für die `Microsoft Graph`-API (erforderlich für die Sammlung von Microsoft Entra-Protokollen)
- `AuditLogsQuery.Read.All` für die `Microsoft Graph`-API (erforderlich für die Sammlung des Unified Audit Logs mit Purview)
- `Application.Read.All` und `DelegatedPermissionGrant.Read.All` für die `Microsoft Graph`-API (erforderlich für die Anreicherung von Microsoft Entra-Protokollen zu Anwendungen und Dienstprinzipalen)
- `Device.Read.All` für die `Microsoft Graph`-API (erforderlich für die Anreicherung von Microsoft Entra-Protokollen zu Geräten)
- `User.Read.All` für die `Microsoft Graph`-API (erforderlich zum Abrufen von Informationen zu den Benutzern)
- `UserAuthenticationMethod.Read.All` für die `Microsoft Graph`-API (erforderlich zum Abrufen von Informationen zu den Authentifizierungsmethoden der Benutzer)
- `Organization.Read.All` für die `Microsoft Graph`-API (erforderlich zum Abrufen allgemeiner Informationen zum Mandanten)
- `View-only audit logs` in `Exchange Online` (erforderlich zur Verwendung des Cmdlets `Search-UnifiedAuditLog`)
Optional (bei Verwendung des Schalters `-subscriptions`):
- Für die ausgewählte Teilmenge der Abonnements: Rolle `Reader` auf `Microsoft.Insights/eventtypes/*` (erforderlich zum Abrufen des Azure Monitor-Aktivitätsprotokolls)
Optional (bei Verwendung des Schalters `-organizations`):
- Für die ausgewählte Teilmenge der Azure DevOps-Abonnements: `View audit log` (erforderlich zum Abrufen des Azure DevOps-Überwachungsprotokolls)
Um Microsoft Entra-Protokolle mit der Microsoft Graph-API abrufen zu können, benötigen Sie mindestens einen Benutzer mit einer [Microsoft Entra ID P1](https://www.microsoft.com/de-de/security/business/microsoft-entra-pricing)-Lizenz. Diese Lizenz kann für einen einzelnen Benutzer erworben werden oder in einigen Lizenzplänen wie dem *Microsoft 365 Business Premium*-Plan enthalten sein.
## Im Modul enthaltene Funktionen
Das Modul enthält 10 Funktionen:
| **Funktion** | **Datenquelle** | Aufbewahrungsdauer | **Leistung** | **Vollständigkeit** | **Details** |
|---|---|---|---|---|---|
| `Get-O365Full` | Unified Audit Log | 90 Tage / 180 Tage* | Schlecht | Alle Unified Audit Logs | Standardmäßig wird das gesamte Unified Audit Log abgerufen. Dies sollte nur bei einem kleinen Mandanten oder für einen kurzen Zeitraum verwendet werden.<br />Sie können dieses Cmdlet auch verwenden, um Ereignisse für bestimmte [Datensatztypen](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32) zu sammeln. |
| `Get-O365Light` | Unified Audit Log | 90 Tage / 180 Tage* | Gut | Nur eine Teilmenge der Unified Audit Logs | Es wird nur eine Teilmenge der *Vorgänge* abgerufen, die als interessant erachtet werden. |
| `Get-O365Defender` | Unified Audit Log | 90 Tage / 180 Tage* | Gut | Nur eine Teilmenge der Unified Audit Logs | Ruft Ereignisse im Zusammenhang mit Microsoft Defender für Microsoft 365 ab. Erfordert mindestens eine [Office 365 E5](https://www.microsoft.com/de-de/microsoft-365/enterprise/office-365-e5?activetab=pivot:overviewtab)-Lizenz oder einen Lizenzplan, der Microsoft Defender für Office 365 enthält. |
| `Get-AADLogs` | Microsoft Entra-Protokolle | 30 Tage | Gut | Alle Microsoft Entra-Protokolle | Ruft Mandanteninformationen und alle Microsoft Entra-Protokolle ab: Anmelde- und Überwachungsprotokolle. |
| `Get-AADApps` | N/A | N/A | Gut | Vollständig | Microsoft Entra ID-Dienstprinzipale und ihre Anwendungen, oauth2PermissionGrants und appRoleAssignments |
| `Get-AADDevices` | N/A | N/A | Gut | Vollständig | Microsoft Entra ID-Geräte und deren Besitzer/Benutzer |
| `Get-AADUsers` | N/A | N/A | Gut | Vollständig | Microsoft Entra ID-Benutzer und deren Authentifizierungsmethoden |
| `Search-O365` | Unified Audit Log / Postfach-Überwachungsprotokoll** | 90 Tage / 180 Tage* | Schlecht | Nur eine Teilmenge der Unified Audit Logs | Suche nach Aktivitäten im Zusammenhang mit bestimmten Benutzern, IP-Adressen oder Freitexten. |
| `Get-AzRMActivityLogs` | Azure Monitor-Aktivitätsprotokoll | 90 Tage | Gut | Alle Azure Monitor-Aktivitätsprotokolle | Ruft alle Azure Monitor-Aktivitätsprotokolle für eine ausgewählte Teilmenge der Abonnements ab. |
| `Get-AzDevOpsActivityLogs` | Azure DevOps-Überwachungsprotokoll | 90 Tage | Gut | Alle Azure DevOps-Überwachungsprotokolle | Ruft alle Azure DevOps-Überwachungsprotokolle für eine ausgewählte Teilmenge der Azure DevOps-Organisationen ab. |
\* Sie können mit Purview eine Aufbewahrungsdauer von 180 Tagen erreichen, gegenüber der standardmäßigen 90-tägigen Aufbewahrung mit Exchange Online.
** Bei der Suche nach Benutzern durchsucht das Cmdlet `Search-O365` auch das Postfach-Überwachungsprotokoll.
Jede Funktion verfügt über eine kommentarbasierte Hilfe, die Sie mit dem Cmdlet *Get-Help* aufrufen können.```powershell
# Display comment-based help
PS> Get-Help Get-O365Full
# Display comment-based help with examples
PS> Get-Help Get-O365Full -Examples
Jede Funktion nimmt als Parameter entgegen:
-startDate) ;-endDate) ;-appId), die beim Erstellen der Anwendung abgerufen wird ;-tenant) ;-certificatePath), der beim Erstellen der Anwendung abgerufen wird.Beispiele:
Zur besseren Lesbarkeit gehen wir davon aus:```powershell $appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $tenant = "example.onmicrosoft.com" $certificatePath = "./example.pfx"
In einem realen Fall werden diese Parameter beim [Erstellen der Anwendung](#creating-the-application) gesammelt.
Um Microsoft Entra-Protokolle der letzten 30 Tage sowie allgemeine Informationen über den Mandanten abzurufen:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Erhalten Sie Microsoft Entra-Dienstprinzipale und deren Anwendung, oauth2PermissionGrant und appRoleAssignment:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-30) Get-AADApps --appId $appId -tenant $tenant -certificatePath $certificatePath
Microsoft Entra-Geräte und deren Besitzer und Benutzer abrufen:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADDevices -appId $appId -tenant $tenant -certificatePath $certificatePath
Microsoft Entra-Benutzer und deren Authentifizierungsmethodeneinstellungen abrufen:```powershell Get-AADUsers -appId $appId -tenant $tenant -certificatePath $certificatePath -authenticationMethods
Rufen Sie Unified Audit-Log-Ereignisse ab, die in den letzten 30 Tagen als interessant gelten, mit Ausnahme derjenigen, die sich auf Entra ID beziehen, die bereits durch den ersten Befehl abgerufen wurden:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -operationsSet "allButAzureAD"
Rufen Sie die Unified-Audit-Log-Ereignisse ab, die in einem Zeitfenster zwischen -90 Tagen und -30 Tagen ab jetzt als interessant gelten:```powershell $endDate = (Get-Date).AddDays(-30) $startDate = (Get-Date).AddDays(-90) Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Wenn die Postfachüberwachung aktiviert ist, können Sie auch `MailboxLogin`-Vorgänge mit dem entsprechenden Schalter abrufen:
_Beachten Sie das globale Limit von 50.000 Ereignissen pro Suche_```powershell
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -mailboxLogin
Wenn es Benutzer mit Office 365 E5-Lizenzen gibt oder wenn ein Microsoft Defender for Office 365 Plan im Mandanten vorhanden ist, können Sie Microsoft Defender-bezogene Protokolle der letzten 90 Tage abrufen:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-O365Defender -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Um alle Unified Audit Log-Ereignisse zwischen Heiligabend 2020 und dem zweiten Weihnachtsfeiertag 2020 abzurufen:
_Beachten Sie, dass die Leistung bei Verwendung dieses Cmdlets schlecht ist_```powershell
$endDate = Get-Date "12/26/2020"
$startdate = Get-Date "12/24/2020"
Get-O365Full -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Sie können die Suchfunktion verwenden, um nach IP-Adressen, Aktivitäten in Bezug auf bestimmte Benutzer zu suchen oder eine Freitextsuche im Unified Audit Log durchzuführen:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90)
Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -freeTexts "Python","Python3"
Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -IPAddresses "8.8.8.8","4.4.4.4"
Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -userIds "[email protected]","[email protected]"
Bei der Suche nach bestimmten **Benutzern** wird `Search-O365` auch im Mailbox-Überwachungsprotokoll suchen. Das liegt daran, dass abhängig von der Lizenzstufe und den Einstellungen des Benutzers einige der Postfachprotokolle möglicherweise nicht im Unified Audit Log vorhanden sind.
Um alle Azure Resource Manager-Aktivitätsprotokolle aus den Abonnements abzurufen, auf die die Anwendung Zugriff hat:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-90)
Get-AzRMActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Um alle Azure DevOps-Aktivitätsprotokolle von den Organisationen abzurufen, auf die die Anwendung Zugriff hat:```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-AzDevOpsActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
## Generierte Dateien
Alle generierten Dateien sind im JSON-Format.
_Mehrere Cmdlets, die Purview verwenden und in dieselbe Ausgabedatei schreiben, können aufgrund einer „naiven“ Verkettung zu einem ungültigen JSON führen_
- `Get-AADApps` erstellt im Ordner `azure_ad_apps`:
- eine JSON-Datei mit vorhandenen und gelöschten Anwendungen: `AADApps_example.onmicrosoft.com_applications_raw.json`;
- eine JSON-Datei mit vorhandenen und gelöschten Dienstprinzipalen: `AADApps_example.onmicrosoft.com_service_principals_raw.json`;
- eine JSON-Datei mit den angereicherten Dienstprinzipalen: `AADApps_example.onmicrosoft.com.json`.
- `Get-AADDevices` erstellt im Ordner `azure_ad_devices`:
- eine JSON-Datei mit vorhandenen und gelöschten Geräten: `AADDevices_example.onmicrosoft.com_devices_raw.json`;
- eine JSON-Datei mit den angereicherten Geräten: `AADDevices_example.onmicrosoft.com.json`.
- `Get-AADUsers` erstellt im Ordner `azure_ad_users`:
- eine JSON-Datei mit vorhandenen und gelöschten Benutzern: `AADUsers_example.onmicrosoft.com_users_raw.json`;
- eine JSON-Datei mit den Authentifizierungseinstellungen von Benutzern: `AADUsers_example.onmicrosoft.com_users_settings_raw.json`;
- eine JSON-Datei mit den angereicherten Benutzern: `AADUsers_example.onmicrosoft.com.json`.
- `Get-AADLogs` erstellt:
- im Ordner `azure_ad_tenant`:
- eine JSON-Datei mit allgemeinen Informationen zum Mandanten: `AADTenant_example.onmicrosoft.com.json`.
- im Ordner `azure_ad_audit`:
- JSON-Dateien mit Microsoft Entra-Überwachungsprotokollen: `AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json`.
- im Ordner `azure_ad_signin`:
- JSON-Dateien mit Microsoft Entra-Anmeldeprotokollen: `YYYY-MM-DD/AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json`.
- `Get-AzRMActivityLogs` erstellt:
- im Ordner `azure_rm_subscriptions`:
- eine JSON-Datei mit allgemeinen Informationen zu den Abonnements: `AzRMsubscriptions_example.onmicrosoft.com.json`.
- im Ordner `azure_rm_activity`:
- JSON-Dateien mit Azure Monitor-Aktivitätsprotokollen: `YYYY-MM-DD/AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json`.
- `Get-AzDevOpsActivityLogs` erstellt:
- im Ordner `azure_DevOps_orgs`:
- eine JSON-Datei mit allgemeinen Informationen zu den Azure DevOps-Organisationen: `AzdevopsOrgs_example.onmicrosoft.com.json`.
- im Ordner `azure_DevOps_activity`:
- JSON-Dateien mit Azure DevOps-Überwachungsprotokollen: `YYYY-MM-DD/AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json`.
- `Get-O365Full` erstellt im Ordner `O365_unified_audit_logs` (bzw. `O365_unified_audit_logs_purview` bei Verwendung von Purview):
- JSON-Dateien mit Unified Audit-Protokollen: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (bzw. `*/UnifiedAuditLogPurview_*` bei Verwendung von Purview);
- JSON-Dateien mit Unified Audit-Protokollen für angegebene [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32): `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (bzw. `*/UnifiedAuditLogPurview_*` bei Verwendung von Purview).
- `Get-O365Light` erstellt im Ordner `O365_unified_audit_logs` (bzw. `O365_unified_audit_logs_purview` bei Verwendung von Purview):
- JSON-Dateien mit Unified Audit-Protokollen für eine Teilmenge von *Operationen*, die als interessant erachtet werden: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (bzw. `*/UnifiedAuditLogPurview_*` bei Verwendung von Purview).
- `Get-O365Defender` erstellt im Ordner `O365_unified_audit_logs` (bzw. `O365_unified_audit_logs_purview` bei Verwendung von Purview):
- JSON-Dateien mit Unified Audit-Protokollen für die [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32), die mit Defender verbunden sind: `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (bzw. `*/UnifiedAuditLogPurview_*` bei Verwendung von Purview).
- `Search-O365` erstellt:
- im Ordner `O365_unified_audit_logs` (bzw. `O365_unified_audit_logs_purview` bei Verwendung von Purview):
- JSON-Dateien mit Unified Audit-Protokollen für den angegebenen `RequestType` (`FreeText`, `IPAddresses`, oder `UserIds`): `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RequestType%_YYYY-MM-DD-HH-MM-SS.json` (bzw. `*/UnifiedAuditLogPurview_*` bei Verwendung von Purview). `YYYY-MM-DD-HH-MM-SS` stellt den Zeitpunkt der Sammlung dar. Bei Suche nach `FreeText` wird am Ende ein zusätzliches `_%i` angehängt, das anzeigt, dass dies das Ergebnis der Suche des `%i`-ten Freitextes ist.
- im Ordner `Exchange_mailbox_audit_logs`:
- JSON-Dateien mit Postfach-Überwachungsprotokollen (nur bei Suche nach Benutzer-IDs): `YYYY-MM-DD/MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json`. `YYYY-MM-DD-HH-MM-SS` stellt den Zeitpunkt der Sammlung dar. `%UserID%` zeigt an, dass dies das Ergebnis der Suche nach dieser Benutzer-ID ist.
Das Ausführen der verschiedenen Funktionen erzeugt eine Verzeichnisstruktur ähnlich der folgenden:```
output
│ Get-AADApps.log
│ Get-AADDevices.log
│ Get-AADLogs.log
│ Get-AzDevOpsActivityLogs.log
│ Get-AzRMActivityLogs.log
│ Get-O365Defender.log
│ Get-O365Full.log
│ Get-O365Light.log
│ Search-O365.log
│
├───azure_ad_apps
│ AADApps_example.onmicrosoft.com.json
│ AADApps_example.onmicrosoft.com_applications_raw.json
│ AADApps_example.onmicrosoft.com_service_principals_raw.json
│
├───azure_ad_audit
│ AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json
│ [...]
│
├───azure_ad_devices
│ AADDevices_example.onmicrosoft.com.json
│ AADDevices_example.onmicrosoft.com_devices_raw.json
│
├───azure_ad_signin
│ ├───YYYY-MM-DD
│ │ AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│ │ [...]
│ │
│ ├───[...]
│
├───azure_ad_tenant
│ AADTenant_example.onmicrosoft.com.json
│
├───azure_ad_users
│ AADUsers_divreponse.onmicrosoft.com.json
│ AADUsers_divreponse.onmicrosoft.com_users_raw.json
│ AADUsers_divreponse.onmicrosoft.com_users_settings_raw.json
|
├───azure_DevOps_activity
│ ├───YYYY-MM-DD
│ │ AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json
│ │ [...]
│ │
│ ├───[...]
│
├───azure_DevOps_orgs
│ AzdevopsOrgs_example.onmicrosoft.com.json
├───azure_rm_activity
│ ├───YYYY-MM-DD
│ │ AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json
│ │ [...]
│ │
│ ├───[...]
│
├───azure_rm_subscriptions
│ AzRMsubscriptions_example.onmicrosoft.com.json
│
├───Exchange_mailbox_audit_logs
│ └───YYYY-MM-DD
│ │ MailboxAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS_%UserID%.json
│ │ [...]
│ │
│ ├───[...]
│
├───O365_unified_audit_logs
│ ├───YYYY-MM-DD
│ │ UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│ │ UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│ │ UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│ │ UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│ │ UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│ │ [...]
│ │
│ ├───[...]
│
└───O365_unified_audit_logs_purview
│ ├───YYYY-MM-DD
│ │ UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json
│ │ UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json
│ │ UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_UserIds_YYYY-MM-DD-HH-MM-SS.json
│ │ UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_IPAddresses_YYYY-MM-DD-HH-MM-SS.json
│ │ UnifiedAuditLogPurview_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_FreeText_YYYY-MM-DD-HH-MM-SS_%i.json
│ │ [...]
│ │
│ ├───[...]
| Datenquelle / Endpunkt | Aufbewahrung | Leistung | Umfang |
|---|
| Unified Audit Log / Exchange Online PowerShell | 90 Tage | Schlecht | Alle Microsoft-365-Protokolle (einschließlich Entra) |
| Unified Audit Log / Purview | 180 Tage | Gut | Alle Microsoft-365-Protokolle (einschließlich Entra) |
| Unified Audit Log / Office 365 Management API * | 7 Tage | Gut | Alle Microsoft-365-Protokolle (einschließlich Entra) |
| Microsoft Entra-Protokolle / Microsoft Graph PowerShell | 30 Tage | Gut | Nur Entra-Anmelde- und Audit-Protokolle |
| Microsoft Entra-Protokolle / Microsoft Graph REST API | 30 Tage | Gut | Nur Entra-Anmelde- und Audit-Protokolle |