
Azure Outlook Command & Control (C2) - Steuern Sie ein kompromittiertes Windows-Gerät remote von Ihrem Outlook-Postfach aus. Bedrohungs-Emulationstool für die nordkoreanische APT InkySquid / ScarCruft / APT37. TTP: Verwenden Sie die Microsoft Graph API für C2-Operationen.
Azure Outlook Command & Control, das die Microsoft Graph API für C2-Kommunikation und Datenernte nutzt.
Steuern Sie ein kompromittiertes Windows-Gerät remote von Ihrem Outlook-Postfach aus.
Elastic Security Labs hat aktive Angriffe in freier Wildbahn entdeckt, die SIESTAGRAPH verwenden. SIESTAGRAPH interagiert mit der Microsoft GraphAPI für Befehls- und Kontrollzwecke unter Verwendung von Outlook und OneDrive. Sehen Sie sich unten ihre großartigen Malware-Analyse-Blogs zur Azure Outlook C2-Kommunikation an.


Wenn Sie Informationen über ähnliche Projekte, CTI-Informationen über diese TTP (Taktik, Technik und Verfahren), die von APT-/Ransomware-Gruppen in freier Wildbahn eingesetzt wird, Verteidigungstipps, Empfehlungen für Red Teamer, die an Azure C2-Bedrohungsemulation interessiert sind, oder andere Informationen haben, die eine gute Ergänzung zu diesem Blog/Readme wären, kontaktieren Sie mich bitte oder reichen Sie einen Pull Request ein. Vielen Dank!
Dieses Projekt besteht aus einem Implantat, das Beacon-Signale an ein vom Angreifer kontrolliertes Azure Outlook-Postfach sendet, das als Command & Control (C2) fungiert und das kompromittierte Gerät fernsteuert. Ein Azure-Refresh-Token für das C2-Postfach des Angreifers wird während der Kompilierung fest im Implantat kodiert. Bei Ausführung auf einem Windows-Gerät greift das Implantat über die Microsoft Graph API auf den Entwurfspostfach des Angreifers zu. Das Implantat liest Befehlsanweisungen aus dem Entwurfspostfach des Angreifers, führt die Anweisungen lokal auf dem kompromittierten Windows-Gerät aus und gibt die Befehlsausgabe an den Angreifer zurück, indem es neue Entwurfsnachrichten erstellt. Das Implantat wiederholt dieses Verhalten der Fernsteuerung aus dem Postfach des Angreifers, bis der Hostprozess des Implantats beendet wird.
Ich habe vor etwa einem halben Jahr mit Red Teaming im SpiderLabs Red Team bei Trustwave begonnen. Während eines Engagements hatte ich die Ehre, mit dem legendären Stephan Borosh (rvrsh3ll|@424f424f) zusammenzuarbeiten. Steve und Matt Kingstone brachten mir alles über Azure Domain Fronting bei, und ich war überwältigt, dass Command & Control-Traffic über HTTPS mit legitimen Domains wie ajax.microsoft.com exfiltriert werden konnte. Es verwendet sogar Microsofts TLS-Zertifikate! Leider begann ich mit Red Teaming genau zu der Zeit, als Domain Fronting auf Azure starb. Obwohl Domain Fronting auf Azure tot war, gab es dennoch viele großartige Red-Team-Techniken, die mit Azure möglich waren.
Steve führte mich in Azure Device Code Phishing ein. Während dieser Zeit tauchte ich tief in Azure und die Microsoft Graph API für Red Teaming ein. Wir erstellten das Tool TokenTactics, das auf der großartigen Arbeit von Dr. Nestori Syynimaa (@DrAzureAD) basiert, und schrieben den Blog The Art of the Device Code Phish, falls Sie an unserer Methodik interessiert sind.
Während der Erstellung von TokenTactics und der Experimente mit der MS Graph API entdeckte ich, dass es möglich ist, die Microsoft Graph API als C2-Kanal zu verwenden. Es gibt viele verschiedene Möglichkeiten, die MS Graph API als C2-Kanal zu nutzen, und ich bin nicht die einzige Person (auch nicht die erste), die dies entdeckt hat. VX-Underground, erstellt von @smelly__vx – dem Schöpfer/Herausgeber der HellsGate-Technik – veröffentlichte letzten Monat Informationen, dass die nordkoreanische Advanced Persistent Threat (APT)-Gruppe "InkySquid" (auch bekannt als ScarCruft und APT37) die Microsoft Graph API für C2-Operationen nutzt. Nachdem ich einen Teaser dieses Projekts auf Twitter und LinkedIn veröffentlicht hatte, kommentierten mehrere DFIR-Profis, dass diese Technik der Nutzung der Microsoft Graph API für C2-Operationen von Ransomware-Gruppen seit Monaten aktiv in freier Wildbahn eingesetzt wird.
Während des Red-Team-Engagements versuchte ich, Cobalt Strike mit der MS Graph API als C2-Kanal zum Laufen zu bringen. Leider scheiterte ich, aber das bleibt ein zukünftiges Ziel. Das Problem, mit dem ich bei der Integration mit Cobalt Strike konfrontiert bin, ist, dass die MS Graph API zwei Token für die Kommunikation verwendet. Das erste Token ist das Refresh-Token, das bis zu 90 Tage gültig sein kann. Das zweite Token, das Access-Token, ist ein temporäres Token, das etwa eine Stunde gültig ist. Die direkte Kommunikation mit der MS Graph API erfolgt durch Authentifizierung mit dem Access-Token. Sobald ein Access-Token abläuft, kann das Refresh-Token verwendet werden, um neue Access-Token zu erhalten. Da ich noch neu im Red Teaming und in der Cobalt-Strike-Entwicklung bin, konnte ich nicht herausfinden, wie ich das Malleable-C2-Profil von Cobalt Strike nutzen kann, um ständig neue Access-Token zu erhalten und diese wechselnden Access-Token im Authorization-Header der HTTPS-Beacon-Anfragen zu senden. Seit der Veröffentlichung des Teasers auf Twitter haben mir Joe Vest, Alfie Champion und andere Rockstars der Community eine epochale Richtung gegeben, wie ich das mit Cobalt Strike umsetzen kann! Hoffentlich gibt es in Zukunft ein Cobalt-Strike-Follow-up zu diesem Projekt ;)

graph.microsoft.com.WinInet Dynamic-Link Library für HTTPS-Kommunikation.cmd, sleep, exitcmd: Nimmt die folgende Zeichenfolge nach dem Metabefehl und führt sie durch Erstellen eines untergeordneten Prozesses aus.sleep: Nimmt das folgende Wort nach dem Metabefehl und ändert die Schlafzeit des Implantats auf den angegebenen Wert (in Millisekunden).exit: Beendet/tötet den Hostprozess.cmd ist, erstellt das Implantat einen untergeordneten Prozess zur Ausführung des Befehls; der untergeordnete Prozess schreibt seine Standardausgabe in eine Pipe; der untergeordnete Prozess wird nach Befehlsausführung beendet, und der Host-Implantat-Prozess liest die Ausgabe des untergeordneten Prozesses über die 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[] in der Datei azureOutlookC2.c hinzu.# Import the TokenTactics module into the PowerShell session
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# Start a Device Code phish request to get a 'user_code'
PS C:\Users\boku\> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code von TokenTactics ein und melden Sie sich mit dem C2-Postfach-Benutzer an.char refreshToken[] in der Datei azureOutlookC2.c hinzu.void main() {
// Variables
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^Put your refresh token here and compile
azureOutlookC2.c.# Compile with 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 auf einem Windows-Gerät aus.outlook.office.com an und steuern Sie das Windows-Gerät, auf dem das Implantat läuft, von Ihrem Postfach aus.