Rôles entra, abus de PIM & élévation de privilèges
Dans la sécurité du cloud d’entreprise, obtenir un accès initial sur le compte d’un collaborateur standard ne représente que la phase préliminaire d’une intrusion. Pour asseoir une domination totale sur le tenant, accéder sans restriction aux portails d’eDiscovery, neutraliser les politiques de sécurité ou opérer une exfiltration massive, les cybercriminels recherchent activement l’élévation de privilèges vers les échelons d’administration suprêmes de Microsoft Entra ID.
L’élévation de privilèges sous Microsoft Entra ID se distingue radicalement des attaques classiques sous Active Directory Domain Services (AD DS). Dans Entra ID, il n’existe ni délégation Kerberos non contrainte ni usurpation SAM-Account-Name. L’élévation cloud exploite des relations indirectes entre rôles applicatifs et rôles d’annuaire (tels que les administrateurs d’applications injectant des secrets sur des Service Principals administrateurs généraux), des groupes assignables à des rôles mal configurés et le détournement des flux d’activation de Privileged Identity Management (PIM).
Ce guide détaille la hiérarchie des rôles de Tier 0, analyse les vecteurs concrets d’élévation, décode la télémétrie des activations PIM dans les journaux d’audit et fournit des requêtes de détection KQL ainsi que des scripts PowerShell d’audit.
1. Hiérarchie des rôles d’annuaire entra ID & Tier 0
Section intitulée « 1. Hiérarchie des rôles d’annuaire entra ID & Tier 0 »Entra ID intègre plus de 80 rôles d’annuaire prédéfinis. Pour l’investigation forensique et l’architecture de sécurité, ces rôles se structurent selon un modèle de plan de contrôle à trois niveaux :
graph TD subgraph "Tier 0 : Plan de Contrôle du Tenant" T0_GA[Global Administrator<br/>Contrôle Total et Illimité du Tenant] T0_PRA[Privileged Role Administrator<br/>Gestion et Attribution de Tous les Rôles] T0_PAA[Privileged Authentication Administrator<br/>Réinitialisation Mots de Passe / MFA de Tous les Admins] T0_HIA[Hybrid Identity Administrator<br/>Contrôle du Pipeline Entra Connect / Synchronisation] end
subgraph "Tier 1 : Plan de Contrôle des Services SaaS" T1_EX[Exchange Administrator<br/>Boîtes Mail du Tenant & Flux de Messagerie] T1_SP[SharePoint Administrator<br/>Ensemble des Sites SharePoint & OneDrive] T1_SEC[Security Administrator<br/>Defender, Purview, Règles d'Accès Conditionnel] T1_INT[Intune Administrator<br/>Gestion et Effacement des Postes de Travail] end
subgraph "Tier 2 : Opérateurs d'Identité & d'Applications" T2_APP[Application Administrator<br/>Gestion des Inscriptions d'Apps & Secrets] T2_CAPP[Cloud Application Administrator<br/>Gestion des Apps Cloud & Secrets] T2_USR[User Administrator<br/>Gestion des Comptes Non-Administrateurs] T2_HELP[Helpdesk Administrator<br/>Réinitialisation des Comptes Standards] end
T2_APP -.->|Vecteur d'Élévation Indirecte| T0_GA T2_USR -.->|Vecteur Groupes Assignables| T0_PRA T1_SEC -.->|Contournement Accès Conditionnel| T0_GARôles critiques de Tier 0 :
Section intitulée « Rôles critiques de Tier 0 : »- Global administrator : autorité absolue sur le tenant. Contourne toutes les frontières RBAC, peut s’octroyer les privilèges racine sur les souscriptions Azure et accéder à l’ensemble des services.
- Privileged role administrator : peut attribuer, modifier ou révoquer n’importe quel rôle d’annuaire (actif ou éligible) pour tous les utilisateurs et Service Principals.
- Privileged authentication administrator : peut réinitialiser les mots de passe, purger les méthodes MFA et émettre des pass temporaires (TAP) pour absolument tous les comptes du tenant, y compris les administrateurs généraux.
2. Vecteurs d’élévation de privilèges cloud
Section intitulée « 2. Vecteurs d’élévation de privilèges cloud »2.1 le pont de l’application administrator vers le global admin
Section intitulée « 2.1 le pont de l’application administrator vers le global admin »Le vecteur d’élévation indirecte le plus répandu sous Entra ID survient lorsqu’un attaquant compromet un compte disposant du rôle Application Administrator ou Cloud Application Administrator :
sequenceDiagram autonumber participant Attacker as Attaquant (Rôle App Admin) participant Entra as Annuaire Entra ID participant TargetSP as Service Principal Préexistant (Doté du rôle Global Admin) participant Graph as API Microsoft Graph
Note over Attacker: L'attaquant compromet un compte ayant le rôle 'Application Administrator' Attacker->>Entra: Énumère les applications d'entreprise détenant des rôles d'annuaire Note over Entra: Découvre que le SP 'Automation-Pipeline' détient le rôle 'Global Administrator' ! Attacker->>Entra: POST /applications/{id}/addPassword (Injection d'un secret client) Entra-->>Attacker: Renvoie un client_secret valide pour 'Automation-Pipeline' Attacker->>Entra: Authentification via OAuth Client Credentials Entra-->>Attacker: Délivrance d'un jeton applicatif doté des droits Global Admin ! Attacker->>Graph: Contrôle absolu du tenant via l'API Graph !Pourquoi ce vecteur réussit :
Section intitulée « Pourquoi ce vecteur réussit : »Les administrateurs d’applications peuvent gérer les secrets et certificats de toutes les applications d’entreprise et Service Principals de l’annuaire. Si des administrateurs ont précédemment octroyé un rôle d’annuaire (Global Admin, Exchange Admin) à un Service Principal (ex. script de synchronisation ou outil tiers), tout Application Administrator peut y injecter un secret et usurper immédiatement ses prérogatives de Tier 0.
2.2 les groupes de sécurité assignables à des rôles
Section intitulée « 2.2 les groupes de sécurité assignables à des rôles »Entra ID permet d’assigner des rôles d’annuaire directement à des groupes de sécurité (isRoleAssignable : true). Pour prévenir les élévations illégitimes, seuls les Global Administrators et Privileged Role Administrators peuvent en créer ou en modifier les membres.
Cependant, des failles d’élévation apparaissent lorsque :
- Délégation abusive de propriété : un administrateur délègue la propriété du groupe à un compte standard ou à un Service Principal non surveillé. Le propriétaire peut alors y adjoindre n’importe quel compte, lui conférant le rôle d’annuaire attaché au groupe.
- PIM pour groupes : abus des éligibilités PIM sur les groupes d’administration pour élever un compte tiers.
3. Détournement des activations privileged identity management (PIM)
Section intitulée « 3. Détournement des activations privileged identity management (PIM) »Microsoft Entra Privileged Identity Management (PIM) applique le principe du Just-In-Time (JIT) : les administrateurs ne détiennent pas de rôles permanents mais sont positionnés en statut Éligible et doivent activer leur rôle pour une durée délimitée.
graph TD ATTACKER[Compte Utilisateur Compromis par l'Attaquant] --> PIM_CHECK{Le Compte est-il Éligible PIM ?}
PIM_CHECK -->|Non| RECON[Maintien en Droits Utilisateur Standard]
PIM_CHECK -->|Oui : Éligible Global Admin| ACT_REQ[Soumission de Requête d'Activation<br/>POST /roleAssignmentScheduleRequests]
ACT_REQ --> POL_CHECK{Configuration de la Politique PIM ?}
POL_CHECK -->|Approbation Requise| WAIT_APP[En Attente d'Approbation<br/>L'attaquant soumet un faux ticket INC-94812] POL_CHECK -->|Sans Approbation / Justification Seule| INSTANT[Activation Immédiate du Rôle !<br/>Statut : Actif pour 8 Heures]
INSTANT --> FULL_TENANT[Prise de Contrôle Absolue du Tenant Microsoft 365]3.1 vecteurs d’abus sous PIM :
Section intitulée « 3.1 vecteurs d’abus sous PIM : »- Éligibilités sans approbation obligatoire : de nombreuses entreprises configurent l’éligibilité PIM sans circuit de validation tiers, n’imposant qu’une simple justification textuelle. L’attaquant saisit un faux numéro de ticket (
"Urgence Incident DSI - INC-88412") et obtient les privilèges Global Admin en 30 secondes. - Compromission des approbateurs : si une approbation est requise, les attaquants compromettent le compte de l’approbateur désigné, valident leur propre demande d’élévation et finalisent la prise de contrôle.
- Altération des politiques PIM : un attaquant disposant temporairement du rôle Privileged Role Administrator modifie les paramètres PIM (
Update role setting in PIM), étendant la durée d’activation maximale à 24 heures et désactivant l’exigence d’approbation.
4. Télémétrie forensique dans les audit logs entra ID
Section intitulée « 4. Télémétrie forensique dans les audit logs entra ID »Toutes les attributions de rôles, activations PIM et modifications de groupes assignables génèrent des événements sous les catégories RoleManagement et GroupManagement :
| Opération | Catégorie | Signification en Réponse à Incident |
|---|---|---|
Add member to role | RoleManagement | Attribution de rôle actif permanent. Élévation immédiate vers le rôle ciblé. |
Add eligible member to role | RoleManagement | Attribution d’éligibilité PIM permanente. Le compte peut activer le rôle à sa guise. |
Add role assignment schedule request | RoleManagement | Activation effective sous PIM. L’utilisateur active son rôle éligible pour un créneau programmé. |
Add member to group | GroupManagement | Alerte critique si le groupe ciblé possède isRoleAssignable : true. |
Update role setting in PIM | RoleManagement | Altération des règles de sécurité PIM (suppression de l’approbation). |
4.1 analyse d’un événement d’activation PIM
Section intitulée « 4.1 analyse d’un événement d’activation PIM »L’enregistrement JSON extrait de la table AuditLogs présente la structure suivante :
{ "activityDateTime": "2026-03-24T16:45:00Z", "activityDisplayName": "Add role assignment schedule request", "category": "RoleManagement", "result": "success", "initiatedBy": { "user": { "userPrincipalName": "victim-admin@target.com", "ipAddress": "198.51.100.55" } }, "targetResources": [ { "displayName": "Global Administrator", "type": "RoleDefinition", "modifiedProperties": [ { "displayName": "Role.DisplayName", "newValue": "\"Global Administrator\"" }, { "displayName": "Assignment.Type", "newValue": "\"Active\"" }, { "displayName": "Assignment.Duration", "newValue": "\"PT8H\"" }, { "displayName": "Assignment.Justification", "newValue": "\"Intervention urgente ticket INC-89124\"" } ] } ]}Points clés pour l’investigation :
initiatedBy.user.ipAddress: adresse IP à corréler avec les plages d’entreprise pour déterminer si l’activation provient de l’infrastructure de l’attaquant.modifiedProperties[Assignment.Justification]: examen de la légitimité du ticket et de la justification.modifiedProperties[Role.DisplayName]: rôle d’annuaire débloqué.
5. Requêtes de chasse KQL en production
Section intitulée « 5. Requêtes de chasse KQL en production »5.1 détection des attributions de rôles permanents de Tier 0
Section intitulée « 5.1 détection des attributions de rôles permanents de Tier 0 »Repérer l’attribution directe de rôles d’administration sans passer par PIM :
let CriticalRoles = dynamic([ "Global Administrator", "Privileged Role Administrator", "Privileged Authentication Administrator", "Security Administrator", "Exchange Administrator"]);AuditLogs| where TimeGenerated >= ago(30d)| where Category == "RoleManagement"| where OperationName in ("Add member to role", "Add member to role completed (PIM activation)")| extend RoleName = tostring(TargetResources[0].displayName)| extend AssignedTo = tostring(TargetResources[2].displayName)| extend AssignedToUPN = tostring(TargetResources[2].userPrincipalName)| extend Initiator = tostring(InitiatedBy.user.userPrincipalName)| extend InitiatorIP = tostring(InitiatedBy.user.ipAddress)| where RoleName in (CriticalRoles)| project TimeGenerated, OperationName, RoleName, AssignedTo, AssignedToUPN, Initiator, InitiatorIP| sort by TimeGenerated desc5.2 détection des activations PIM suspectes
Section intitulée « 5.2 détection des activations PIM suspectes »Identifier les activations PIM intervenues en dehors des heures ouvrées ou depuis des adresses IP atypiques :
AuditLogs| where TimeGenerated >= ago(14d)| where Category == "RoleManagement"| where OperationName == "Add role assignment schedule request"| extend InitiatorUPN = tostring(InitiatedBy.user.userPrincipalName), InitiatorIP = tostring(InitiatedBy.user.ipAddress)| extend TargetRole = tostring(TargetResources[0].displayName)| extend ModifiedProps = TargetResources[0].modifiedProperties| mv-expand ModifiedProps| where ModifiedProps.displayName == "Assignment.Justification"| extend Justification = tostring(ModifiedProps.newValue)| project TimeGenerated, OperationName, TargetRole, InitiatorUPN, InitiatorIP, Justification| sort by TimeGenerated desc5.3 détection de secrets injectés sur des applications détenant des rôles
Section intitulée « 5.3 détection de secrets injectés sur des applications détenant des rôles »Identifier les applications détenant des rôles d’annuaire qui reçoivent un nouveau secret :
let RoleAssignedApps = AuditLogs| where TimeGenerated >= ago(90d)| where OperationName == "Add member to role"| extend TargetAppId = tostring(TargetResources[1].id)| where isnotempty(TargetAppId)| distinct TargetAppId;AuditLogs| where TimeGenerated >= ago(30d)| where OperationName in ("Update application - Certificates and secrets management", "Add service principal credentials")| extend AppId = tostring(TargetResources[0].id)| where AppId in (RoleAssignedApps)| project TimeGenerated, OperationName, TargetApp=tostring(TargetResources[0].displayName), AppId, InitiatedBy=tostring(InitiatedBy.user.userPrincipalName)| sort by TimeGenerated desc6. Playbook forensique d’inventaire et révocation PowerShell
Section intitulée « 6. Playbook forensique d’inventaire et révocation PowerShell »6.1 inventaire des titulaires de rôles de Tier 0 (actifs et éligibles)
Section intitulée « 6.1 inventaire des titulaires de rôles de Tier 0 (actifs et éligibles) »Lister tous les membres actifs et éligibles des rôles d’administration majeurs :
# Prérequis : Module Microsoft.Graph.Identity.Governance# Connect-MgGraph -Scopes "RoleManagement.Read.Directory","Directory.Read.All"
Write-Host "=====================================================" -ForegroundColor CyanWrite-Host " AUDIT DES ATTRIBUTIONS DE RÔLES D'ANNUAIRE & PIM " -ForegroundColor CyanWrite-Host "=====================================================" -ForegroundColor Cyan
# 1. Attributions Actives PermanentesWrite-Host "`n[*] Examen des attributions de rôles actives..." -ForegroundColor Yellow$activeAssignments = Get-MgRoleManagementDirectoryRoleAssignmentScheduleInstance -ExpandProperty "RoleDefinition,Principal"$tier0Roles = @("Global Administrator", "Privileged Role Administrator", "Privileged Authentication Administrator")
$activeReport = @()foreach ($assign in $activeAssignments) { if ($tier0Roles -contains $assign.RoleDefinition.DisplayName) { $activeReport += [PSCustomObject]@{ RoleName = $assign.RoleDefinition.DisplayName PrincipalName = $assign.Principal.AdditionalProperties.userPrincipalName PrincipalType = $assign.Principal.AdditionalProperties["@odata.type"] AssignmentType= $assign.AssignmentType StartDateTime = $assign.StartDateTime EndDateTime = $assign.EndDateTime } }}$activeReport | Format-Table -AutoSize
# 2. Éligibilités PIMWrite-Host "`n[*] Examen des éligibilités PIM..." -ForegroundColor Yellow$eligibleAssignments = Get-MgRoleManagementDirectoryRoleEligibilityScheduleInstance -ExpandProperty "RoleDefinition,Principal"$eligibleReport = @()foreach ($elig in $eligibleAssignments) { if ($tier0Roles -contains $elig.RoleDefinition.DisplayName) { $eligibleReport += [PSCustomObject]@{ RoleName = $elig.RoleDefinition.DisplayName PrincipalName = $elig.Principal.AdditionalProperties.userPrincipalName MemberType = $elig.MemberType StartDateTime = $elig.StartDateTime EndDateTime = $elig.EndDateTime } }}$eligibleReport | Format-Table -AutoSize6.2 révocation d’urgence d’un rôle compromis
Section intitulée « 6.2 révocation d’urgence d’un rôle compromis »# Retirer immédiatement une attribution de rôle d'annuaire actif :$compromisedUPN = "admin-compromis@target.com"$roleName = "Global Administrator"
$user = Get-MgUser -Filter "userPrincipalName eq '$compromisedUPN'"$role = Get-MgRoleManagementDirectoryRoleDefinition -Filter "displayName eq '$roleName'"
$assignment = Get-MgRoleManagementDirectoryRoleAssignment -Filter "principalId eq '$($user.Id)' and roleDefinitionId eq '$($role.Id)'"
if ($assignment) { Remove-MgRoleManagementDirectoryRoleAssignment -UnifiedRoleAssignmentId $assignment.Id Write-Host "[+] Attribution '$roleName' révoquée avec succès pour $compromisedUPN" -ForegroundColor Green}7. Maillage interne & navigation
Section intitulée « 7. Maillage interne & navigation »- Fiche précédente : 30. Manipulation des Méthodes d’Authentification comme Persistance
- Fiche suivante : 32. Cartographie de la Surface d’Attaque des Données M365 (Bloc VII — Data Access)
- Fiches complémentaires :
- 02. Microsoft Entra ID : le plan d’identité
- 03. Utilisateurs, groupes et rôles dans Microsoft 365
- 05. Global Reader & matrice des accès
- 10. Dissection approfondie des audit logs entra ID
- 19. Kill chain de compromission de compte M365
- 26. Taxonomie des techniques de persistance cloud M365
- 29. Consentement OAuth, applications furtives & service principals