Taxonomie des techniques de persistance cloud M365
Dans la forensique des systèmes d’exploitation locaux, les mécanismes de persistance s’articulent autour d’ancrages sur l’hôte : clés de registre Run, tâches planifiées, abonnements d’événements WMI et démons système. Dans le cloud, la doctrine change radicalement. La persistance sous Microsoft 365 ne modifie aucun système d’exploitation physique ; elle s’ancre dans les architectures distribuées des objets d’identité Microsoft Entra ID, des configurations applicatives SaaS, des pipelines de routage de messagerie et des relations de confiance OAuth 2.0.
L’une des erreurs les plus fréquentes en réponse à incident cloud est la remédiation partielle : l’analyste révoque les sessions actives de la victime et réinitialise son mot de passe, considérant l’incident comme clos. Quelques heures ou jours plus tard, le cybercriminel réinvestit le tenant car les points d’ancrage secondaires — méthodes MFA compromises, applications OAuth avec offline_access, règles de boîte invisibles ou nouveaux secrets applicatifs — sont demeurés intacts.
Ce guide établit la Taxonomie de la Persistance Cloud en 5 Domaines pour Microsoft 365, analyse la matrice de survie aux actions de remédiation, cartographie les sources d’audit et fournit des méthodologies de chasse systématique.
1. La taxonomie de la persistance cloud en 5 domaines
Section intitulée « 1. La taxonomie de la persistance cloud en 5 domaines »Les mécanismes de persistance dans Microsoft 365 se répartissent sur cinq plans architecturaux distincts :
graph TD subgraph "Architecture de Persistance Cloud M365" D1[Domaine 1 : Plan d'Identité<br/>Backdoors MFA, Méthodes SSPR, Injection TAP, Comptes Invités] D2[Domaine 2 : Plan Applicatif & OAuth<br/>Consentements Illicites, Injection de Secrets/Certificats sur Service Principals] D3[Domaine 3 : Plan Boîte Mail & Collaboration<br/>Règles de Boîte, Règles MAPI Invisibles, Délégations de Boîte] D4[Domaine 4 : Plan de Routage & Transport<br/>Règles de Transport, Copie Cachée Auto, Connecteurs Sortants] D5[Domaine 5 : Plan d'Administration & Rôles<br/>Rôles Permanents Entra, Manipulation PIM, Groupes Assignables] end
COMPROMISE[Compromission Initiale Réussie] --> D1 COMPROMISE --> D2 COMPROMISE --> D3 COMPROMISE --> D4 COMPROMISE --> D5Analyse comparative des 5 domaines :
Section intitulée « Analyse comparative des 5 domaines : »| Domaine de Persistance | Point d’Ancrage Architectural | Technique Cybercriminelle Typique | Horizon de Survie / Pérennité |
|---|---|---|---|
| 1. Plan d’identité | Objet Utilisateur Entra ID | Ajout d’un téléphone ou d’une clé FIDO contrôlée par l’attaquant ; génération d’un Temporary Access Pass (TAP). | Survit au changement de mot de passe ; détruit uniquement par la purge explicite des méthodes MFA. |
| 2. Plan applicatif & OAuth | Service Principals & Applications | Autorisation d’applications multi-tenant (offline_access) ; injection de secrets clients sur des applications existantes. | Indéterminé ; survit aux changements de mot de passe, de MFA et au départ du collaborateur. |
| 3. Plan boîte mail | Moteur Exchange Store Driver | Injection de règles de boîte (ForwardTo), règles MAPI invisibles ou attribution de droits FullAccess / SendAs. | Survit au renouvellement de mot de passe ; détruit uniquement par le nettoyage de la boîte aux lettres. |
| 4. Plan de routage transport | Pipeline de Transport Exchange | Création de règles de flux (Transport Rules) envoyant en copie cachée (BCC) tous les courriels financiers vers l’extérieur. | Impacte l’ensemble du tenant ; totalement indépendant de l’état du compte utilisateur. |
| 5. Plan d’administration | Moteur d’Attribution des Rôles Entra | Attribution permanente de rôles d’annuaire (Global Administrator) ou altération des règles PIM. | Permanent jusqu’à l’audit et la révocation manuelle des privilèges. |
2. La matrice de survie aux actions de remédiation
Section intitulée « 2. La matrice de survie aux actions de remédiation »Pour concevoir un plan d’endiguement exhaustif, l’analyste DFIR doit impérativement savoir quelles techniques résistent aux opérations classiques :
| Technique de Persistance | Survit au Changement de Mot de Passe ? | Survit à Revoke-MgUserSignSession ? | Survit à la Réinitialisation MFA ? | Survit à la Suppression de Licence ? |
|---|---|---|---|---|
| Numéro mobile attaquant (MFA) | OUI | OUI | NON (si purge complète) | NON (compte désactivé) |
| Temporary access pass (TAP) | OUI | NON | OUI | NON |
Consentement OAuth (offline_access) | OUI | OUI | OUI | OUI (si grant applicatif) |
| Secret sur service principal | OUI | OUI | OUI | OUI (objet tenant) |
Règle de Boîte (ForwardTo) | OUI | OUI | OUI | NON (boîte inactive) |
| Règle de transport Exchange (BCC) | OUI | OUI | OUI | OUI (règle globale) |
Délégation de Boîte (FullAccess) | OUI | OUI | OUI | NON (boîte désaffectée) |
| Compte invité furtif | OUI | OUI | OUI | OUI (identité distincte) |
| Rôle d’annuaire permanent | OUI | OUI | OUI | OUI (rôle sans licence) |
3. Surfaces de journalisation forensique par vecteur
Section intitulée « 3. Surfaces de journalisation forensique par vecteur »Lors de la recherche des mécanismes de persistance, l’analyste doit croiser les journaux d’audit de Microsoft Entra ID et le Unified Audit Log (UAL) de Purview :
graph TD HUNT[Audit Systématique de Persistance] --> L_ENTRA[Table AuditLogs Entra ID] HUNT --> L_UAL[Unified Audit Log Purview]
L_ENTRA --> E1[Catégorie : UserManagement<br/>Opérations : User registered security info, User changed default authentication method] L_ENTRA --> E2[Catégorie : ApplicationManagement<br/>Opérations : Add service principal, Consent to application, Update application - Certificates and secrets management] L_ENTRA --> E3[Catégorie : RoleManagement<br/>Opérations : Add member to role, Add eligible member to role]
L_UAL --> U1[RecordType : ExchangeItem / ExchangeAdmin<br/>Opérations : New-InboxRule, Set-InboxRule, Add-MailboxPermission] L_UAL --> U2[RecordType : ExchangeAdmin<br/>Opérations : New-TransportRule, Set-TransportRule, New-OutboundConnector]Référentiel des événements télémétriques :
Section intitulée « Référentiel des événements télémétriques : »| Vecteur de Persistance | Table Télémétrique | Nom d’Activité / Opération | Champs Essentiels à Analyser |
|---|---|---|---|
| Méthode MFA complice | AuditLogs | User registered security info | TargetResources[0].modifiedProperties (Numéro de téléphone, identifiant de clé). |
| Création d’un TAP | AuditLogs | Generate temporary access pass | InitiatedBy, TargetResources[0].userPrincipalName. |
| Consentement OAuth | AuditLogs | Consent to application | TargetResources[0].displayName, Permissions (offline_access). |
| Ajout de secret app | AuditLogs | Update application - Certificates and secrets management | TargetResources[0].displayName, date d’expiration du secret. |
| Règle de boîte mail | CloudAppEvents / UAL | New-InboxRule, Set-InboxRule | Parameters.ForwardTo, Parameters.DeleteMessage, Parameters.MoveToFolder. |
| Délégation de boîte | CloudAppEvents / UAL | Add-MailboxPermission | Parameters.User, Parameters.AccessRights (FullAccess). |
| Règle de transport | CloudAppEvents / UAL | New-TransportRule, Set-TransportRule | Parameters.BlindCopyTo, Parameters.RedirectMessageTo. |
| Élévation de rôle | AuditLogs | Add member to role | TargetResources[0].displayName (Global Administrator), InitiatedBy. |
4. Requêtes de chasse KQL en production
Section intitulée « 4. Requêtes de chasse KQL en production »4.1 détection globale des altérations de persistance (30 derniers jours)
Section intitulée « 4.1 détection globale des altérations de persistance (30 derniers jours) »Exécuter cette requête unifiée sous Microsoft Sentinel ou Defender Advanced Hunting pour balayer toutes les modifications de persistance en une seule opération :
let TargetOperations = dynamic([ "User registered security info", "User changed default authentication method", "Consent to application", "Add service principal", "Update application - Certificates and secrets management", "Add member to role", "Add eligible member to role", "Add-MailboxPermission", "New-InboxRule", "Set-InboxRule", "New-TransportRule", "Set-TransportRule"]);union( AuditLogs | where TimeGenerated >= ago(30d) | where OperationName in (TargetOperations) | project TimeGenerated, Source="EntraAudit", OperationName, Initiator=tostring(InitiatedBy.user.userPrincipalName), IPAddress=tostring(InitiatedBy.user.ipAddress), Target=tostring(TargetResources[0].displayName), Details=tostring(TargetResources[0].modifiedProperties)),( CloudAppEvents | where TimeGenerated >= ago(30d) | where ActionType in (TargetOperations) | project TimeGenerated, Source="PurviewUAL", OperationName=ActionType, Initiator=AccountDisplayName, IPAddress, Target=ObjectName, Details=tostring(RawEventData))| sort by TimeGenerated desc4.2 détection de l’ajout de secrets sur des applications existantes
Section intitulée « 4.2 détection de l’ajout de secrets sur des applications existantes »Repérer l’injection d’un secret client ou certificat sur une application d’entreprise préexistante :
AuditLogs| where TimeGenerated >= ago(30d)| where OperationName has "Certificates and secrets management"| extend InitiatedByUser = tostring(InitiatedBy.user.userPrincipalName), InitiatedByApp = tostring(InitiatedBy.app.displayName), TargetApp = tostring(TargetResources[0].displayName), AppId = tostring(TargetResources[0].id)| project TimeGenerated, OperationName, InitiatedByUser, InitiatedByApp, TargetApp, AppId, TargetResources| sort by TimeGenerated desc5. Script PowerShell d’audit systématique de la persistance
Section intitulée « 5. Script PowerShell d’audit systématique de la persistance »Ce script permet d’auditer automatiquement l’ensemble des points d’ancrage de persistance du tenant :
# Prérequis : Modules Microsoft.Graph, ExchangeOnlineManagement# Connect-MgGraph -Scopes "Directory.Read.All","Application.Read.All","UserAuthenticationMethod.Read.All"# Connect-ExchangeOnline
Write-Host "=================================================" -ForegroundColor CyanWrite-Host " AUDIT FORENSIQUE DE PERSISTENCE DU TENANT M365 " -ForegroundColor CyanWrite-Host "=================================================" -ForegroundColor Cyan
# 1. Audit des règles de transport ExchangeWrite-Host "`n[*] Analyse des règles de transport (Mail Flow)..." -ForegroundColor Yellow$transportRules = Get-TransportRule | Where-Object { $_.BlindCopyTo -or $_.RedirectMessageTo -or $_.ForwardTo }if ($transportRules) { Write-Warning "[!] Règles de transport suspectes identifiées :" $transportRules | Select-Object Name, BlindCopyTo, RedirectMessageTo | Format-Table} else { Write-Host "[+] Aucune règle de transport avec redirection ou BCC détectée." -ForegroundColor Green}
# 2. Audit des redirections au niveau des boîtes aux lettresWrite-Host "`n[*] Analyse des redirections de boîtes..." -ForegroundColor Yellow$forwardedMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object { $_.ForwardingSmtpAddress -or $_.ForwardingAddress }if ($forwardedMailboxes) { Write-Warning "[!] Boîtes configurées avec transfert externe :" $forwardedMailboxes | Select-Object DisplayName, UserPrincipalName, ForwardingSmtpAddress, ForwardingAddress | Format-Table} else { Write-Host "[+] Aucun transfert externe configuré au niveau boîte." -ForegroundColor Green}
# 3. Audit des octrois de permissions déléguées OAuthWrite-Host "`n[*] Audit des autorisations d'applications OAuth2 (offline_access & Mail)..." -ForegroundColor Yellow$grants = Get-MgOauth2PermissionGrant$riskyGrants = $grants | Where-Object { $_.Scope -match "offline_access" -or $_.Scope -match "Mail\." }Write-Host "[!] $($riskyGrants.Count) octrois avec permissions sensibles identifiés." -ForegroundColor Yellow$riskyGrants | Select-Object ClientId, ConsentType, Scope | Format-Table -AutoSize
# 4. Audit des secrets applicatifs récemment créésWrite-Host "`n[*] Examen des mots de passe d'applications créés récemment..." -ForegroundColor Yellow$recentThreshold = (Get-Date).AddDays(-30)$apps = Get-MgApplication -Allforeach ($app in $apps) { $recentSecrets = $app.PasswordCredentials | Where-Object { $_.StartDateTime -ge $recentThreshold } if ($recentSecrets) { Write-Warning "[!] L'application '$($app.DisplayName)' possède $($recentSecrets.Count) secret(s) créé(s) depuis moins de 30 jours !" }}Write-Host "`n[+] Inventaire de persistance achevé." -ForegroundColor Green6. Maillage interne & navigation
Section intitulée « 6. Maillage interne & navigation »- Fiche précédente : 25. Abus du Device Code Flow OAuth & Détournement de Jetons
- Fiche suivante : 27. Règles de Boîte & Manipulation Furtive comme Persistance
- Fiches complémentaires :
- 10. Dissection approfondie des audit logs entra ID
- 13. Dissection approfondie du unified audit log (UAL)
- 17. Audit de boîte mail & analyse de MailItemsAccessed
- 19. Kill chain de compromission de compte M365
- 28. Redirections de mail, règles de transport & abus de connecteurs
- 29. Consentement OAuth, applications furtives & service principals
- 30. Manipulation des méthodes d’authentification comme persistance
- 31. Rôles entra, abus de PIM & élévation de privilèges