Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
DFIR-O365RC — Module PowerShell pour la collecte de journaux Office 365 et Azure | Kitploit
Outils/GitHubGitHub/anssi-fr/dfir-o365rc
Analyse ForensiqueCriminalistique NumériqueSécurité CloudRéponse aux IncidentsAnalyse de Journaux
GitHubanssi-fr/dfir-o365rc

DFIR-O365RC

Module PowerShell pour la collecte de journaux Office 365 et Azure

Voir le dépôt
28234il y a 11 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

DFIR-O365RC

Publish Docker image to Dockerhub Publish module to PowerShell Gallery


Table des matières :

  1. Description du module

  2. Installation et prérequis

    1. Utilisation de Docker
    2. Installation manuelle
  3. Gestion de l'application DFIR-O365RC

    1. Création de l'application
    2. Mise à jour de l'application
    3. Suppression de l'application
  4. Permissions et exigences de licence

  5. Fonctions incluses dans le module

  6. Fichiers générés

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. ⚠️

Description du module

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 :

  • Le journal d'audit unifié Microsoft 365 ;
  • Les journaux de connexion et journaux d'audit Microsoft Entra.

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 :

  • Les journaux Microsoft Entra à l'aide de Microsoft Graph PowerShell car les performances sont bonnes et c'est une surcouche de l'API REST Microsoft Graph ;
  • Par défaut, le journal d'audit unifié à l'aide d'Exchange Online PowerShell : malgré de faibles performances, c'est la seule option utilisable pour l'instant ;
  • Optionnellement, le journal d'audit unifié à l'aide de Purview. La rétention est de 180 jours, les performances sont bonnes mais il est encore en version bêta et des bogues dans le back-end le rendent inutilisable pour l'instant.

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 :

  • vous pouvez obtenir le journal d'activité Azure Monitor à l'aide du module PowerShell Az.Monitor, avec une rétention de 90 jours. Ce journal se concentre sur les activités dans Azure Resource Manager (liées à un abonnement Azure) ;
  • vous pouvez obtenir le journal d'audit Azure DevOps à l'aide de l'API REST Azure DevOps Services, avec une rétention de 90 jours. Ce journal se concentre sur les activités dans Azure DevOps (liées à une organisation Azure DevOps).

Installation et prérequis

Utilisation de Docker

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

root@kitploit:~
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

using legacy Compose V1

sudo docker-compose run dfir-o365rc

root@kitploit:~
### 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.

Gestion de l'application DFIR-O365RC

Création de l'application

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 :

  1. 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"

    root@kitploit:~

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()))

root@kitploit:~
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

root@kitploit:~
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

root@kitploit:~
### 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:

  • une date de début (-startDate) ;
  • une date de fin (-endDate) ;
  • l'identifiant d'application de l'application (-appId), qui est obtenu lors de la création de l'application ;
  • le nom du locataire (-tenant) ;
  • le chemin d'accès au certificat au format PFX (-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"

root@kitploit:~
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

root@kitploit:~
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

root@kitploit:~
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

root@kitploit:~
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

root@kitploit:~
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)

Retrieve events which contains the "Python" or "Python3" free text

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -freeTexts "Python","Python3"

Retrieve events related to the IP adresses 8.8.8.8 and 4.4.4.4.

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -IPAddresses "8.8.8.8","4.4.4.4"

Retrieve events related to users [email protected] and [email protected]

Search-O365 -startDate $startDate -endDate $endDate -appId $appId -tenant $tenant -certificatePath $certificatePath -userIds "[email protected]","[email protected]"

root@kitploit:~
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

root@kitploit:~
## 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
│   │       [...]
│   │
│   ├───[...]
Télécharger l’outil
Source de données / Point de terminaisonRétentionPerformancePérimètre
Journal d'audit unifié / Exchange Online PowerShell90 joursFaibleTous les journaux Microsoft 365 (Entra inclus)
Journal d'audit unifié / Purview180 joursBonneTous les journaux Microsoft 365 (Entra inclus)
Journal d'audit unifié / API de gestion Office 365 *7 joursBonneTous les journaux Microsoft 365 (Entra inclus)
Journaux Microsoft Entra / Microsoft Graph PowerShell30 joursBonneJournaux de connexion et d'audit Entra uniquement
Journaux Microsoft Entra / API REST Microsoft Graph30 joursBonneJournaux de connexion et d'audit Entra uniquement