Aller au contenu

Audit log vs unified audit log vs entra audit log

L’une des sources de confusion les plus récurrentes en réponse à incident sur Microsoft 365 réside dans la coexistence de multiples « journaux d’audit » : le Journal d’Audit Microsoft Entra ID (Entra Audit Log), le Unified Audit Log (UAL) de Microsoft Purview, et les Journaux d’Audit Spécifiques aux Composants (tels que l’Exchange Admin Audit Log historique ou l’audit de site SharePoint).

Lorsqu’un attaquant élève ses privilèges, ajoute un secret à une application ou altère des délégations de boîte aux lettres, des traces sont générées simultanément dans plusieurs plates-formes. Toutefois, ces enregistrements n’arrivent pas au même moment, ne sont pas conservés pendant la même durée, et leurs schémas de données internes ne sont pas identiques. Sélectionner la mauvaise source de données en pleine gestion de crise entraîne inévitablement des faux négatifs, des retards critiques ou la perte définitive de preuves par expiration de rétention.


Pour identifier où résident les preuves avec exactitude, l’investigateur doit remonter à la source d’enregistrement de chaque journal :

graph TD
subgraph "Plan de Contrôle d'Identité"
ENTRA_CORE[Moteur d'Annuaire Microsoft Entra ID]
ENTRA_LOG[Journal d'Audit Entra<br/>Modifications d'Annuaire]
ENTRA_STORE[(Stockage Entra Natif<br/>7 à 30 Jours)]
end
subgraph "Plan d'Exécution & Stockage des Données"
EXO_CORE[Exchange Online Transport & Boîtes]
SPO_CORE[SharePoint / OneDrive Subsystems]
EXO_LEGACY[Exchange Admin Audit Log Local]
end
subgraph "Plan de Conformité & Agrégation"
INGEST[Bus d'Ingestion Purview]
UAL_STORE[(Unified Audit Log Store<br/>180 Jours à 1 An+)]
end
ENTRA_CORE -->|Temps réel : 2-5 min| ENTRA_LOG
ENTRA_LOG --> ENTRA_STORE
ENTRA_CORE -->|Réplication : 15-60 min| INGEST
EXO_CORE -->|Publication : 15-45 min| INGEST
SPO_CORE -->|Publication : 15-30 min| INGEST
EXO_CORE -->|Log local : Immédiat| EXO_LEGACY
INGEST --> UAL_STORE

Matrice comparative des trois systèmes de journalisation

Section intitulée « Matrice comparative des trois systèmes de journalisation »
ParamètreJournal d’Audit Entra IDUnified Audit Log Purview (UAL)Journaux Locaux des Composants
Périmètre d’autoritéPlan d’identité : Utilisateurs, Groupes, Apps d’entreprise, Rôles, PIM.Activité transverse : Exchange, SharePoint, Teams, Entra ID, Power Platform.Frontière du composant : Audit admin/boîte Exchange, audit de site SharePoint.
Latence d’ingestion2 à 5 minutes (Quasi temps réel).15 minutes à 24 heures (Agrégation asynchrone par lots).Immédiate (magasin transactionnel local).
Rétention par défautGratuit : 7 jours
P1 / P2 : 30 jours
Standard : 180 jours
Premium / E5 : 1 an (extensible à 10 ans)
Spécifique au composant (Exchange : 90 jours).
API d’extraction principaleMicrosoft Graph API :
/v1.0/auditLogs/directoryAudits
Office 365 Management Activity API / Graph Audit APIPowerShell Exchange Online :
Search-AdminAuditLog
Cmdlet PowerShellGet-MgAuditLogDirectoryAuditSearch-UnifiedAuditLogSearch-AdminAuditLog / Get-MailboxAuditLog
Licence requiseEntra ID Free, P1, P2Purview Audit (Standard / Premium)Incluse dans la licence du composant

2. Le phénomène de duplication et la traçabilité croisée

Section intitulée « 2. Le phénomène de duplication et la traçabilité croisée »

Lorsqu’un événement administratif survient dans Entra ID — par exemple, un attaquant attribuant le rôle Exchange Administrator à un compte pirate —, cette action unique est consignée dans plusieurs systèmes avec des structures hétérogènes :

sequenceDiagram
autonumber
actor Attaquant as Compte Administrateur Compromis
participant Entra as Moteur d'Annuaire Entra ID
participant EntraLog as Journal d'Audit Entra (/auditLogs)
participant UAL as UAL Purview (RecordType 15)
participant Defender as Defender XDR (CloudAppEvents)
Attaquant->>Entra: Attribue "Exchange Administrator" au compte pirate
Entra->>EntraLog: Écrit l'événement directoryAudit (Latence : ~2 min)
Note over EntraLog: Disponible sur le portail Entra & Graph API
Entra->>UAL: Publie sur le bus d'ingestion Purview (Latence : ~30 min)
Note over UAL: Indexé sous le RecordType 15 dans l'UAL
Entra->>Defender: Diffuse vers Advanced Hunting (Latence : ~10 min)
Note over Defender: Requêtable dans CloudAppEvents (ActionType: Add member to role.)

Bien que les deux journaux décrivent rigoureusement la même opération, leur sérialisation JSON présente des différences notables :

{
"id": "Directory_a4f89d32-28e1-4c12-b891-883109aef102",
"category": "RoleManagement",
"correlationId": "5e12a843-ef45-42a1-9a14-8712a45930b1",
"result": "success",
"resultReason": "",
"activityDisplayName": "Add member to role",
"activityDateTime": "2026-09-15T10:14:22.124Z",
"loggedByService": "Core Directory",
"operationType": "Add",
"initiatedBy": {
"user": {
"id": "3d12f890-341a-4f89-91a1-987120adfe01",
"displayName": "Global Admin Compromis",
"userPrincipalName": "admin@defense-corp.org",
"ipAddress": "198.51.100.45"
}
},
"targetResources": [
{
"id": "29283109-1004-4b51-9e7f-cisco-seg-sqli",
"displayName": "Exchange Administrator",
"type": "Role",
"modifiedProperties": [
{
"displayName": "Role.DisplayName",
"oldValue": null,
"newValue": ""Exchange Administrator""
}
]
},
{
"id": "4e9c7a21-82b4-4b51-9e7f-cisco-seg-sqli",
"displayName": "Compte_Pirate",
"type": "User",
"userPrincipalName": "pirate_user#EXT#@defense-corp.onmicrosoft.com"
}
]
}

3. Périmètres exclusifs : que trouve-t-on uniquement dans chaque journal ?

Section intitulée « 3. Périmètres exclusifs : que trouve-t-on uniquement dans chaque journal ? »

Identifier les zones de visibilité exclusive évite aux équipes d’intervention de chercher des preuves dans le mauvais référentiel :

+---------------------------------------------------------------------------------------+
| MICROSOFT PURVIEW UAL |
| |
| +------------------------------------+ +--------------------------------------+ |
| | EXCHANGE ONLINE | | SHAREPOINT / ONEDRIVE | |
| | - MailItemsAccessed (Bind/Sync) | | - FileDownloaded / FileAccessed | |
| | - New-InboxRule / Set-InboxRule | | - Partages & Invitations Anonymes | |
| | - SendAs / SendOnBehalf | | - Ajout d'Admins de Collection | |
| | - SoftDelete / HardDelete | | - Synchronisations OneDrive | |
| +------------------------------------+ +--------------------------------------+ |
| |
| +------------------------------------+ +--------------------------------------+ |
| | MICROSOFT TEAMS | | RÉPLICATION ENTRA (15) | |
| | - Ajout de canaux / Création Team | | - Attribution de rôles | |
| | - Ajout d'invités externes | | - Consentements applicatifs | |
| | - Déploiement de Bots / Apps | | - Secrets / Certificats Service Pr. | |
| +------------------------------------+ +--------------------------------------+ |
+---------------------------------------------------|-----------------------------------+
|
Pipeline Réplication | (Latence 15 min - 60 min)
v
+---------------------------------------------------------------------------------------+
| JOURNAL D'AUDIT ENTRA ID |
| |
| - Télémétrie d'annuaire quasi temps réel (~2 min de latence) |
| - Métadonnées riches TargetResources (GUIDs d'objets, extensions de schéma) |
| - Activations PIM (Privileged Identity Management) & chaînes de justification |
| - Création, modification et suppression des politiques d'Accès Conditionnel |
| - Réinitialisations de mot de passe & opérations de cycle de vie |
+---------------------------------------------------------------------------------------+
  1. Actions sur les courriels & boîtes aux lettres : présentes UNIQUEMENT dans l’UAL (RecordType 2). Entra ID n’a aucune visibilité sur la lecture des courriels ou les règles de transfert.
  2. Téléchargements de fichiers & partages documentaires : présents UNIQUEMENT dans l’UAL (RecordType 6). Entra ID ne voit que l’authentification initiale à SharePoint, jamais les actions sur les fichiers.
  3. Justifications PIM : visibles avec la plus grande fidélité dans les Journaux d’Audit Entra. L’UAL enregistre l’attribution finale du rôle, mais les métadonnées de requête PIM y sont souvent abrégées.
  4. Investigations historiques (> 30 jours) : pour les actions d’identité datant de plus d’un mois, les analystes doivent impérativement interroger l’UAL. Le journal Entra ID purge nativement les événements au 30e jour (même avec des licences P2).

4. Matrice de décision opérationnelle pour le triage

Section intitulée « 4. Matrice de décision opérationnelle pour le triage »

En cours d’incident, appliquez cet arbitrage pour orienter vos requêtes :

Phase de réponseSource prioritaireSource secondaireJustification opérationnelle
Phase 1 : triage immédiat (0 à 4 h)
Identification des élévations et modifications de comptes
Journal d’audit entra ID (Graph API)Defender XDR (CloudAppEvents)Latence ultra-courte (< 5 min) permettant de suivre l’attaquant en direct.
Phase 2 : évaluation de l’impact données
Détermination des mails lus et fichiers exfiltrés
Unified audit log purviewDiagnostic de messagerie (Message Trace)Seul l’UAL indexe MailItemsAccessed et FileDownloaded.
Phase 3 : détection de la persistance
Apps OAuth furtives, règles de boîte, domaines fédérés
Audit entra et UALScripts d’audit PowerShellLes apps OAuth sont dans les deux ; les règles de boîte sont strictement dans l’UAL.
Phase 4 : investigation historique (> 30 j)
Remontée à l’intrusion initiale plusieurs mois plus tôt
Unified audit log purviewStockage froid SIEM / Log AnalyticsLe journal Entra ID natif est purgé après 30 jours.

Fenêtre de terminal
# Connexion à Microsoft Graph avec autorisations d'audit
Connect-MgGraph -Scopes "AuditLog.Read.All", "Directory.Read.All"
# Extraction des modifications de rôles sur les dernières 24h (Ultra-rapide)
$startTime = (Get-Date).AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ssZ")
$entraEvents = Get-MgAuditLogDirectoryAudit -Filter "activityDateTime ge $startTime and category eq 'RoleManagement'" -All
# Mise en forme structurée
$entraEvents | Select-Object ActivityDateTime, ActivityDisplayName, Result, `
@{N="Initiateur"; E={$_.InitiatedBy.User.UserPrincipalName}}, `
@{N="IP_Client"; E={$_.InitiatedBy.User.IpAddress}}, `
@{N="Cible"; E={($_.TargetResources | Select-Object -First 1).DisplayName}} | `
Format-Table -AutoSize