Aller au contenu

Matrice des accès DFIR Microsoft 365

Lors d’une investigation forensique cloud sur Microsoft 365 et Microsoft Entra ID, les analystes DFIR se heurtent fréquemment à des blocages d’autorisations : les rôles octroyés semblent élevés, mais des flux de journaux critiques demeurent inaccessibles, les requêtes API renvoient des erreurs HTTP 403 Forbidden, ou les exports de recherche échouent.

Une réponse à incident efficace exige d’établir dès les premières heures des habilitations forensiques précises, sans sur-privilège inutile mais sans angle mort. Cette fiche fournit une matrice opérationnelle complète reliant chaque source de données forensiques Microsoft 365 à son rôle minimal, son rôle recommandé, sa licence requise, sa durée de rétention native et ses vecteurs d’extraction.


L’espace forensique de Microsoft 365 est morcelé en plusieurs domaines de contrôle d’accès basé sur les rôles (RBAC) indépendants :

  1. Rôles d’annuaire entra ID : régissent le plan d’identité, la configuration du tenant, les logs d’authentification et les objets de l’annuaire (voir Fiche 02 — Microsoft Entra ID : Le plan d’identité).
  2. RBAC Microsoft purview : contrôle les investigations de conformité, la recherche dans le journal d’audit unifié (UAL) et l’export eDiscovery (voir Fiche 13 — Dissection du Unified Audit Log et Fiche 14 — Audit Log vs UAL vs Entra Audit Log).
  3. RBAC des charges de travail (Exchange, SharePoint, teams) : régit la configuration des services, l’inspection directe des boîtes aux lettres et le traçage des messages (voir Fiche 33 — Investigation Exchange Online et Fiche 34 — Investigation SharePoint Online).
  4. RBAC unifié Microsoft Defender XDR : contrôle la télémétrie brute, le traitement des alertes et le suivi des flux de messagerie (voir Fiche 15 — Message Trace Forensique).

Le rôle Global Reader (Lecteur général) ne couvre que la couche de lecture de l’annuaire et des portails ; il laisse des angles morts majeurs dans Purview, l’accès au contenu des boîtes mail et la télémétrie brute Defender (comme détaillé dans la Fiche 05 — global Reader pour le DFIR : périmètre et angles morts).


Le tableau suivant synthétise l’ensemble des exigences opérationnelles d’accès pour la réponse à incident sur Microsoft 365 :

Source de données forensiqueCharge de travail / DomaineRôle minimal (Moindre privilège)Rôle recommandé DFIRLicence requiseRétention nativeVecteurs d’extractionPourquoi Global Reader seul échoue
Logs de connexion utilisateur (Interactifs)Entra IDReports ReaderSecurity ReaderFree (7j) / P1/P2 (30j)7 à 30 joursGraph API (/auditLogs/signIns), PowerShell Microsoft.GraphGR visualise dans le portail/Graph mais ne peut corréler avec les signaux Defender XDR.
Connexions non interactives & principaux de serviceEntra IDReports ReaderSecurity ReaderEntra ID P1 / P230 joursGraph API (/auditLogs/signIns), PowerShellGR visualise, mais les connexions non interactives sont absentes sous licence Entra Free.
Logs d’audit d’annuaire (Modifications utilisateurs/groupes/apps)Entra IDReports ReaderSecurity ReaderFree (7j) / P1/P2 (30j)7 à 30 joursGraph API (/auditLogs/directoryAudits), PowerShellGR offre un accès complet en lecture aux audits d’annuaire.
Événements à risque identity protectionEntra ID ProtectionSecurity ReaderSecurity ReaderEntra ID P2 / E530 à 90 joursGraph API (/identityProtection/riskyUsers, riskDetections)Reports Reader ne voit pas les statuts de remédiation ; P2 requis.
Journal d’audit unifié (UAL) (Opérations générales)Purview CompliancePurview View-Only Audit LogsPurview Audit Reader + Security ReaderM365 Business Basic / E3 / E5180 joursSearch-UnifiedAuditLog, Graph Purview Audit APIGR NE PEUT PAS interroger l’UAL dans Purview ni exécuter Search-UnifiedAuditLog.
Événements d’audit premium (MailItemsAccessed, Send)Purview CompliancePurview View-Only Audit LogsPurview Audit ReaderPurview Audit (Premium) / E51 an (jusqu’à 10 ans avec option)Search-UnifiedAuditLog, PowerShellGR n’a aucun accès. Les comptes sans licence Audit Premium ne génèrent pas ces logs.
Suivi des messages Exchange (Trace < 10 jours)Exchange OnlineExchange View-Only RecipientsExchange View-Only ConfigurationExchange Online Plan 1/210 jours (temps réel)Get-MessageTrace, Centre d’administration Exchange (EAC)GR accède à l’EAC, mais les rapports de trace exigent des rôles Exchange spécifiques.
Suivi des messages historique (> 10 à 90 jours)Exchange OnlineExchange Data Loss PreventionExchange Compliance ManagementExchange Online Plan 1/290 joursStart-HistoricalSearch, Get-HistoricalSearchLa trace historique génère un export asynchrone CSV ; GR ne peut pas initier la tâche.
Contenu des boîtes aux lettres (Corps de mail, pièces jointes)Exchange OnlinePurview eDiscovery ManagerPurview eDiscovery Manager (ou délégation de boîte)Purview eDiscovery Standard / PremiumConservé jusqu’à purge (ou Lit Hold)Recherche de contenu Purview, Outil d’export eDiscovery, Graph Mail APIGR NE PEUT EN AUCUN CAS lire le corps des mails ni télécharger d’éléments.
Règles et statistiques de boîte aux lettresExchange OnlineExchange View-Only RecipientsExchange View-Only ConfigurationExchange Online Plan 1/2État actuelGet-InboxRule, Get-MailboxFolderStatisticsRequiert une session PowerShell Exchange Online ; GR seul n’expose pas ces cmdlets.
Audits d’accès fichiers SharePoint / OneDriveSharePoint / PurviewPurview Audit ReaderPurview Audit Reader + SharePoint AdminSharePoint Online Plan 1/2180 jours (UAL)Search-UnifiedAuditLog, Graph Drive APIGR ne peut pas requêter les événements de téléchargement de fichiers dans l’UAL sans Purview.
Contenu des fichiers SharePoint / OneDriveSharePoint OnlineAdministrateur de collection de siteseDiscovery Manager ou Admin de siteSharePoint Online Plan 1/2Dépendant du cycle de vieSharePoint REST API, Export de contenu eDiscoveryGR ne PEUT pas télécharger de fichiers privés depuis un OneDrive personnel.
Conversations privées teams & transcriptionsMicrosoft Teams / PurviewPurview eDiscovery ManagerPurview eDiscovery ManagerTeams Essentials / E3 / E5Conservé jusqu’à purgeRecherche de contenu Purview, Graph Protected APIs (/chats/getAllMessages)GR ne PEUT pas lire les messages privés teams ni les enregistrements.
Advanced hunting Defender XDR (Télémétrie brute 30j)Microsoft Defender XDRDefender Security ReaderDefender Security ReaderDefender for Endpoint / Office / Identity / E530 joursPortail Defender, API Advanced Hunting (/api/advancedhunting/run)GR seul n’a pas accès à l’API d’advanced hunting si le RBAC unifié Defender est appliqué.
Consentements OAuth & secrets de principaux de serviceEntra IDSecurity ReaderSecurity ReaderEntra ID Free / P1 / P2État actuelGraph API (/oauth2PermissionGrants, /servicePrincipals)GR peut lire les consentements, mais pas auditer finement les informations d’identification via Graph.

Une erreur fréquente lors des premières heures d’un incident survient lorsque les administrateurs du client octroient uniquement le rôle Global Reader aux intervenants. Les analystes découvrent alors des impasses opérationnelles immédiates :

Le journal d’audit unifié (UAL) dépend du RBAC Purview, et non du RBAC Entra ID. Lorsqu’un Global Reader ouvre compliance.microsoft.com ou se connecte via PowerShell :

Fenêtre de terminal
# Tentative d'interrogation de l'UAL avec le rôle Global Reader :
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-3) -EndDate (Get-Date)

Résultat :

Write-ErrorMessage : The term 'Search-UnifiedAuditLog' is not recognized as the name of a cmdlet,
function, script file, or operable program.

Sans le rôle Audit Reader ou View-Only Audit Logs attribué dans le portail de conformité Purview, l’espace d’exécution PowerShell Exchange/Compliance ne charge pas la commande.

2. L’impossibilité d’inspecter les contenus (eDiscovery)

Section intitulée « 2. L’impossibilité d’inspecter les contenus (eDiscovery) »

Global Reader exclut formellement l’inspection des données utiles :

  • Impossible d’ouvrir ou de télécharger un e-mail de phishing signalé dans la boîte d’une victime.
  • Impossible de récupérer une pièce jointe déposée sur un site OneDrive personnel compromis.
  • Impossible d’extraire les échanges de chat privés Teams entre l’attaquant et des collaborateurs internes. L’acquisition de la preuve matérielle exige le rôle eDiscovery Manager dans Purview ou des autorisations applicatives explicites (Mail.Read, Files.Read.All) assorties de restrictions strictes.

L’exécution de requêtes KQL sur les tables de télémétrie brute de 30 jours de Microsoft Defender XDR (CloudAppEvents, IdentityLogonEvents, EmailEvents) requiert :

  • Le rôle Security Reader dans Entra ID ou le rôle Security Operations (Read) dans le RBAC unifié Defender.
  • Global Reader permet de voir les fiches d’alerte, mais bloque les requêtes complexes de corrélation KQL si le portail a basculé sous la gouvernance Defender RBAC.

Pour respecter le principe du moindre privilège tout en garantissant une visibilité forensique complète, trois profils types doivent être sollicités :

graph TD
subgraph "Profils d'accès opérationnels"
A[Profil 1 : Triage et Audit en lecture seule] -->|Rôles| A1[Entra : Security Reader<br/>Purview : Audit Reader<br/>Exchange : View-Only Configuration]
A -->|Capacités| A2[Sign-ins, UAL, PIM, Suivi messages, Alertes Defender]
B[Profil 2 : Acquisition et extraction de contenu] -->|Rôles| B1[Profil 1 +<br/>Purview : eDiscovery Manager<br/>Graph App : Mail.Read, Files.Read.All]
B -->|Capacités| B2[Corps de mails, Fichiers OneDrive, Chats Teams, Préservation]
C[Profil 3 : Confinement actif et remédiation] -->|Rôles| C1[Entra : User Administrator ou PIM temporaire<br/>Purview : Compliance Administrator]
C -->|Capacités| C2[Révocation de sessions, Blocage d'apps, Pose de Lit Hold]
end

Profil 1 : triage non destructif et audit forensique (lecture seule)

Section intitulée « Profil 1 : triage non destructif et audit forensique (lecture seule) »
  • Rôle entra ID : Security Reader (inclut Reports Reader, donne accès aux logs de connexion, à Identity Protection et aux logs d’annuaire).
  • Rôle purview : Audit Reader (permet de rechercher et d’exporter l’UAL).
  • Rôle Exchange online : View-Only Configuration + View-Only Recipients (autorise Get-InboxRule, les traces de messages et la configuration de transport).
  • Rôle Defender XDR : Security Reader (autorise les requêtes KQL d’Advanced Hunting).

Profil 2 : acquisition des preuves et extraction de contenu

Section intitulée « Profil 2 : acquisition des preuves et extraction de contenu »

Comprend l’intégralité du Profil 1, plus :

  • Rôle purview : eDiscovery Manager (attribué dans le portail de conformité). Permet la recherche et l’exportation des corps de mail, des fichiers SharePoint/OneDrive et des conversations Teams.
  • Principal de service (extraction automatisée) : application Entra avec authentification par certificat, disposant des consentements applicatifs :
    • AuditLog.Read.All
    • Directory.Read.All
    • SecurityIncident.Read.All
    • SecurityEvents.Read.All
    • (Facultatif pour acquisition ciblée) : Mail.Read, Files.Read.All (restreint par ApplicationAccessPolicy).

Profil 3 : confinement et remédiation Active (écriture)

Section intitulée « Profil 3 : confinement et remédiation Active (écriture) »

Nécessite des privilèges d’écriture. Doit systématiquement être activé via Privileged Identity Management (PIM) avec justification d’incident et validation :

  • Rôle entra ID : User Administrator (révocation des jetons, réinitialisation de mots de passe, désactivation de comptes).
  • Rôle Exchange online : Organization Management (suppression de règles de transfert malveillantes ou de règles de transport).
  • Rôle purview : Compliance Administrator (pose immédiate de Litigation Hold pour préserver les boîtes compromises).

Méthodologie d’investigation : valider ses habilitations

Section intitulée « Méthodologie d’investigation : valider ses habilitations »

Avant d’initier la collecte des preuves, validez systématiquement l’étendue de vos habilitations PowerShell pour éviter les interruptions d’extraction en cours de triage.

Fenêtre de terminal
# ==============================================================================
# Hermes Codex - Script de validation des accès DFIR Microsoft 365
# ==============================================================================
Write-Host "[*] Vérification des habilitations forensiques Microsoft 365..." -ForegroundColor Cyan
# 1. Vérifier l'accès Graph et Entra ID
Import-Module Microsoft.Graph.Authentication, Microsoft.Graph.Reports -ErrorAction Stop
$graphContext = Get-MgContext
if ($null -eq $graphContext) {
Write-Warning "[-] Non connecté à Microsoft Graph. Exécutez Connect-MgGraph d'abord."
} else {
Write-Host "[+] Graph connecté : $($graphContext.Account) (Tenant : $($graphContext.TenantId))" -ForegroundColor Green
try {
$testSignIn = Get-MgAuditLogSignIn -Top 1 -ErrorAction Stop
Write-Host "[+] Accès aux Sign-in Logs Entra ID : SUCCÈS" -ForegroundColor Green
} catch {
Write-Error "[-] Accès aux Sign-in Logs Entra ID : ÉCHEC ($($_.Exception.Message))"
}
}
# 2. Vérifier l'accès Exchange Online et Message Trace
Import-Module ExchangeOnlineManagement -ErrorAction Stop
try {
$session = Get-ConnectionInformation | Where-Object { $_.ConnectionStatus -eq "Connected" }
if ($session) {
Write-Host "[+] Session Exchange Online connectée." -ForegroundColor Green
$testTrace = Get-MessageTrace -StartDate (Get-Date).AddDays(-1) -EndDate (Get-Date) -PageSize 1 -ErrorAction Stop
Write-Host "[+] Accès au suivi des messages Exchange : SUCCÈS" -ForegroundColor Green
} else {
Write-Warning "[-] Session Exchange Online non connectée. Exécutez Connect-ExchangeOnline."
}
} catch {
Write-Error "[-] Accès au suivi des messages Exchange : ÉCHEC ($($_.Exception.Message))"
}
# 3. Vérifier l'accès au journal d'audit unifié Purview
try {
$testUAL = Search-UnifiedAuditLog -StartDate (Get-Date).AddHours(-2) -EndDate (Get-Date) -ResultSize 1 -ErrorAction Stop
Write-Host "[+] Accès au journal d'audit unifié Purview : SUCCÈS" -ForegroundColor Green
} catch {
Write-Error "[-] Accès UAL Purview : ÉCHEC ($($_.Exception.Message))"
Write-Warning " -> Rôle Purview 'Audit Reader' ou 'View-Only Audit Logs' manquant !"
}

Doctrine transversale : possible vs configuré vs autorisé vs accessible vs utilisé vs observé vs prouvé

Section intitulée « Doctrine transversale : possible vs configuré vs autorisé vs accessible vs utilisé vs observé vs prouvé »

Dans tout rapport d’investigation, l’analyste doit respecter scrupuleusement la graduation de certitude technique :

+-------------------------------------------------------------------------------+
| LES 7 NIVEAUX DE CERTITUDE FORENSIQUE |
| |
| 1. Possible -> L'architecture de la charge de travail permet l'action. |
| 2. Configuré -> L'audit était activé et les politiques étaient en place. |
| 3. Autorisé -> Le compte disposait des rôles RBAC nécessaires. |
| 4. Accessible -> L'accès conditionnel et le réseau autorisaient l'accès. |
| 5. Utilisé -> Le compte a déclenché une action sur la ressource. |
| 6. Observé -> L'événement est consigné dans les logs (UAL, Sign-ins). |
| 7. Prouvé -> Certitude forensique immuable, corrélée et vérifiée. |
+-------------------------------------------------------------------------------+
  1. Autorisé != utilisé : un attaquant ayant compromis un compte doté du rôle Exchange Administrator était autorisé à exporter une boîte aux lettres ou à modifier les règles de transport du domaine. Cependant, cela ne prouve pas qu’il l’a fait tant qu’aucun événement New-TransportRule ou export n’a été observé dans l’UAL.
  2. Configuré != observé : l’audit de boîte aux lettres peut être activé pour le tenant, mais si l’utilisateur ciblé ne possède pas la licence Purview Audit (Premium), les actions critiques MailItemsAccessed ne seront pas observées. L’analyste ne doit jamais conclure « aucun e-mail n’a été consulté », mais « l’événement n’est pas observable en raison des limitations de licence ».
  3. Observé != prouvé : un événement de connexion ResultType = 0 (Succès) observé dans les logs d’Entra ID indique une authentification réussie. Pour prouver une session humaine malveillante interactive, l’analyste doit corréler cette connexion avec des événements applicatifs ultérieurs (UAL) partageant la même adresse IP source, le même User-Agent et le même identifiant de session.

PiègeCause techniqueConséquence pour l’enquêteAction corrective
Demander global admin par défautL’attribution de privilèges excessifs enfreint la politique client et déclenche des comités de validation lourds.Retarde le début de l’investigation de plusieurs jours précieux.Solliciter immédiatement le Profil 1 (security Reader + purview audit Reader).
Disparition silencieuse des cmdletsSe connecter à Exchange Online PowerShell avec uniquement des rôles Entra masque les cmdlets Purview.Search-UnifiedAuditLog renvoie une erreur de commande inconnue.Attribuer formellement Audit Reader dans le portail de conformité (compliance.microsoft.com).
Supposer 30 jours de rétention sur entra freeLes tenants Entra ID Free n’enregistrent les connexions et audits que pendant 7 jours.Les logs d’une attaque survenue à J-10 sont définitivement écrasés.Vérifier immédiatement la licence via Get-MgSubscribedSku (voir Fiche 04).
Confondre message trace et contenu de mailLe suivi des messages ne consigne que les métadonnées de transport (expéditeur, destinataire, objet, statut).L’analyste ne peut pas analyser la charge utile malveillante ni les liens à partir de la trace.Utiliser la recherche de contenu Purview ou l’Explorateur Defender for Office 365.
Épuisement des quotas lors de l’exportL’interrogation massive de Graph sans gestion du code HTTP 429 Too Many Requests fait planter les scripts.Perte de données et chronologie tronquée.Implémenter un mécanisme de backoff exponentiel et surveiller l’en-tête Retry-After.

  • Scission stricte des rôles purview et entra ID : Microsoft a finalisé la séparation entre les rôles d’annuaire et les autorisations de conformité. Les rôles d’annuaire n’héritent plus automatiquement des droits d’investigation Purview.
  • Rétention standard UAL portée à 180 jours : la rétention par défaut des événements du journal d’audit unifié est de 180 jours pour l’ensemble des licences d’entreprise (au lieu des 90 jours historiques).
  • Généralisation du RBAC unifié Defender XDR : Defender applique désormais son propre modèle RBAC granulaire. Les intervenants requièrent des permissions explicites pour interroger les tables KQL d’Advanced Hunting.
  • Modules AzureAD et MSOnline : définitivement retirés. Tous les scripts de validation de rôles doivent impérativement s’appuyer sur Microsoft.Graph.Identity.Governance et Microsoft.Graph.Authentication.
  • Authentification de base : totalement désactivée sur tous les services M365. L’authentification moderne (MFA ou certificat applicatif) est obligatoire.
  • Latence d’ingestion UAL : le délai d’apparition des événements dans l’UAL varie de 15 minutes à 24 heures selon la charge du service.
  • Absence de rétroactivité de la télémétrie premium : l’attribution d’une licence E5 ou Purview Audit Premium en cours d’incident ne régénère pas les événements MailItemsAccessed antérieurs.

  1. Global Reader est insuffisant : il ne permet ni d’interroger le journal d’audit unifié Purview, ni d’inspecter les corps de messages, ni d’exécuter des requêtes brutes KQL sur Defender XDR.
  2. Adopter le profil 1 pour le triage initial : combiner Security Reader (Entra ID) + Audit Reader (Purview) + View-Only Configuration (Exchange Online) pour une visibilité forensique maximale sans privilège de modification.
  3. Valider les licences avant d’établir un diagnostic : distinguer immédiatement Entra Free (7 jours) d’Entra P1/P2 (30 jours), et Purview Audit Standard (180 jours) d’Audit Premium (1 an + MailItemsAccessed).
  4. Distinguer métadonnées et données utiles : message Trace fournit l’historique d’acheminement ; l’extraction du mail malveillant exige le rôle eDiscovery Manager.
  5. Appliquer la doctrine de certitude : ne jamais assimiler ce qu’un compte était autorisé à faire à ce que la preuve démontre qu’il a exécuté.