
Beaconing HTTPS di Cobalt Strike tramite l'API Microsoft Graph

Blog di rilascio: GraphStrike: Utilizzare Microsoft Graph API per far scomparire il traffico Beacon
Blog dello sviluppatore: GraphStrike: Anatomia dello sviluppo di strumenti offensivi
GraphStrike è una suite di strumenti che consente all'HTTPS Beacon di Cobalt Strike di utilizzare Microsoft Graph API per le comunicazioni C2. Tutto il traffico Beacon verrà trasmesso tramite due file creati nel sito SharePoint dell'attaccante, e tutte le comunicazioni dal Beacon instraderanno verso https://graph.microsoft.com:

GraphStrike include un provisioner per creare le risorse Azure necessarie per Cobalt Strike HTTPS tramite Graph API:

GraphStrike non crea asset a pagamento in Azure, quindi l'utilizzo di GraphStrike o del suo provisioner non comporta costi aggiuntivi.
Sono state rilasciate informazioni di threat intelligence riguardanti diversi APT che sfruttano Microsoft Graph API e altri servizi Microsoft per campagne offensive:
Gli attori delle minacce continuano a utilizzare servizi legittimi per scopi illegittimi. Utilizzare un dominio di alta reputazione come graph.microsoft.com per le comunicazioni C2 è estremamente efficace e desiderabile, ma spesso complicato e proibitivo dal punto di vista del tempo e dello sforzo. La maggior parte dei framework C2 non supporta metodi per recuperare o ruotare i token di accesso, il che li rende incapaci di utilizzare Graph API. Questo può rendere difficile per i red team replicare queste tecniche e priva i difensori dell'opportunità di osservare e sviluppare firme per questo tipo di attività. GraphStrike cerca di alleviare questo onere e fornire un processo affidabile e ripetibile per sfruttare Microsoft Graph API, mantenendo al contempo la familiarità e l'affidabilità dell'esperienza utente di Cobalt Strike.
Tecnicamente no. Avendo già costruito in precedenza un vero External C2 utilizzando Graph API (che inviava il traffico Beacon come messaggi di Microsoft Teams), l'onere di dover sviluppare, mantenere e integrare un implant personalizzato che soddisfi le specifiche di External C2 e faccia il lavoro è fin troppo familiare. GraphStrike invece sfrutta un User Defined Reflective Loader (UDRL) open source chiamato AceLdr di Kyle Avery (adattato come 'GraphLdr' in questo progetto) per agganciare le chiamate alla libreria WinINet che Beacon normalmente effettua e manipolarle secondo necessità per utilizzare Graph API. Non c'è un implant personalizzato o un processo aggiuntivo di cui parlare, solo il processo Beacon con un paio di API Windows agganciate. Sul lato server c'è un programma Python3 che traduce il traffico del Cobalt Strike Team Server in traffico Graph API e viceversa.
GraphStrike supporta quasi tutte le normali attività di Cobalt Strike, tra cui:
Questo include anche l'integrazione in GraphStrike dei comandi sleep, exit e remove per far corrispondere i tempi di sleep del server GraphStrike con Beacon e cancellare i file in SharePoint quando un Beacon viene chiuso o rimosso.
GraphStrike incorpora inoltre tutte le funzionalità e caratteristiche dell'AceLdr originale, con alcune API aggiuntive create per utilizzare anche lo spoofing dello stack di chiamate.
GraphStrike richiede quanto segue prima di iniziare:
Prendere nota di quanto segue prima di procedere con il processo di configurazione:
1. Alcuni componenti utilizzano percorsi relativi per localizzare altre risorse. Si prega di cambiare directory come indicato di seguito.
2. Il profilo di Cobalt Strike può essere modificato SOLO PRIMA del passaggio 5 nel processo di configurazione seguenteNota #1.
sudo setup/install_dependencies.sh per installare le dipendenze di sistema richieste.python3 -m venv virtual e poi source virtual/bin/activate per creare e quindi entrare nell'ambiente virtuale.pip3 install -r requirements.txt../provisioner.py new e completare il processo di configurazione.graph.microsoft.com come campi HTTPS Hosts e HTTPS Host(Stager)../GraphStrike.py.A causa delle dimensioni di GraphLdr, gli utenti di Artifact Kit dovranno ricompilarlo con opzioni specifiche affinché GraphStrike sia compatibile con i payload generati da Artifact Kit. Nello specifico, i campi 'Stage Size' e 'RDLL Size' devono essere specificati per utilizzare la dimensione RDLL di 100K. Di seguito vengono forniti due esempi di sintassi funzionante:
./build.sh pipe VirtualAlloc 505029 100 false false none /opt/cobaltstrike/artifacts
./build.sh peek HeapAlloc 492376 100 false true indirect /opt/cobaltstrike/artifacts