Rétention d'audit Microsoft 365 & réalités de licences
Lors d’une réponse à incident cyber, l’un des constats les plus dévastateurs pour une équipe d’investigation est la falaise de rétention forensique : découvrir que l’activité initiale de l’attaquant remonte à 195 jours, mais que le tenant de la victime a définitivement purgé toute la télémétrie au 180e jour parce qu’il ne disposait que d’une licence Audit Standard et d’aucun export vers un SIEM externe.
La rétention des journaux d’audit dans Microsoft 365 n’est pas une simple case à cocher technique : elle est étroitement asservie aux niveaux de licences, aux plafonds de régulation d’API et aux bouleversements doctrinaux consécutifs à l’affaire Storm-0558. Maîtriser ces frontières temporelles détermine si les analystes DFIR pourront reconstituer le vecteur d’accès initial, prouver l’exfiltration de données ou satisfaire aux exigences réglementaires telles que NIS2, ISO/IEC 27001 ou les notifications CNIL / RGPD.
Ce guide détaille les réalités architecturales de la rétention dans Microsoft Purview Audit, les différences opérationnelles entre Audit (Standard) et Audit (Premium), la mise en place de politiques de rétention personnalisées et les stratégies d’archivage à froid.
1. Niveaux de licences & le tournant historique storm-0558
Section intitulée « 1. Niveaux de licences & le tournant historique storm-0558 »1.1 le catalyseur storm-0558
Section intitulée « 1.1 le catalyseur storm-0558 »En juillet 2023, Microsoft a révélé qu’un groupe étatique cybercriminel chinois (Storm-0558) avait dérobé une clé de signature interne Microsoft, forgeant des jetons d’authentification pour accéder aux boîtes Exchange d’agences gouvernementales et de multinationales.
Les victimes dotées de licences E3 / Audit (Standard) se sont heurtées à une cécité forensique critique :
- Les événements d’audit d’investigation majeurs — notamment
MailItemsAccessed(RecordType 50) — étaient totalement absents des flux Audit Standard. - La rétention d’audit était plafonnée à 90 jours, anéantissant toute trace pour des attaques dont le temps de séjour (dwell time) dépassait trois mois.
Sous la pression conjointe de la CISA et de la communauté internationale DFIR, Microsoft a opéré une refonte majeure en octobre 2023 :
- Doublement de la rétention socle : la rétention par défaut pour Audit (Standard) a été étendue de 90 jours à 180 jours sans surcoût.
- Démocratisation des événements clés : les événements forensiques cruciaux (dont
MailItemsAccessedetSend) ont été intégrés aux licences standard (avec toutefois des quotas d’API plus restreints).
graph TD subgraph "Architecture de Licence Purview Audit" LIC_STD[Audit Standard<br/>E3 / Business Premium] LIC_PREM[Audit Premium<br/>E5 / Add-on E5 Compliance] LIC_10YR[Add-on Audit 10 Ans<br/>SKU Spécifique Régulé] end
subgraph "Durées de Rétention" RET_180[180 Jours par Défaut<br/>Purge Définitive au Jour 181] RET_365[365 Jours par Défaut<br/>Configurable jusqu'à 10 Ans] RET_LONG[3 650 Jours / 10 Ans<br/>Archivage Légal Long-Terme] end
subgraph "Capacités Forensiques" CAP_STD[Rétention 180 jours<br/>Bande passante API standard<br/>Logs essentiels Exchange/SharePoint] CAP_PREM[Rétention 1 an<br/>Quota API doublé<br/>Politiques de rétention custom<br/>Requêtes Graph étendues] CAP_10YR[Conformité réglementaire pluriannuelle<br/>Maintien des preuves scellées] end
LIC_STD --> RET_180 LIC_PREM --> RET_365 LIC_10YR --> RET_LONG
RET_180 --> CAP_STD RET_365 --> CAP_PREM RET_LONG --> CAP_10YR1.2 comparatif technique : audit standard vs audit premium
Section intitulée « 1.2 comparatif technique : audit standard vs audit premium »Le tableau suivant synthétise les écarts techniques et forensiques entre les offres Microsoft Purview :
| Fonctionnalité / Capacité | Audit (Standard) | Audit (Premium) | Impact Forensique & Réglementaire |
|---|---|---|---|
| Rétention par défaut | 180 jours (6 mois) | 1 an (365 jours) | Les tenants Standard perdent toute preuve pour les compromissions dont le dwell time dépasse 6 mois. |
| Rétention maximale | Fixe à 180 jours | Configurable jusqu’à 10 ans (avec licence additionnelle) | Indispensable pour les secteurs soumis à des obligations de 1 à 3 ans (NIS2, HIPAA, OIV, bancaire). |
| Politiques de rétention personnalisées | Non supporté | Supporté via New-UnifiedAuditLogRetentionPolicy | Premium permet de cibler les boîtes des VIP et cadres dirigeants pour une durée étendue. |
MailItemsAccessed | Inclus (post-octobre 2023) | Inclus (haute priorité) | Démontre la consultation effective des emails et la synchronisation de dossiers. |
Télémétrie Send | Inclus | Inclus | Identifie les courriels émis par l’attaquant lors d’opérations de fraude au président (BEC). |
| Télémétrie de recherche | Non inclus | SearchQueryInitiatedExchange, SearchQueryInitiatedSharePoint | Révèle les mots-clés saisis par l’attaquant pour repérer les documents financiers ou sensibles. |
| Bande passante management API | Quota standard (2 000 req/min) | Haute disponibilité (Jusqu’à 4 000 req/min) | Évite les erreurs HTTP 429 lors de l’extraction massive de logs en pleine crise. |
2. Cycles de rétention selon les composants M365
Section intitulée « 2. Cycles de rétention selon les composants M365 »Une erreur fréquente en investigation cloud consiste à assimiler la rétention du Unified Audit Log à celle des services sous-jacents. La télémétrie s’évapore selon plusieurs horloges distinctes :
timeline title Horloges d'Éviction de la Télémétrie dans Microsoft 365 0 à 10 Jours : Message Trace temps réel accessible dans le portail 10 à 30 Jours : Message Trace historique accessible (CSV) : Purge des SigninLogs Entra ID sur licences P1/P2 30 à 90 Jours : Message Trace historique purgé définitivement (Plafond absolu à 90j) : Expiration des seuils d'audit de boîte mail locaux 90 à 180 Jours : Fenêtre active du Unified Audit Log (Standard) 180 Jours : Falaise de rétention UAL Standard (Purge définitive au 181e jour) 180 à 365 Jours : Fenêtre active UAL Premium (Boîtes avec licences E5) Au-delà de 365 Jours : Données effacées sauf SKU 10 Ans ou streaming SIEMEnseignements forensiques :
Section intitulée « Enseignements forensiques : »- La falaise des 30 jours : les journaux de connexion Entra ID sont purgés du portail au 30e jour sauf s’ils sont exportés vers un Log Analytics Workspace (voir Fiche 09 : Journaux de Connexion Entra ID).
- Le plafond infranchissable des 90 jours : les recherches historiques Message Trace d’Exchange sont purgées à 90 jours. Aucun support Microsoft ne peut récupérer de métadonnées de transport au-delà (voir Fiche 15 : Message Trace Exchange Online).
- La falaise des 180 jours : les événements UAL des utilisateurs sous licence Standard sont irrévocablement supprimés à 180 jours.
3. Politiques de rétention personnalisées (New-UnifiedAuditLogRetentionPolicy)
Section intitulée « 3. Politiques de rétention personnalisées (New-UnifiedAuditLogRetentionPolicy) »Les entreprises disposant de licences Audit (Premium) peuvent définir des politiques d’audit sur mesure pour conserver des types d’enregistrements, des opérations ou les journaux d’utilisateurs critiques jusqu’à 10 ans.
3.1 mécanisme d’évaluation des politiques
Section intitulée « 3.1 mécanisme d’évaluation des politiques »Les politiques de rétention sont traitées selon leur Priorité (le chiffre le plus faible l’emporte, 1 étant la priorité maximale). Dès qu’un événement pénètre dans Purview, le moteur recherche la règle de plus haute priorité correspondante :
graph TD EVENT[Nouvel Événement Télémétrique dans le UAL] --> EVAL[Évaluation des Politiques selon la Priorité]
EVAL --> P1{Règle 1 : Priorité 1<br/>Cible : Boîtes Directoire / Finance} P1 -->|Correspondance| RET_10Y[Application Rétention 10 Ans]
P1 -->|Pas de Match| P2{Règle 2 : Priorité 10<br/>RecordType : ExchangeItem / MailItemsAccessed} P2 -->|Correspondance| RET_1Y[Application Rétention 1 An]
P2 -->|Pas de Match| DEF[Socle par Défaut de la Licence :<br/>180 Jours Standard / 365 Jours Premium]3.2 configuration et administration via PowerShell
Section intitulée « 3.2 configuration et administration via PowerShell »L’administration des politiques d’audit s’effectue via le module Exchange Online PowerShell avec le rôle Compliance Administrator :
# Connexion à Exchange OnlineConnect-ExchangeOnline
# 1. Lister les politiques de rétention existantesGet-UnifiedAuditLogRetentionPolicy | Sort-Object Priority | Format-Table Name, Priority, RetentionDuration, RecordTypes, Operations, UserIds
# 2. Créer une politique retenant MailItemsAccessed pendant 1 an sur tout le tenantNew-UnifiedAuditLogRetentionPolicy -Name "Retenir_MailItemsAccessed_1An" ` -Description "Conserver la télémétrie MailItemsAccessed pendant 365 jours pour conformité NIS2" ` -RecordTypes @("ExchangeItem") ` -Operations @("MailItemsAccessed") ` -RetentionDuration TwelveMonths ` -Priority 10
# 3. Créer une politique retenant tous les logs des dirigeants pendant 10 ans (Requiert le SKU 10 Ans)New-UnifiedAuditLogRetentionPolicy -Name "VIP_ComiteDirection_10Ans" ` -Description "Rétention décennale pour le comité exécutif" ` -UserIds @("dg@target.com", "daf@target.com", "juridique@target.com") ` -RetentionDuration TenYears ` -Priority 1
# 4. Modifier la priorité d'une règleSet-UnifiedAuditLogRetentionPolicy -Identity "Retenir_MailItemsAccessed_1An" ` -RetentionDuration TwelveMonths ` -Priority 5
# 5. Supprimer une politique obsolèteRemove-UnifiedAuditLogRetentionPolicy -Identity "Retenir_MailItemsAccessed_1An" -Confirm:$false4. Architecture de streaming et stockage froid (SIEM)
Section intitulée « 4. Architecture de streaming et stockage froid (SIEM) »S’en remettre exclusivement au stockage in-tenant du UAL présente des risques majeurs :
- Écart de conformité : les exigences de NIS2 (Article 21), PCI-DSS v4.0 (Exigence 10.5) et ISO/IEC 27001 imposent la conservation des journaux pendant au moins 12 mois, dont 3 mois immédiatement interrogeables. Les tenants en licence Standard sont en infraction par défaut.
- Résistance à la falsification : bien que le UAL ne puisse être directement effacé par un administrateur du tenant, un compte Global Admin compromis peut désactiver l’audit ou altérer les configurations.
- Latence d’extraction : interroger 180 jours d’audit sur des milliers d’utilisateurs via
Search-UnifiedAuditLogest lent et exposé au plafond de 50 000 enregistrements.
4.1 architecture cible : diagnostic settings & API management
Section intitulée « 4.1 architecture cible : diagnostic settings & API management »Pour garantir la conformité et une réactivité forensique optimale, déployez un pipeline hybride :
graph TD subgraph "Plan Cloud Microsoft 365" ENTRA[Plan d'Identité Entra ID<br/>SigninLogs, AuditLogs] PURVIEW[Télémétrie Purview Audit<br/>Exchange, SharePoint, Teams, Defender] end
subgraph "Mécanismes d'Ingestion" DIAG[Azure Diagnostic Settings] MGMT_API[Office 365 Management Activity API] end
subgraph "Dépôts Long-Terme" LAW[Azure Log Analytics / Microsoft Sentinel<br/>Stockage Chaud/Tiède : 30 à 730 Jours] STORAGE[Compte de Stockage Azure / Blob Immuable<br/>Archive Froide : 1 à 10 Ans] SIEM_EXT[SIEM Externe / Datalake<br/>Splunk, Datadog, Snowflake, AWS S3] end
ENTRA -->|Streaming Direct| DIAG DIAG --> LAW DIAG --> STORAGE
PURVIEW -->|Webhook / Polling| MGMT_API MGMT_API --> LAW MGMT_API --> STORAGE MGMT_API --> SIEM_EXT4.2 configuration des diagnostic settings entra ID via azure CLI
Section intitulée « 4.2 configuration des diagnostic settings entra ID via azure CLI »Pour exporter les logs Entra ID vers Azure Log Analytics avant la purge des 30 jours :
# Enregistrer le fournisseur Microsoft.Insightsaz provider register --namespace Microsoft.Insights
# Créer le diagnostic setting pour exporter les logs d'identitéaz monitor diagnostic-settings create \ --name "Entra_Vers_LogAnalytics_LongTerme" \ --resource "/providers/Microsoft.aadiam" \ --workspace "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.OperationalInsights/workspaces/<workspace-name>" \ --logs '[ {"category": "SignInLogs", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}}, {"category": "AuditLogs", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}}, {"category": "NonInteractiveUserSignInLogs", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}}, {"category": "ServicePrincipalSignInLogs", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}}, {"category": "RiskyUsers", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}}, {"category": "UserRiskEvents", "enabled": true, "retentionPolicy": {"enabled": true, "days": 365}} ]'5. Checklist triage des 30 premières minutes : évaluation de la rétention
Section intitulée « 5. Checklist triage des 30 premières minutes : évaluation de la rétention »Lors de la phase initiale d’une réponse à incident, l’analyste DFIR doit déterminer immédiatement la profondeur historique disponible :
Write-Host "[*] Évaluation des Licences et de l'Horizon d'Audit..." -ForegroundColor Cyan
# 1. Vérifier l'activation globale de l'audit UAL$orgConfig = Get-OrganizationConfigif ($orgConfig.AuditDisabled) { Write-Error "[!] ALERTE CRITIQUE : L'audit UAL est DÉSACTIVÉ sur le tenant ! Activez-le d'urgence."} else { Write-Host "[+] Audit UAL activé au niveau du tenant." -ForegroundColor Green}
# 2. Contrôler les politiques de rétention personnalisées$policies = Get-UnifiedAuditLogRetentionPolicyif ($policies) { Write-Host "[+] $($policies.Count) politiques de rétention d'audit détectées :" -ForegroundColor Yellow $policies | Select-Object Name, Priority, RetentionDuration, RecordTypes, UserIds | Format-Table} else { Write-Warning "[-] Aucune politique de rétention configurée. Le tenant dépend des durées par défaut des licences."}
# 3. Sonde de l'événement le plus ancien dans le UALWrite-Host "[*] Recherche de la profondeur historique effective..." -ForegroundColor Cyan$testDates = @(180, 150, 120, 90, 60, 30)foreach ($days in $testDates) { $probeDate = (Get-Date).AddDays(-$days) $sample = Search-UnifiedAuditLog -StartDate $probeDate -EndDate $probeDate.AddHours(2) -ResultSize 1 if ($sample) { Write-Host "[+] Événements d'audit disponibles à -$days jours ($($sample.CreationDate))." -ForegroundColor Green break } else { Write-Host "[-] Aucun log détecté à -$days jours." -ForegroundColor Gray }}6. Synthèse des horizons de rétention par source
Section intitulée « 6. Synthèse des horizons de rétention par source »| Source de Télémétrie | Rétention par Défaut | Rétention Maximale Possible | Emplacement de Stockage | Latence d’Ingestion |
|---|---|---|---|---|
| Connexions entra ID | 30 jours (P1/P2) / 7 jours (Free) | Illimitée (via Diagnostic Settings) | Entra ID / Log Analytics | 2 à 5 minutes |
| Audit entra ID | 30 jours (P1/P2) / 7 jours (Free) | Illimitée (via Diagnostic Settings) | Entra ID / Log Analytics | 2 à 5 minutes |
| Message trace (temps réel) | 10 jours | 10 jours | Centre d’administration Exchange | Immédiat (< 5 min) |
| Message trace (historique) | 90 jours | Plafond strict à 90 jours | Base de transport Exchange | 1 à 4 heures (export CSV) |
| Audit boîte mail (local) | 90 à 365 jours (Paramétrable) | Régit par AuditLogAgeLimit | Boîte \Recoverable Items\Audits | Immédiat |
| Purview UAL (standard) | 180 jours | Fixe à 180 jours | Substrat Purview | 15 min à 24 heures |
| Purview UAL (premium) | 365 jours | 10 ans (avec SKU additionnel) | Substrat Purview | 15 min à 24 heures |
7. Maillage interne & navigation
Section intitulée « 7. Maillage interne & navigation »- Fiche précédente : 17. Audit de Boîte Mail & Analyse de MailItemsAccessed
- Fiche suivante : 19. Kill Chain de Compromission de Compte M365
- Fiches complémentaires :
- 04. Préparation du tenant et intégration du CIRT
- 05. Global Reader & matrice des accès
- 07. Gel du tenant et préservation des preuves
- 08. Architecture des logs & visibilité forensique
- 09. Analyse des logs de connexion entra ID
- 13. Dissection approfondie du unified audit log (UAL)
- 14. Audit log vs unified audit log vs entra audit log
- 15. Forensique du message trace Exchange online