
Module PowerShell pour la collecte de journaux Office 365 et Azure

DFIR-O365RC a été présenté à SSTIC 2021 (Symposium sur la sécurité des technologies de l'information et des communications). Les diapositives et un enregistrement de la présentation, en français, sont disponibles ici.
⚠️ Le 31 mars 2024, Microsoft a supprimé la méthode d'authentification que nous utilisions pour DFIR-O365RC. Cela a conduit à la publication de la version 2.0.0 en août 2024, avec des changements majeurs concernant l'authentification et une refonte globale du code. ⚠️
Le module PowerShell DFIR-O365RC est un ensemble de fonctions qui permet à un analyste forensique de collecter les journaux pertinents pour les compromissions Microsoft 365 et de mener des investigations Entra ID.
Les journaux sont générés au format JSON et récupérés depuis deux sources de données principales :
Ces deux sources de données peuvent être interrogées depuis différents points de terminaison :
* L'API de gestion Office 365 est destinée à analyser les données en temps réel avec un SIEM. DFIR-O365RC est un outil forensique, son objectif n'est pas de surveiller un environnement Microsoft 365 en temps réel.
DFIR-O365RC récupérera les données depuis :
Si vous enquêtez sur une activité malveillante Microsoft 365, l'applet de commande Search-O365 (provenant d'Exchange Online PowerShell) récupérera également le journal d'audit de la boîte aux lettres, bien que l'applet de commande Search-MailboxAuditLog soit en cours de dépréciation.
Si vous enquêtez sur d'autres ressources Azure, avec DFIR-O365RC :
C'est la méthode recommandée pour utiliser DFIR-O365RC
Tapez simplement :```bash sudo docker pull anssi/dfir-o365rc:latest sudo docker run --rm -v .:/mnt/host -it anssi/dfir-o365rc:latest
DFIR-O365RC est prêt à l'emploi :```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>
Si vous souhaitez construire votre image Docker manuellement, clonez le dépôt et utilisez docker compose (ou le docker-compose hérité) pour construire l'image, exécuter le conteneur et monter un volume (dans le dossier output/) :```bash
sudo docker compose build dfir-o365rc
sudo docker compose run dfir-o365rc
sudo docker-compose run dfir-o365rc
### Utilisation de PowerShell
Vous pouvez installer le module sur *PowerShell Desktop* et *PowerShell Core*.
Veuillez noter que l'applet de commande `Connect-ExchangeOnline` [nécessite Microsoft .NET Framework 4.7.2 ou version ultérieure](https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#windows).
Pour installer le module à partir de la galerie PowerShell :```powershell
Install-Module -Name DFIR-O365RC
Vous pouvez également installer le module manuellement en clonant le dépôt DFIR-O365RC, installer les dépendances requises (consultez DFIR-O365RC.psd1) et ajouter le répertoire DFIR-O365RC dans l'un des chemins de modules de votre PowerShell.
Une fois le module importé, vous devrez créer une application Entra, qui gérera le processus de collecte des journaux pour vous.
Pour ce faire :
Créez un certificat auto-signé et obtenez la partie publique encodée en base64 :
Sous Linux, à l'aide de PowerShell Core ou du conteneur Docker : ```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"
Sur Windows, en utilisant 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) Utilisez la cmdlet `New-Application` du module DFIR-O365RC : ```powershell
$certificateb64="<base64-encoded public part from step 1>"
New-Application -certificateb64 $certificateb64
En option, si vous souhaitez pouvoir collecter les journaux dans les abonnements du locataire (non nécessaire si vous ne prévoyez pas d'utiliser Get-AzRMActivityLogs) : ```powershell
New-Application -certificateb64 $certificateb64 -subscriptions
Optionnellement, si vous souhaitez pouvoir collecter des journaux dans les organisations Azure DevOps du locataire (cela peut prendre beaucoup de temps et n'est pas nécessaire si vous ne prévoyez pas d'utiliser `Get-AzDevOpsActivityLogs`): ```powershell
New-Application -certificateb64 $certificateb64 -organizations
Pour créer l'application, vous devrez vous connecter à Azure plusieurs fois, en utilisant un compte hautement privilégié.
Une fois l'application créée, vous obtiendrez un résultat similaire à : ```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
### Mise à jour de l'application
Une fois l'application créée, vous pouvez toujours, à l'aide de l'applet de commande `Update-Application` du module, mettre à jour ses informations d'identification et ses autorisations :
- Vous pouvez ajouter un nouveau certificat à l'application :
`Update-Application -certificateb64 <base64-encoded public part>`
- Vous pouvez spécifier de nouveaux abonnements dans lesquels vous souhaitez pouvoir collecter des journaux :
`Update-Application -subscriptions`
- Vous pouvez spécifier de nouvelles organisations Azure DevOps dans lesquelles vous souhaitez pouvoir collecter des journaux :
`Update-Application -organizations`
- Vous pouvez mettre à jour les autorisations de l'application, ce qui est particulièrement utile si vous avez une ancienne application et que les autorisations ont été mises à jour depuis sa création :
`Update-Application -permissions`
### Suppression de l'application
Une fois que vous avez terminé la collecte des journaux, vous pouvez supprimer l'application à l'aide de l'applet de commande `Remove-Application` du module.
Pour supprimer l'application, vous devrez vous connecter à Azure plusieurs fois, en utilisant un compte **hautement privilégié**.
Si l'application a pu collecter des journaux d'abonnements ou d'organisations Azure DevOps, vous devrez ajouter les commutateurs `-organizations` et/ou `-subscriptions`.
## Exigences en matière d'autorisations et de licence
⚠️
À partir de la version 2.0.0, l'outil s'exécute désormais dans le contexte d'un principal de service avec [Accès application uniquement / Autorisations d'application](https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#app-only-access-access-without-a-user).
Pour utiliser la version 2.0.0 et ultérieures, vous devrez [créer une application](#creating-the-application).
Une fois l'application créée, le script s'exécutera en utilisant les informations d'identification et les autorisations de l'application.
⚠️
L'application sera créée avec l'ensemble d'autorisations requises le plus bas possible :
- `Exchange.ManageAsApp` pour l'API `Office 365 Exchange Online` (requis pour pouvoir exécuter les applets de commande Exchange Online PowerShell)
- `AuditLog.Read.All` pour l'API `Microsoft Graph` (requis pour la collecte des journaux Microsoft Entra)
- `AuditLogsQuery.Read.All` pour l'API `Microsoft Graph` (requis pour la collecte des journaux d'audit unifiés à l'aide de Purview)
- `Application.Read.All` et `DelegatedPermissionGrant.Read.All` pour l'API `Microsoft Graph` (requis pour l'enrichissement des journaux Microsoft Entra liés aux applications et aux principaux de service)
- `Device.Read.All` pour l'API `Microsoft Graph` (requis pour l'enrichissement des journaux Microsoft Entra liés aux appareils)
- `User.Read.All` pour l'API `Microsoft Graph` (requis pour obtenir des informations sur les utilisateurs)
- `UserAuthenticationMethod.Read.All` pour l'API `Microsoft Graph` (requis pour obtenir des informations sur les méthodes d'authentification des utilisateurs)
- `Organization.Read.All` pour l'API `Microsoft Graph` (requis pour obtenir des informations générales sur le locataire)
- `View-only audit logs` dans `Exchange Online` (requis pour utiliser l'applet de commande `Search-UnifiedAuditLog`)
Optionnellement (si vous utilisez le commutateur `-subscriptions`) :
- Pour le sous-ensemble sélectionné d'abonnements : rôle `Reader` sur `Microsoft.Insights/eventtypes/*` (requis pour obtenir le journal d'activité Azure Monitor)
Optionnellement (si vous utilisez le commutateur `-organizations`) :
- Pour le sous-ensemble sélectionné d'abonnements Azure DevOps : `View audit log` (requis pour obtenir le journal d'audit Azure DevOps)
Afin de récupérer les journaux Microsoft Entra avec l'API Microsoft Graph, vous avez besoin d'au moins un utilisateur disposant d'une licence [Microsoft Entra ID P1](https://www.microsoft.com/en-us/security/business/microsoft-entra-pricing). Cette licence peut être achetée pour un seul utilisateur ou peut être incluse dans certains plans de licence tels que le plan *Microsoft 365 Business Premium*.
## Fonctions incluses dans le module
Le module comporte 10 fonctions :
| **Fonction** | **Source de données** | Rétention | **Performances** | **Complétude** | **Détails** |
|---|---|---|---|---|---|
| `Get-O365Full` | Journal d'audit unifié | 90 jours / 180 jours* | Mauvaise | Journal d'audit unifié complet | Par défaut, récupère l'intégralité du journal d'audit unifié. Cela ne doit être utilisé que sur un petit locataire ou une courte période.<br />Vous pouvez également utiliser cette applet de commande pour collecter des événements pour certains [types d'enregistrements](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32) spécifiques. |
| `Get-O365Light` | Journal d'audit unifié | 90 jours / 180 jours* | Bonne | Un sous-ensemble du journal d'audit unifié uniquement | Seul un sous-ensemble d'*opérations*, considérées comme intéressantes, est récupéré. |
| `Get-O365Defender` | Journal d'audit unifié | 90 jours / 180 jours* | Bonne | Un sous-ensemble du journal d'audit unifié uniquement | Récupère les événements liés à Microsoft Defender pour Microsoft 365. Nécessite au moins une licence [Office 365 E5](https://www.microsoft.com/en-us/microsoft-365/enterprise/office-365-e5?activetab=pivot:overviewtab) ou un plan de licence incluant Microsoft Defender pour Office 365. |
| `Get-AADLogs` | Journaux Microsoft Entra | 30 jours | Bonne | Tous les journaux Microsoft Entra | Obtenir les informations du locataire et tous les journaux Microsoft Entra : journaux de connexion et journaux d'audit. |
| `Get-AADApps` | N/A | N/A | Bonne | Complète | Principaux de service Microsoft Entra ID et leurs applications, oauth2PermissionGrants et appRoleAssignments |
| `Get-AADDevices` | N/A | N/A | Bonne | Complète | Appareils Microsoft Entra ID et leurs propriétaires/utilisateurs |
| `Get-AADUsers` | N/A | N/A | Bonne | Complète | Utilisateurs Microsoft Entra ID et leurs méthodes d'authentification |
| `Search-O365` | Journal d'audit unifié / Journal d'audit de boîte aux lettres** | 90 jours / 180 jours* | Mauvaise | Un sous-ensemble du journal d'audit unifié uniquement | Rechercher une activité liée à des utilisateurs spécifiques, des adresses IP ou des textes libres. |
| `Get-AzRMActivityLogs` | Journal d'activité Azure Monitor | 90 jours | Bonne | Tous les journaux d'activité Azure Monitor | Obtenir tous les journaux d'activité Azure Monitor pour un sous-ensemble sélectionné d'abonnements. |
| `Get-AzDevOpsActivityLogs` | Journal d'audit Azure DevOps | 90 jours | Bonne | Tous les journaux d'audit Azure DevOps | Obtenir tous les journaux d'audit Azure DevOps pour un sous-ensemble sélectionné d'organisations Azure DevOps. |
\* Vous pouvez obtenir 180 jours de rétention en utilisant Purview, par rapport aux 90 jours par défaut en utilisant Exchange Online.
** Lors de la recherche d'utilisateurs, l'applet de commande `Search-O365` recherchera également dans le journal d'audit de la boîte aux lettres.
Chaque fonction dispose d'une aide basée sur les commentaires que vous pouvez invoquer avec l'applet de commande *Get-Help*.```powershell
# Display comment-based help
PS> Get-Help Get-O365Full
# Display comment-based help with examples
PS> Get-Help Get-O365Full -Examples
Chaque fonction prend comme paramètre:
-startDate) ;-endDate) ;-appId), qui est obtenu lors de la création de l'application ;-tenant) ;-certificatePath), qui est obtenu lors de la création de l'application.Exemples:
Pour des raisons de lisibilité, nous supposerons que:```powershell $appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $tenant = "example.onmicrosoft.com" $certificatePath = "./example.pfx"
Sur un cas réel, ces paramètres sont collectés lors de la [création de l'application](#creating-the-application).
Afin de récupérer les journaux Microsoft Entra des 30 derniers jours ainsi que les informations générales sur le locataire :```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Obtenez les principaux de service Microsoft Entra et leur application, oauth2PermissionGrant et appRoleAssignment :```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-30) Get-AADApps --appId $appId -tenant $tenant -certificatePath $certificatePath
Obtenir les appareils Microsoft Entra et leurs propriétaires et utilisateurs:```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-AADDevices -appId $appId -tenant $tenant -certificatePath $certificatePath
Obtenir les utilisateurs Microsoft Entra et leurs paramètres de méthodes d'authentification :```powershell Get-AADUsers -appId $appId -tenant $tenant -certificatePath $certificatePath -authenticationMethods
Récupérer les événements du journal d'audit unifié considérés comme intéressants des 30 derniers jours, à l'exception de ceux liés à Entra ID, qui ont déjà été récupérés par la première commande :```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-30)
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -operationsSet "allButAzureAD"
Récupérer les événements Unified Audit log considérés comme intéressants dans une fenêtre temporelle comprise entre -90 jours et -30 jours à partir de maintenant :```powershell $endDate = (Get-Date).AddDays(-30) $startDate = (Get-Date).AddDays(-90) Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Si l'audit de la boîte aux lettres est activé, vous pouvez également récupérer les opérations `MailboxLogin` à l'aide du commutateur dédié :
_Attention à une limite globale de 50 000 événements par recherche_```powershell
Get-O365Light -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -mailboxLogin
S'il existe des utilisateurs disposant de licences Office 365 E5 ou si un plan Microsoft Defender pour Office 365 est présent dans le locataire, vous pouvez récupérer les journaux liés à Microsoft Defender des 90 derniers jours :```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-O365Defender -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Pour récupérer tous les événements du Unified Audit Log entre la veille de Noël 2020 et le lendemain de Noël 2020 :
_Attention, les performances avec cette cmdlet sont médiocres_```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
Vous pouvez utiliser la fonction de recherche pour rechercher des adresses IP, des activités liées à des utilisateurs spécifiques ou effectuer une recherche en texte libre dans le journal d'audit unifié :```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]"
Quand on recherche des **utilisateurs** spécifiques, `Search-O365` cherchera aussi dans le journal d'audit de la boîte aux lettres. En effet, selon le niveau de licence et les paramètres de l'utilisateur, certains journaux de boîte aux lettres peuvent ne pas être présents dans le journal d'audit unifié.
Pour récupérer tous les journaux d'activité d'Azure Resource Manager des abonnements auxquels l'application a accès :```powershell
$endDate = Get-Date
$startDate = $endDate.AddDays(-90)
Get-AzRMActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
Pour récupérer tous les journaux d'activité Azure DevOps des organisations auxquelles l'application a accès :```powershell $endDate = Get-Date $startDate = $endDate.AddDays(-90) Get-AzDevOpsActivityLogs -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath
## Fichiers générés
Tous les fichiers générés sont au format JSON.
_Lancer plusieurs cmdlets qui utilisent Purview et écrivent dans le même fichier de sortie peut entraîner un JSON invalide en raison d'une concaténation « naive »_
- `Get-AADApps` créera dans le dossier `azure_ad_apps` :
- un fichier JSON contenant les applications existantes et supprimées : `AADApps_example.onmicrosoft.com_applications_raw.json` ;
- un fichier JSON contenant les principaux de service existants et supprimés : `AADApps_example.onmicrosoft.com_service_principals_raw.json` ;
- un fichier JSON contenant les principaux de service enrichis : `AADApps_example.onmicrosoft.com.json`.
- `Get-AADDevices` créera dans le dossier `azure_ad_devices` :
- un fichier JSON contenant les appareils existants et supprimés : `AADDevices_example.onmicrosoft.com_devices_raw.json` ;
- un fichier JSON contenant les appareils enrichis : `AADDevices_example.onmicrosoft.com.json`.
- `Get-AADUsers` créera dans le dossier `azure_ad_users` :
- un fichier JSON contenant les utilisateurs existants et supprimés : `AADUsers_example.onmicrosoft.com_users_raw.json` ;
- un fichier JSON contenant les paramètres d'authentification des utilisateurs : `AADUsers_example.onmicrosoft.com_users_settings_raw.json` ;
- un fichier JSON contenant les utilisateurs enrichis : `AADUsers_example.onmicrosoft.com.json`.
- `Get-AADLogs` créera :
- dans le dossier `azure_ad_tenant` :
- un fichier JSON contenant des informations générales sur le locataire : `AADTenant_example.onmicrosoft.com.json`.
- dans le dossier `azure_ad_audit` :
- des fichiers JSON contenant les journaux d'audit Microsoft Entra : `AADAuditLog_example.onmicrosoft.com_YYYY-MM-DD.json`.
- dans le dossier `azure_ad_signin` :
- des fichiers JSON contenant les journaux de connexion Microsoft Entra : `YYYY-MM-DD/AADSigninLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json`.
- `Get-AzRMActivityLogs` créera :
- dans le dossier `azure_rm_subscriptions` :
- un fichier JSON contenant des informations générales sur les abonnements : `AzRMsubscriptions_example.onmicrosoft.com.json`.
- dans le dossier `azure_rm_activity` :
- des fichiers JSON contenant les journaux d'activité Azure Monitor : `YYYY-MM-DD/AzRM_example.onmicrosoft.com_%SubscriptionID%_YYYY-MM-DD_HH-00-00.json`.
- `Get-AzDevOpsActivityLogs` créera :
- dans le dossier `azure_DevOps_orgs` :
- un fichier JSON contenant des informations générales sur les organisations Azure DevOps : `AzdevopsOrgs_example.onmicrosoft.com.json`.
- dans le dossier `azure_DevOps_activity` :
- des fichiers JSON contenant les journaux d'audit Azure DevOps : `YYYY-MM-DD/AzDevOps_example.onmicrosoft.com_%AzureDevOpsOrg%_YYYY-MM-DD_HH-00-00.json`.
- `Get-O365Full` créera dans le dossier `O365_unified_audit_logs` (respectivement `O365_unified_audit_logs_purview` lors de l'utilisation de Purview) :
- des fichiers JSON contenant les journaux d'audit unifiés : `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (respectivement `*/UnifiedAuditLogPurview_*` lors de l'utilisation de Purview) ;
- des fichiers JSON contenant les journaux d'audit unifiés pour les [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32) spécifiés : `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (respectivement `*/UnifiedAuditLogPurview_*` lors de l'utilisation de Purview).
- `Get-O365Light` créera dans le dossier `O365_unified_audit_logs` (respectivement `O365_unified_audit_logs_purview` lors de l'utilisation de Purview) :
- des fichiers JSON contenant les journaux d'audit unifiés pour un sous-ensemble d'*opérations* considérées comme intéressantes : `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00.json` (respectivement `*/UnifiedAuditLogPurview_*` lors de l'utilisation de Purview).
- `Get-O365Defender` créera dans le dossier `O365_unified_audit_logs` (respectivement `O365_unified_audit_logs_purview` lors de l'utilisation de Purview) :
- des fichiers JSON contenant les journaux d'audit unifiés pour les [RecordTypes](https://learn.microsoft.com/en-us/office/office-365-management-api/office-365-management-activity-api-schema#enum-auditlogrecordtype---type-edmint32) associés à Defender : `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RecordType%.json` (respectivement `*/UnifiedAuditLogPurview_*` lors de l'utilisation de Purview).
- `Search-O365` créera :
- dans le dossier `O365_unified_audit_logs` (respectivement `O365_unified_audit_logs_purview` lors de l'utilisation de Purview) :
- des fichiers JSON contenant les journaux d'audit unifiés pour le `RequestType` spécifié (`FreeText`, `IPAddresses`, ou `UserIds`) : `YYYY-MM-DD/UnifiedAuditLog_example.onmicrosoft.com_YYYY-MM-DD_HH-00-00_%RequestType%_YYYY-MM-DD-HH-MM-SS.json` (respectivement `*/UnifiedAuditLogPurview_*` lors de l'utilisation de Purview). `YYYY-MM-DD-HH-MM-SS` représente l'heure à laquelle la collecte a été effectuée. Lors de la recherche de `FreeText`, un `_%i` supplémentaire est ajouté à la fin, ce qui indique qu'il s'agit du résultat de la recherche du `%i`-ième texte libre.
- dans le dossier `Exchange_mailbox_audit_logs` :
- des fichiers JSON contenant les journaux d'audit de boîte aux lettres (uniquement lors de la recherche de UserIDs) : `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` représente l'heure à laquelle la collecte a été effectuée. `%UserID%` indique qu'il s'agit du résultat de la recherche de cet UserID.
Le lancement des différentes fonctions générera une structure de répertoires similaire à celle-ci :```
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
│ │ [...]
│ │
│ ├───[...]
| Source de données / Point de terminaison | Rétention | Performance | Périmètre |
|---|
| Journal d'audit unifié / Exchange Online PowerShell | 90 jours | Faible | Tous les journaux Microsoft 365 (Entra inclus) |
| Journal d'audit unifié / Purview | 180 jours | Bonne | Tous les journaux Microsoft 365 (Entra inclus) |
| Journal d'audit unifié / API de gestion Office 365 * | 7 jours | Bonne | Tous les journaux Microsoft 365 (Entra inclus) |
| Journaux Microsoft Entra / Microsoft Graph PowerShell | 30 jours | Bonne | Journaux de connexion et d'audit Entra uniquement |
| Journaux Microsoft Entra / API REST Microsoft Graph | 30 jours | Bonne | Journaux de connexion et d'audit Entra uniquement |