Playbook d'investigation Exchange online
1. Architecture forensique d’Exchange online
Section intitulée « 1. Architecture forensique d’Exchange online »Lorsqu’il analyse une boîte aux lettres Exchange Online compromise, l’enquêteur doit comprendre comment les messages sont créés, consultés, altérés et purgés au sein du pilote de stockage Exchange (Store Driver).
graph TD subgraph ClientAccess ["Couche d'accès client"] MAPI["Outlook Desktop (MAPI-HTTP)"] OWA["Outlook sur le web (REST/HTTP)"] Mobile["Outlook Mobile / ActiveSync"] API["EWS / API Microsoft Graph"] end
subgraph MailboxStore ["Architecture de stockage de la boîte aux lettres"] ActiveFolder["Sous-arbre IPM visible<br/>(Boîte de réception, Éléments envoyés, Dossiers)"] RecoverableItems["Partition Recoverable Items (Non-IPM)<br/>(Deletions, Purges, DiscoveryHolds, Versions)"] SubstrateFolder["Dossiers cachés Substrate<br/>(TeamsChat, Historique des conversations)"] end
subgraph AuditPipeline ["Télémétrie & Audit Purview"] MIA["MailItemsAccessed (Sync & Bind)"] MessageOps["Send, SendAs, Move, SoftDelete, HardDelete"] MsgTrace["Exchange Message Trace (Journaux MTA)"] end
ClientAccess --> ActiveFolder ActiveFolder -->|Suppression| RecoverableItems ClientAccess --> AuditPipelineOpérations d’audit critiques sur les boîtes aux lettres
Section intitulée « Opérations d’audit critiques sur les boîtes aux lettres »| Opération | Action déclenchante | Champs clés du journal | Portée forensique |
|---|---|---|---|
MailItemsAccessed | Lecture via OWA/Mobile ou synchronisation MAPI/EWS | OperationProperties (IsThrottled), ItemCount, InternetMessageId | Distingue la lecture unitaire du siphonage massif de la boîte |
Send / SendAs | Message envoyé par le propriétaire ou un délégué | Item, SendAsUser, Recipients, Subject | Identifie les courriels d’escroquerie ou de phishing émis |
MoveToDeletedItems | Message déplacé vers les éléments supprimés | FolderPathName, AffectedItems | Dissimulation d’alertes de sécurité ou de notifications bancaires |
SoftDelete | Suppression depuis les éléments supprimés (Deletions) | AffectedItems, ItemCount | Palier 1 de suppression ; élément toujours récupérable |
HardDelete | Purge définitive (Shift+Suppr ou purge de Deletions) | AffectedItems, ItemCount | Palier 2 de suppression ; conservé sous Purges ou DiscoveryHolds si LitHold actif |
SearchQueryPerformed | Recherche textuelle dans la boîte aux lettres | QueryText, SearchApplication | Révèle les cibles d’intérêt et priorités de l’attaquant |
2. Décryptage de MailItemsAccessed : sync versus bind
Section intitulée « 2. Décryptage de MailItemsAccessed : sync versus bind »Comme détaillé dans la Fiche 17 : audit de boîte aux lettres & MailItemsAccessed, l’événement MailItemsAccessed se décline en deux modes fondamentaux d’interaction :
flowchart TD MIA[Événement MailItemsAccessed] --> Type{Type d'opération} Type -->|Bind| BindProc[Lecture unitaire via OWA / Mobile] Type -->|Sync| SyncProc[Synchronisation en masse via MAPI / EWS / ActiveSync]
BindProc --> BindAudit[Le journal enregistre l'InternetMessageId et le Subject exacts] SyncProc --> CheckThrottle{IsThrottled == True ?}
CheckThrottle -->|Non| SyncList[Liste complète des InternetMessageIds dans le bloc Folders] CheckThrottle -->|Oui| ThrottleWarning[Throttling actif ! Le dossier entier doit être présumé compromis]1. Opérations de type bind (OperationType = Bind)
Section intitulée « 1. Opérations de type bind (OperationType = Bind) »- Déclenché lorsqu’un attaquant ouvre un courriel individuel dans Outlook Web (OWA) ou le prévisualise dans un client.
- L’enregistrement UAL contient l’
InternetMessageId, l’objet (Subject) et le dossier de stockage du message consulté. - Valeur probante : précision maximale ; prouve sans ambiguïté quel message exact a été lu.
2. Opérations de type sync (OperationType = Sync)
Section intitulée « 2. Opérations de type sync (OperationType = Sync) »- Déclenché lorsqu’un client de messagerie (Outlook Desktop, application mobile ou script automatisé via EWS/Graph) synchronise le contenu d’un dossier.
- Le seuil de limitation (throttling) : si une opération de synchronisation accède à plus de 1 000 éléments dans un même dossier en moins de 24 heures, Exchange Online active le throttling pour limiter le volume des journaux et positionne :
"IsThrottled": "True"
- La présomption juridique : en présence de
IsThrottled: True, l’enquêteur ne peut pas isoler la liste des messages lus. D’un point de vue médico-légal et réglementaire, l’intégralité des courriels du dossier doit être présumée compromise.
3. La partition recoverable items et le triage anti-forensique
Section intitulée « 3. La partition recoverable items et le triage anti-forensique »Lors d’une intrusion dans une boîte aux lettres, le premier réflexe de l’attaquant est d’effacer les traces de son passage :
- Suppression des confirmations de modifications de coordonnées bancaires.
- Suppression des notifications d’échec de remise (NDR) résultant de campagnes de spam.
- Suppression des alertes d’avertissement émises par Microsoft Identity Protection.
Architecture du sous-arbre des éléments récupérables
Section intitulée « Architecture du sous-arbre des éléments récupérables »Cette partition non-IPM est invisible dans les vues standards Outlook/OWA :
Deletions: éléments vidés du dossier “Éléments supprimés”. Conservés pendant 14 ou 30 jours selon le paramètreRetainDeletedItemsFor.Purges: éléments purgés deDeletionsou supprimés directement viaMaj+Suppr. Nettoyés périodiquement par le Managed Folder Assistant sauf si un Litigation Hold est activé.DiscoveryHolds: si une suspension pour litige (Litigation Hold), un eDiscovery Hold ou une politique de rétention Purview est active, les éléments purgés y sont automatiquement déplacés et deviennent inaltérables.Versions: conserve l’historique des modifications apportées aux événements de calendrier et aux contacts.
# Vérification du statut de rétention et de suspension légaleGet-Mailbox "victim@contoso.com" | Select-Object DisplayName, RetainDeletedItemsFor, LitigationHoldEnabled, SingleItemRecoveryEnabled
# Inspection du volume des dossiers de récupération cachésGet-MailboxFolderStatistics "victim@contoso.com" -FolderScope RecoverableItems | Select-Object Name, ItemsInFolder, FolderSize4. Corrélation triangulaire avec le message trace
Section intitulée « 4. Corrélation triangulaire avec le message trace »Comme explicité dans la Fiche 15 : forensique du message trace Exchange online, la réconciliation entre l’état de la boîte aux lettres et les journaux des agents de transport (MTA) apporte la preuve matérielle de l’émission et de la livraison de courriels.
sequenceDiagram autonumber actor Attacker as Attaquant (Session compromise) participant EXO as Boîte Exchange (Store) participant MTA as Service de transport Exchange (MTA) participant ExtTarget as Cible externe (Client fraudé) participant UAL as Journal d'audit unifié Purview
Attacker->>EXO: Émission d'un courriel avec fausse facture EXO->>UAL: Journalisation de l'événement 'Send' avec ClientIP EXO->>MTA: Soumission du message au pipeline de transport MTA->>MTA: Évaluation des règles de transport et de l'anti-spam sortant MTA->>ExtTarget: Acheminement du message sur Internet via SMTP/TLS MTA->>UAL: Le Message Trace consigne l'événement 'DELIVER' Attacker->>EXO: Déplacement du message vers Éléments supprimés & HardDelete Note over EXO: Message effacé de la boîte visible, préservé sous Purges/Holds Note over UAL: La trace MTA prouve irréfutablement l'émission du courriel !5. Ingénierie de détection : requêtes de chasse KQL
Section intitulée « 5. Ingénierie de détection : requêtes de chasse KQL »// Détection des synchronisations massives avec dépassement de seuil d'auditCloudAppEvents| where TimeGenerated >= ago(14d)| where ActionType == "MailItemsAccessed"| extend OpProps = RawEventData.OperationProperties| extend IsThrottled = tostring(OpProps.IsThrottled)| extend Folders = RawEventData.Folders| where IsThrottled =~ "True"| project TimeGenerated, AccountDisplayName, IPAddress, IsThrottled, Folders, RawEventData| sort by TimeGenerated desc// Détection de suppressions massives de courriels post-compromissionCloudAppEvents| where TimeGenerated >= ago(7d)| where ActionType in ("MoveToDeletedItems", "SoftDelete", "HardDelete")| summarize DeletedCount = count(), AffectedFolders = make_set(tostring(RawEventData.FolderPathName)), Clients = make_set(tostring(RawEventData.ClientInfoString)) by AccountDisplayName, IPAddress, bin(TimeGenerated, 15m)| where DeletedCount > 20| sort by DeletedCount desc<#.SYNOPSIS Recherche les messages purgés dans la partition de récupération durant l'incident.#>Connect-IPPSSession
$SearchName = "IR_MessagesPurges_$(Get-Date -Format 'yyyyMMdd')"$Query = "(Received >= '2026-09-01' AND Received <= '2026-09-17') AND (subject:'facture' OR subject:'virement' OR subject:'paiement')"
New-ComplianceSearch -Name $SearchName -ExchangeLocation "victim@contoso.com" -ContentMatchQuery $QueryStart-ComplianceSearch -Name $SearchName
# Suivi de la rechercheGet-ComplianceSearch -Name $SearchName6. Playbook d’investigation : triage pas-à-pas
Section intitulée « 6. Playbook d’investigation : triage pas-à-pas »-
Préservation immédiate de l’état de la boîte aux lettres : Placer immédiatement la boîte en Litigation Hold pour geler les purges automatiques :
Fenêtre de terminal Set-Mailbox "victim@contoso.com" -LitigationHoldEnabled $true -RetentionComment "Gel d'urgence IR" -
Audit des règles de boîte et de flux de messagerie : Extraire toutes les règles de transfert et de dissimulation :
Fenêtre de terminal Get-InboxRule -Mailbox "victim@contoso.com" | Select-Object Name, Description, ForwardTo, MoveToFolder(Consulter la Fiche 27 : règles de boîte de réception comme persistance et la Fiche 28 : redirection et persistance du flux de messagerie).
-
Audit des accès non-propriétaires : Rechercher les opérations déléguées ou administratives (
Delegate,Admin,External) :Fenêtre de terminal Search-UnifiedAuditLog -Operations "MailItemsAccessed", "SendAs", "SendOnBehalf" -FreeText "victim@contoso.com" -StartDate (Get-Date).AddDays(-14) -EndDate (Get-Date) -
Reconstitution de l’historique d’émission sortante : Interroger le Message Trace pour isoler tous les courriels émis durant les sessions suspectes :
Fenêtre de terminal Get-MessageTrace -SenderAddress "victim@contoso.com" -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date)