
Azure Outlook Command & Control (C2) - Controlla a distanza un dispositivo Windows compromesso dal tuo account di posta Outlook. Strumento di emulazione delle minacce per l'APT nordcoreano InkySquid / ScarCruft / APT37. TTP: Usa l'API Microsoft Graph per le operazioni C2.
Azure Outlook Command & Control che utilizza l'API Microsoft Graph per le comunicazioni C2 e l'esfiltrazione dei dati.
Controlla da remoto un dispositivo Windows compromesso dalla tua casella di posta Outlook.
Elastic Security Labs ha scoperto intrusioni attive nel mondo reale che utilizzano SIESTAGRAPH. SIESTAGRAPH interagisce con l'API Graph di Microsoft per il comando e controllo utilizzando Outlook e OneDrive. Dai un'occhiata ai loro fantastici blog di analisi malware sulle comunicazioni Azure Outlook C2 qui sotto.


Se hai informazioni su progetti simili, informazioni CTI su questo TTP utilizzato nel mondo reale da gruppi APT/ransomware, consigli difensivi, raccomandazioni per Red Teamer interessati all'emulazione delle minacce Azure C2, o qualsiasi altra informazione che sarebbe un buon aggiunta a questo blog/readme, contattami o invia una Pull Request. Grazie!
Questo progetto consiste in un impianto che fa beaconing verso una casella di posta Outlook di Azure controllata dall'attaccante, che funge da Comando e Controllo (C2); controllando da remoto il dispositivo compromesso. Un Token di Aggiornamento (Refresh Token) di Azure per la casella di posta C2 dell'attaccante è hard-coded nell'impianto durante la compilazione. Quando viene eseguito su un dispositivo Windows, l'impianto accede alla casella Bozze (Draft) dell'attaccante tramite l'API Microsoft Graph. L'impianto legge le istruzioni di comando dalla casella Bozze dell'attaccante, esegue le istruzioni localmente sul dispositivo Windows compromesso e restituisce l'output del comando all'attaccante tramite la creazione di nuovi messaggi Bozze. L'impianto ripete questo comportamento di essere controllato da remoto dalla casella di posta dell'attaccante fino a quando il processo host dell'impianto non viene terminato.
Ho iniziato il Red Teaming circa sei mesi fa nel Red Team di SpiderLabs presso Trustwave. Durante un incarico ho avuto l'onore di lavorare con il leggendario Stephan Borosh (rvrsh3ll|@424f424f). Steve e Matt Kingstone mi hanno insegnato tutto sul Domain Fronting di Azure, e sono rimasto sbalordito dal fatto che il traffico di Comando e Controllo potesse essere esfiltrato via HTTPS utilizzando domini legittimi come ajax.microsoft.com. Utilizza persino i certificati TLS di Microsoft! Sfortunatamente per me, ho iniziato il Red Teaming nello stesso momento in cui il Domain Fronting su Azure è morto. Anche se il Domain Fronting su Azure era morto, c'erano ancora molte fantastiche tecniche di Red Team che potevano essere fatte con Azure.
Steve mi ha introdotto al Device Code Phishing di Azure. Durante questo periodo mi sono immerso profondamente in Azure e nell'API Microsoft Graph per il Red Teaming. Abbiamo creato lo strumento TokenTactics, derivato dal grande lavoro del Dr. Nestori Syynimaa (@DrAzureAD), e abbiamo scritto il blog The Art of the Device Code Phish se sei interessato alla nostra metodologia.
Mentre creavo TokenTactics e sperimentavo con l'API MS Graph, ho scoperto che era possibile utilizzare l'API Microsoft Graph come canale C2. Ci sono molti modi diversi per utilizzare l'API MS Graph come canale C2, e non sono l'unica persona (o la prima) a scoprirlo. VX-Underground, creato da @smelly__vx - il creatore/pubblicatore della tecnica HellsGate, ha rilasciato informazioni il mese scorso secondo cui il gruppo nordcoreano Advanced Persistent Threat (APT) "InkySquid" (noto anche come ScarCruft e APT37) utilizza l'API Microsoft Graph per operazioni C2. Dopo aver rilasciato un teaser di questo progetto su Twitter e LinkedIn, diversi professionisti DFIR hanno commentato che questa tecnica di utilizzare l'API Microsoft Graph per operazioni C2 è attivamente utilizzata da gruppi ransomware nel mondo reale, risalendo a mesi fa.
Durante l'incarico di Red Team, ho tentato di far funzionare Cobalt Strike con l'API MS Graph come canale C2. Sfortunatamente ho fallito, ma questo rimane un obiettivo futuro. Il problema che affronto per farlo funzionare con Cobalt Strike è che l'API MS Graph utilizza due token per le comunicazioni. Il primo token è il Token di Aggiornamento (Refresh Token) che può durare fino a 90 giorni. Il secondo token, il Token di Accesso (Access Token), è un token temporaneo che dura circa un'ora. Le comunicazioni dirette all'API MS Graph vengono effettuate autenticandosi con il Token di Accesso. Una volta scaduto un Token di Accesso, il Token di Aggiornamento può essere utilizzato per ottenere nuovi Token di Accesso. Poiché sono ancora nuovo nel Red Teaming e nello sviluppo di Cobalt Strike, non sono riuscito a capire come utilizzare il profilo Malleable C2 di Cobalt Strike per supportare l'ottenimento costante di nuovi Token di Accesso e l'invio di questi Token di Accesso mutevoli nell'intestazione Authorization delle richieste HTTPS del beacon. Da quando ho rilasciato il teaser su Twitter, Joe Vest, Alfie Champion e altre rockstar della comunità mi hanno dato indicazioni epiche su come farlo funzionare con Cobalt Strike! Spero che ci sarà un seguito di Cobalt Strike per questo progetto in futuro ;)

graph.microsoft.com.WinInet per le comunicazioni HTTPS.cmd, sleep, exitcmd: Prende la stringa successiva al metacomando e la esegue generando un processo figlio.sleep: Prende la parola successiva al metacomando e modifica il periodo di sleep dell'impianto al valore fornito (in millisecondi).exit: Termina/uccide il processo host.cmd, l'impianto crea un processo figlio per eseguire il comando, il processo figlio scrive il suo output standard in un pipe, il processo figlio termina dopo l'esecuzione del comando, e il processo host dell'impianto legge l'output del processo figlio tramite il 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[] all'interno del file azureOutlookC2.c.# Importa il modulo TokenTactics nella sessione PowerShell
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# Avvia una richiesta di Device Code phish per ottenere un 'user_code'
PS C:\Users\boku\> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code da TokenTactics e accedi con l'utente della casella di posta C2.char refreshToken[] all'interno del file azureOutlookC2.c.void main() {
// Variables
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^Inserisci qui il tuo refresh token e compila
azureOutlookC2.c.# Compila con 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 su un dispositivo Windows.outlook.office.com e controlla il dispositivo Windows che esegue l'impianto dalla tua casella di posta.