Attaquer Entra ID avec ROADtools
Utilisation autorisée uniquement : ROADtools interagit avec des locataires Microsoft Entra ID (Azure AD) réels et peut enregistrer des appareils, créer et échanger des jetons, et énumérer des objets d'annuaire. Utilisez-le uniquement sur des locataires que vous possédez ou pour lesquels vous êtes explicitement autorisé par écrit à tester. L'accès non autorisé à un locataire cloud est illégal.
Vue d'ensemble
ROADtools (par Dirk-jan Mollema) est la boîte à outils offensive de facto pour Microsoft Entra ID. Il comprend deux composants principaux :
- ROADrecon — s'authentifie auprès d'Entra ID, collecte l'intégralité de l'annuaire dans une base de données SQLite locale via l'API Azure AD Graph, et sert une interface utilisateur Angular pour explorer hors ligne les utilisateurs, groupes, rôles, applications, principaux de service, stratégies d'accès conditionnel et objets d'appareil. Un système de plugins permet l'exportation vers BloodHound et l'analyse des stratégies d'accès conditionnel.
- roadtx (ROADtools Token eXchange) — acquiert et échange des jetons émis par Entra via les nombreux flux OAuth (ROPC, code d'appareil, code d'autorisation, échange de jeton d'actualisation, application fédérée), effectue l'enregistrement d'appareil et gère les opérations de Primary Refresh Token (PRT) incluant le SSO basé sur PRT et la création de cookies. Sa connaissance de la famille de clients FOCI (Family of Client IDs) permet à un jeton d'actualisation pour un client propriétaire d'être échangé pour une autre ressource.
Ensemble, ils couvrent la phase de Découverte contre l'identité cloud : énumérer le locataire (T1087.004 Account Discovery: Cloud Account) et obtenir/manipuler les jetons nécessaires pour accéder à Microsoft Graph, Azure Resource Manager et d'autres ressources. La base de données hors ligne de ROADrecon rend la reconnaissance furtive et rapide ; roadtx rend le vol de jetons, l'abus de PRT et le pivotement entre ressources pratiques.
Quand l'utiliser
- Lors d'un test d'intrusion Azure / Entra ID ou d'un test d'équipe rouge autorisé.
- Lorsque vous disposez d'un identifiant, d'un jeton d'actualisation ou d'un PRT et devez énumérer le locataire.
- Lorsque vous devez faire pivoter un jeton d'une ressource (par exemple, Azure CLI) vers une autre (par exemple, Microsoft Graph).
- Lors de la validation que les stratégies d'accès conditionnel, de conformité des appareils et les contrôles de jetons contraignent réellement un attaquant.
- Lors de la cartographie des chemins d'attaque Entra (exportation vers BloodHound pour analyse de graphe).
Prérequis
- Autorisation écrite et périmètre défini pour le locataire cible.
- Un identifiant de départ : nom d'utilisateur/mot de passe (pas de flux MFA), une session de code d'appareil, un jeton d'actualisation/d'accès, ou le PRT d'un appareil enregistré.
- Python 3.7+ (les flux Selenium de roadtx nécessitent un geckodriver/Firefox compatible).
# Installation de base (roadlib est une dépendance partagée, installée automatiquement)
python -m pip install roadrecon
python -m pip install roadtx
# Vérification
roadrecon --help
roadtx --help
Objectifs
- S'authentifier auprès d'Entra ID via le flux approprié (code d'appareil préféré pour MFA).
- Collecter l'intégralité de l'annuaire avec ROADrecon et l'analyser dans l'interface utilisateur graphique.
- Exporter l'annuaire vers BloodHound et exécuter les plugins d'analyse des stratégies d'accès conditionnel.
- Acquérir des jetons avec roadtx et échanger des jetons d'actualisation entre ressources/clients.
- Démontrer le SSO basé sur PRT et documenter l'accès résultant.
Cartographie MITRE ATT&CK
| ID | Tactique | Nom technique officiel | Rôle dans cette compétence |
|---|---|---|---|
| T1087.004 | Découverte | Account Discovery: Cloud Account | ROADrecon énumère les utilisateurs/comptes du locataire |
| T1069.003 | Découverte | Permission Groups Discovery: Cloud Groups | ROADrecon énumère les groupes et rôles Entra |
| T1538 | Découverte | Cloud Service Dashboard | Exploration de la configuration du locataire via l'interface graphique |
| T1550.001 | Contournement de défense / Mouvement latéral | Use Alternate Authentication Material: Application Access Token | Échange de jetons d'actualisation roadtx entre ressources |
| T1528 | Accès aux identifiants | Steal Application Access Token | Acquisition de PRT/jeton roadtx |
Flux de travail
Étape 1 : Authentification avec ROADrecon
Choisissez le flux qui correspond à votre point d'accès. Le code d'appareil prend en charge MFA ; ROPC (-u/-p) ne le prend pas en charge.
# Nom d'utilisateur/mot de passe (hérité, pas de MFA)
roadrecon auth -u [email protected] -p 'Password123!'
# Flux de code d'appareil (prend en charge MFA)
roadrecon auth --device-code
# À partir d'un jeton d'accès ou d'actualisation volé
roadrecon auth --access-token <JWT>
roadrecon auth --refresh-token <refresh_token>
# À partir d'un PRT (avec clé de session) pour un accès de niveau SSO
roadrecon auth --prt <prt> --prt-sessionkey <session_key>
L'authentification écrit .roadtools_auth dans le répertoire de travail.
Étape 2 : Collecter l'annuaire
# Collecte complète dans roadrecon.db (par défaut)
roadrecon gather
# Inclure les détails MFA/méthode d'authentification (nécessite un rôle privilégié)
roadrecon gather --mfa
Étape 3 : Explorer dans l'interface graphique
roadrecon gui
# Accédez à http://127.0.0.1:5000 — utilisateurs, groupes, rôles, applications,
# principaux de service, appareils et stratégies d'accès conditionnel, le tout hors ligne.
Étape 4 : Exécuter les plugins d'analyse
# Analyser les stratégies d'accès conditionnel
roadrecon plugin policies -h
roadrecon plugin policies
# Exporter les données collectées vers un format importable par BloodHound
roadrecon plugin bloodhound -h
roadrecon plugin bloodhound
Étape 5 : Acquérir des jetons avec roadtx
# ROPC : obtenir un jeton Microsoft Graph pour le client Azure CLI
roadtx gettokens -u [email protected] -p 'Password123!' -c azcli -r msgraph
# Authentification interactive de style code d'appareil pour le client Teams vers Graph
roadtx interactiveauth -c msteams -r msgraph
# À partir d'un jeton d'actualisation existant
roadtx gettokens --refresh-token <refresh_token> -r msgraph
Les jetons sont écrits dans .roadtools_auth (utilisez --tokens-stdout pour les afficher).
Étape 6 : Échanger des jetons d'actualisation entre ressources (pivot FOCI)
Un jeton d'actualisation FOCI obtenu pour un client propriétaire peut être échangé pour une autre ressource sans ré-authentification.
# Convertir le jeton d'actualisation stocké en jeton Azure Resource Manager
roadtx refreshtokento -r azrm
# Convertir en jeton Graph avec étendue via le client Teams
roadtx refreshtokento -c msteams -r msgraph
# Trouver quels clients propriétaires détiennent une étendue donnée
roadtx getscope -s https://graph.microsoft.com/mail.read --foci
Étape 7 : Enregistrement d'appareil et SSO basé sur PRT
# Enregistrer un appareil (virtuel) sur le locataire
roadtx device -n redteam-device
# Demander un PRT en utilisant le certificat/clé de l'appareil et les identifiants utilisateur
roadtx prt -u [email protected] -p 'Password123!' --key-pem redteam-device.key --cert-pem redteam-device.pem
# Utiliser le PRT pour authentifier un client à une ressource (niveau SSO)
roadtx prtauth -c msteams -r msgraph
# Enrichir un PRT avec une revendication MFA interactive
roadtx prtenrich -u [email protected]
Étape 8 : Inspecter les jetons
# Décoder et afficher les revendications du jeton stocké / d'un jeton fourni
roadtx describe -t <JWT>
roadtx describe < .roadtools_auth | jq .
Outils et ressources
| Outil | Objectif | Source principale |
|---|---|---|
| ROADtools (dépôt) | Présentation de la boîte à outils + wiki | https://github.com/dirkjanm/ROADtools |
| Wiki ROADrecon | Utilisation auth/collecte/interface graphique/plugin | https://github.com/dirkjanm/ROADtools/wiki/Getting-started-with-ROADrecon |
| Wiki roadtx | Échange de jetons + flux PRT/appareil | https://github.com/dirkjanm/ROADtools/wiki/ROADtools-Token-eXchange-(roadtx) |
| BloodHound CE | Analyse de graphe des données Entra exportées | https://github.com/SpecterOps/BloodHound |
| Plateforme d'identité Microsoft | Référence jeton/flux | https://learn.microsoft.com/entra/identity-platform/ |
Critères de validation
- Authentifié au locataire cible via un flux autorisé ;
.roadtools_authcréé. - Annuaire collecté dans
roadrecon.db(avec--mfalorsque le rôle le permet). - Interface graphique explorée ; utilisateurs, groupes, rôles, applications, stratégies d'accès conditionnel examinés.
- Plugins d'analyse des stratégies d'accès conditionnel et BloodHound exécutés ; données exportées.
- Jetons acquis avec roadtx pour au moins une ressource.
- Échange de jeton d'actualisation vers une deuxième ressource démontré (pivot FOCI).
- Appareil enregistré et SSO basé sur PRT démontré (lorsque dans le périmètre).
- Revendications de jeton inspectées avec
roadtx describe. - Résultats et accès documentés pour le rapport d'engagement.