Aller au contenu

Cartographie de la surface d'attaque des données M365

Un tenant Microsoft 365 moderne constitue un entrepôt de données distribué et hétérogène. Un adversaire disposant d’un ancrage (session détournée, consentement OAuth illégitime, secret de principal de service) peut naviguer entre des charges de travail applicatives distinctes, chacune disposant d’abstractions de stockage, de protocoles et d’une fidélité d’audit spécifiques.

graph TD
subgraph IdentityPlane ["Microsoft Entra ID (Plan d'identité)"]
Token[Jeton OAuth 2.0 / PRT]
AppToken[Jeton Application de Service Principal]
end
subgraph DataPlane ["Tissu de données Microsoft 365"]
EXO["Exchange Online<br/>(Boîtes utilisateurs, partagées, archives)"]
SPO["SharePoint Online<br/>(Sites d'équipe, communication, hubs)"]
ODB["OneDrive Entreprise<br/>(Dossiers personnels, points de synchro)"]
Teams["Microsoft Teams<br/>(Conversations Substrate, fichiers de canaux)"]
Fabric["Power Platform & Fabric<br/>(Jeux de données Power BI, Dataverse)"]
end
subgraph SearchDiscovery ["Moteurs de découverte globale"]
MSearch["Microsoft Search / Graph API /search"]
Delve["Office Graph & découvrabilité sémantique"]
eDisc["Purview eDiscovery (Super-privilège)"]
end
Token --> EXO
Token --> SPO
Token --> ODB
Token --> Teams
AppToken --> EXO
AppToken --> SPO
AppToken --> Fabric
Token --> MSearch
MSearch -.-> SPO
MSearch -.-> ODB
MSearch -.-> EXO
MSearch -.-> Teams

Matrice des silos de stockage et caractéristiques forensiques

Section intitulée « Matrice des silos de stockage et caractéristiques forensiques »
WorkloadArchitecture de stockageProtocoles & Accès clientFlux d’audit principalRisque d’exposition par défaut
Exchange onlinePartition de base ESE (Azure Substrate)MAPI-HTTP, EWS, ActiveSync, REST GraphPurview UAL (ExchangeItem)Règles de boîte, transferts, boîtes déléguées
SharePoint onlineAzure SQL + Azure Blob StorageREST, CSOM, SOAP, WebDAV, UI WebPurview UAL (SharePointFileOperation)Liens de partage “Tout le monde”, sites ouverts
OneDrive entrepriseCollection de sites personnelle (/personal/)Client Sync (ODL), REST Graph, UI WebPurview UAL (OneDrive)Exfiltration par synchronisation, liens invités
Microsoft teamsSubstrate Hybride (Exchange + SPO + ODB)Skypetoken, MTnp, REST GraphPurview UAL (MicrosoftTeams)Fédération externe, invités dans les canaux
Power platform / fabricDataverse / Azure Data Lake Storage Gen2OData, TDS, Client Power AppsPurview UAL (PowerPlatform)Flux automatisés sortants, fuites de connecteurs

2. Vecteurs d’exposition et déplacement latéral de données

Section intitulée « 2. Vecteurs d’exposition et déplacement latéral de données »

Les attaquants ne se contentent pas de télécharger des fichiers ciblés : ils exploitent les fonctionnalités natives de collaboration pour découvrir, agréger et préparer l’exfiltration de données sensibles.

flowchart LR
A[Accès Initial] --> B[Découverte sur le Tenant]
B --> C{Mécanisme d'Exposition}
C -->|Recherche Graph| D[Mots-clés : 'facture', 'motdepasse', 'fusion']
C -->|Liens de Partage| E[Création de liens anonymes 'Tout le monde']
C -->|Fédération Teams| F[Exfiltration via chat 1:1 externe]
C -->|Applications OAuth| G[Persistance de droits de lecture globaux]
D --> H[Exfiltration Coordonnée]
E --> H
F --> H
G --> H

1. Découverte par recherche globale (/search/query)

Section intitulée « 1. Découverte par recherche globale (/search/query) »

Un attaquant détenant un compte utilisateur classique peut exécuter des requêtes de recherche globales via l’API Microsoft Graph (https://graph.microsoft.com/v1.0/search/query). Microsoft Search indexe l’ensemble des documents, courriels, discussions Teams et listes SharePoint surpartagés au sein de l’organisation (ex. partagés avec “Tout le monde sauf les utilisateurs externes”).

  • Artefact forensique : SearchQueryPerformed dans l’UAL Purview.
  • Indicateur de chasse : rafale de requêtes lexicales ciblant les finances (salaire, virement, rib), les identifiants (motdepasse, credentials, vpn) ou la gouvernance.

2. Typologie des liens de partage SharePoint / OneDrive

Section intitulée « 2. Typologie des liens de partage SharePoint / OneDrive »
  • Anonyme (“toute personne ayant le lien” - AnonymousLinkCreated) : génère une URL publique accessible sans aucune authentification sur Internet. Les attaquants utilisent ces liens pour exfiltrer des fichiers sans déclencher d’anomalies de connexion.
  • Organisation (“personnes de votre organisation” - CompanyLinkCreated) : ouvre l’accès à tous les utilisateurs internes du tenant, augmentant massivement l’exposition latérale.
  • Personnes spécifiques (SecureLinkCreated) : restreint l’accès à des utilisateurs nommés.
  • Permissions directes (AddedToSecureLink) : accorde des droits explicites dans la liste de contrôle d’accès (ACL).

3. Synchronisation inter-tenants et accès externe

Section intitulée « 3. Synchronisation inter-tenants et accès externe »
  • B2B direct Connect (canaux partagés teams) : permet à des membres de tenants tiers d’interagir sans changer de répertoire, offrant un canal furtif de siphonage de données.
  • Contournement des restrictions de tenants : utilisation du poste d’entreprise pour pousser des données vers un tenant Microsoft 365 contrôlé par l’attaquant si les restrictions de tenant ne sont pas appliquées au niveau du proxy réseau.

3. L’échelle de preuve forensique (evidentiary threshold ladder)

Section intitulée « 3. L’échelle de preuve forensique (evidentiary threshold ladder) »

En investigation post-compromission, les équipes juridiques, les assureurs cyber et les régulateurs (RGPD/CNIL, SEC, NIS2) exigent de distinguer rigoureusement l’exposition potentielle de l’exfiltration avérée.

L’échelle de preuve Hermes Codex formalise cette hiérarchisation :

graph TD
L1["1. Possible<br/>Les données résident sur le tenant où le compte a été compromis"] --> L2["2. Configuré<br/>La charge applicative, la licence et les politiques autorisaient l'accès"]
L2 --> L3["3. Autorisé<br/>Le compte disposait d'habilitations ACL ou RBAC directes ou héritées"]
L3 --> L4["4. Accessible<br/>Aucune règle d'accès conditionnel ni restriction réseau ne bloquait l'accès"]
L4 --> L5["5. Utilisé<br/>Le compte s'est authentifié sur le service durant la fenêtre d'attaque"]
L5 --> L6["6. Observé<br/>Un événement d'audit atteste de la recherche, lecture ou prévisualisation"]
L6 --> L7["7. Prouvé<br/>Un enregistrement cryptographique ou réseau confirme le transfert sortant"]
style L1 fill:#f9f9f9,stroke:#999
style L2 fill:#f0f0f0,stroke:#888
style L3 fill:#e0e0e0,stroke:#777
style L4 fill:#d0d0d0,stroke:#666
style L5 fill:#b0e0e6,stroke:#008b8b
style L6 fill:#98fb98,stroke:#2e8b57
style L7 fill:#32cd32,stroke:#006400,color:#fff
  1. Possible (niveau 1) : le compte possède une boîte ou un accès à un site, mais aucune preuve n’atteste que l’attaquant a sollicité ce workload.
  2. Configuré & autorisé (niveaux 2-3) : les droits théoriques existent, mais aucune interaction n’est relevée.
  3. Accessible & utilisé (niveaux 4-5) : l’attaquant s’est connecté à l’application (UserLoggedIn), créant une fenêtre d’opportunité temporelle.
  4. Observé (niveau 6) : des événements d’audit concrets (MailItemsAccessed, FileAccessed, SearchQueryPerformed) démontrent la consultation effective de fichiers ou courriels précis.
  5. Prouvé (niveau 7) : des enregistrements indiscutables (FileDownloaded, FileSyncDownloadedFull, Message Trace sortant) confirment l’exfiltration physique hors du tenant.

4. Ingénierie de détection : requêtes de chasse multi-workloads

Section intitulée « 4. Ingénierie de détection : requêtes de chasse multi-workloads »
// Détection de requêtes de recherche suspectes et massives
CloudAppEvents
| where TimeGenerated >= ago(7d)
| where ActionType in ("SearchQueryPerformed", "Search")
| extend QueryText = tostring(RawEventData.QueryText)
| summarize
QueryCount = count(),
DistinctQueries = dcount(QueryText),
Queries = make_set(QueryText, 20)
by AccountObjectId, IPAddress, bin(TimeGenerated, 1h)
| where QueryCount > 30 or DistinctQueries > 15
| extend IsSensitiveKeyword = iff(Queries has_any ("motdepasse", "salaire", "rib", "confidential", "virement", "fusion", "secret"), 1, 0)
| sort by IsSensitiveKeyword desc, QueryCount desc

5. Procédures d’endiguement du rayon d’impact

Section intitulée « 5. Procédures d’endiguement du rayon d’impact »
  1. Révocation d’urgence des liens de partage créés : Révoquer immédiatement les liens anonymes générés durant la période de compromission :

    Fenêtre de terminal
    # Suppression des liens anonymes sur un fichier via PnP PowerShell
    Get-PnPFileSharingLink -Identity "/sites/Finance/Shared Documents/Comptes.xlsx" | Where-Object {$_.LinkKind -eq "Anonymous"} | Remove-PnPFileSharingLink
  2. Restriction des tenants externes sur les proxys sortants : Injecter les en-têtes HTTP de restriction sur les passerelles web pour empêcher l’exfiltration vers des tenants personnels :

    • Restrict-Access-To-Tenants: contoso.com, contoso.onmicrosoft.com
    • Restrict-Access-Context: 11111111-2222-3333-4444-555555555555
  3. Purge des caches de synchronisation et des sessions locales : Réinitialiser les liaisons OneDrive et Outlook locales via une commande d’effacement sélectif Intune.