Bitte lesen Sie unseren vorherigen Beitrag zum Sammeln von Cobalt Strike Beacon-Implantaten. Wir werden auf diesen Informationen aufbauen, um die Konfigurationen aus den Beacons zu extrahieren.
In diesem Beitrag gehen wir durch die manuelle Analyse einer Cobalt Strike C2-Konfiguration aus einer binären Beacon-Nutzlast mit dem hervorragenden Cobalt Strike Configuration Extractor (CSCE). Wir behandeln auch die Aktivierung einiger neuerer Funktionen des Elastic Stack, die es Ihnen ermöglichen, dies in großem Umfang über alle Ihre überwachten Endpunkte hinweg zu tun, indem Sie die Beacons aus dem Speicher extrahieren.
Das Team von Blackberry hat ein umfangreiches Handbuch mit dem Titel "Finding Beacons in the Dark" (Registrierung erforderlich), das sich ausführlich mit den Konfigurationen von Cobalt Strike-Beacons befasst. Wir werden hier einige Felder in den Konfigurationen besprechen, aber wenn Sie daran interessiert sind, mehr über die Funktionsweise von Beacons zu erfahren, empfehlen wir Ihnen dringend, sich diese Ressource anzusehen.
Extraktor für die Konfiguration des Kobalt-Streichens
Der Cobalt Strike Configuration Extractor (CSCE) von Stroz Friedberg ist eine "Python-Bibliothek und eine Reihe von Skripten zum Extrahieren und Parsen von Konfigurationen aus Cobalt Strike Beacons".
Um das CSCE zu verwenden, erstellen wir eine virtuelle Python-Umgebung, aktivieren sie und installieren das CSCE-Python-Paket.
Einrichten des Cobalt Strike Configuration Extractors
$ python3 -m venv csce
$ source csce/bin/activate
(csce) $ pip3 install libcsce
...truncated...
Collecting libcsce
Using cached libcsce-0.1.0-py3-none-any.whl (24 kB)
Collecting pefile>=2019.4.18
...truncated...
Als Nächstes können wir die CSCE für die Beacon-Nutzlast ausführen, die wir aus dem Speicher extrahiert haben, um zu sehen, ob interessante Informationen gespeichert sind, die wir sammeln können (wir fügen das --pretty
-Flag hinzu, um die Ausgabe als JSON-Dokument leichter lesbar zu machen).
Anzeigen der atomaren Indikatoren der CS-Beacon-Konfiguration
(csce) $ csce --pretty beacon.exe
{
"beacontype": [
"HTTPS"
],
"sleeptime": 45000,
"jitter": 37,
"maxgetsize": 1403644,
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
"kill_date": "2021-12-24",
"server": {
"hostname": "clevelandclinic[.]cloud",
"port": 443,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4G...
...truncated...
Sofort können wir sehen, dass der Beacon HTTPS zur Kommunikation verwendet und dass die Domain clevelandclinic[.]cloud
ist. Dies gibt uns einen atomaren Indikator, den wir analysieren können. Wenn wir uns die Dokumentation zu Malleable Command and Control ansehen, können wir eine Beschreibung der Konfigurationsvariablen erhalten.
Als Beispiel können wir sehen, dass die sleeptime
450000
Millisekunden beträgt, wodurch der standardmäßige Beacon-Check-in von alle 60 Sekunden auf 450 Sekunden oder 7 1/2 Minuten geändert wird. Darüber hinaus sehen wir einen Jitter von 37
was bedeutet, dass es einen zufälligen Jitter von 37 % von 450000
Millisekunden (166,500
Millisekunden) gibt, sodass der Beacon-Check-in zwischen 283,000
und 450,000
Millisekunden (4,7 - 7,5 Minuten) liegen könnte.
Darüber hinaus wird das Feld publickey
vom Cobalt Strike Team Server verwendet, um die Kommunikation zwischen dem Server und dem Beacon zu verschlüsseln. Dies unterscheidet sich von normalen TLS-Zertifikaten, die beim Zugriff auf die C2-Domäne mit einem Browser oder Datenübertragungsbibliotheken wie cURL
verwendet werden. Dieses Feld ist von Bedeutung, da Team Server für jedes Beacon denselben öffentlichen Schlüssel verwendet, sodass dieses Feld beim Clustern von Beacons mit ihrer Perspektive Team Server nützlich ist, da Bedrohungsakteure häufig denselben Team Server für mehrere Kampagnen verwenden, sodass diese Daten aus der Konfiguration verwendet werden können, um Bedrohungsakteure mit mehreren Kampagnen und Infrastrukturen zu verknüpfen.
Wenn wir uns die Konfigurationsausgabe weiter ansehen, sehen wir einen weiteren interessanten Abschnitt rund um das process-inject
verschachtelte Feld, stub
:
Anzeigen des Felds process-inject.stub
(csce) $ csce --pretty beacon.exe
...truncated...
"process-inject": {
"allocator": "NtMapViewOfSection",
"execute": [
"CreateThread 'ntdll!RtlUserThreadStart'",
"CreateThread",
"NtQueueApcThread-s",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 17500,
"startrwx": false,
"stub": "IiuPJ9vfuo3dVZ7son6mSA==",
"transform-x86": [
"prepend '\\x90\\x90'"
],
...
Das Feld stub
enthält den Base64-codierten MD5-Datei-Hash des Cobalt Strike Java-Archivs. Um dies zu konvertieren, können wir erneut CyberChef verwenden, dieses Mal fügen Sie die Rezepte "Von Base64" und "Zu Hex" hinzu und stellen Sie sicher, dass Sie das "Trennzeichen" in "Keine" im Rezept "Zu Hex" ändern.
Jetzt, da wir den MD5-Wert des Java-Archivs (222b8f27dbdfba8ddd559eeca27ea648
) haben, können wir diesen mit Online-Datenbanken wie VirusTotal vergleichen, um zusätzliche Informationen zu erhalten, insbesondere den SHA256-Hash (7af9c759ac78da920395debb443b9007fdf51fa66a48f0fbdaafb30b00a8a858
).
Schließlich können wir den SHA256-Hash mit CobaltStrike verifizieren, um die Version des Java-Archivs zu identifizieren, indem wir zu https://verify.cobaltstrike.com gehen und nach dem Hash suchen.
Jetzt wissen wir, dass dieses Leuchtfeuer mit einer lizenzierten Version von Cobalt Strike 4.4 erstellt wurde.
Ein weiteres Feld aus der Konfiguration, das bei Clustering-Aktivitäten hilfreich ist, ist das Feld license_id
.
Anzeige des Wasserzeichens des Kobalt-Streichens
...truncated
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
...truncated...
Dies wird allgemein als Wasserzeichen bezeichnet und ist ein 9-stelliger Wert, der pro Lizenz eindeutig ist. Dieser Wert kann zwar geändert werden, kann aber weiterhin in Verbindung mit den Feldern process-inject.stub
und publickey
(siehe oben) verwendet werden, um Infrastruktur und Aktivitätsgruppen zu clustern.
Dies sind nur einige Felder, die verwendet werden können, um Aktivitäten mithilfe von Konfigurationen, die aus dem Cobalt Strike Beacon extrahiert wurden, zu identifizieren und zu clustern. Wenn Sie an einer sehr detaillierten Analyse der Konfiguration interessiert sind, empfehlen wir Ihnen, sich das Handbuch Finding Beacons in the Dark Cobalt Strike vom Team von Blackberry anzusehen.
Analyse in die Tat umsetzen
Um unser Analysten-Playbook für die Erfassung von Cobalt Strike Beacon-Nutzlasten, deren Konfigurationen und darin enthaltenen Metadaten zu testen; Wir können diese auf mehr Daten anwenden, um Aktivitätscluster zu identifizieren.
In der obigen Abbildung können wir Bedrohungsakteure basierend auf ihrer gemeinsamen Verwendung des öffentlichen Schlüssels der Beacon-Nutzlast gruppieren, der, wie oben beschrieben, pro Team Server eindeutig ist. Dies würde es uns ermöglichen, mehrere Beacon-Payload-Hashes, Infrastruktur und Kampagnen in einem einzigen Bedrohungsakteur zu gruppieren.
Wie immer können Sie mithilfe der atomaren Indikatoren, die aus den Beacon-Payload-Konfigurationen extrahiert werden (clevelandclinic[.]cloud
in unserem Beispiel), zusätzliche gemeinsam genutzte Infrastrukturen, Zielbranchen und Fähigkeiten von Bedrohungsakteuren identifizieren.
Diesmal mit voller Geschwindigkeit
Alle Schritte, die wir in dieser Version sowie in der vorherigen Version hervorgehoben haben, können mithilfe des Projekts Cobalt Strike Beacon Extraction automatisiert und in Elasticsearch geschrieben werden.
Zusammenfassung
In diesem Beitrag haben wir neue Funktionen im Elastic Stack vorgestellt, die zum Sammeln von Cobalt Strike Malleable C2-Beacon-Nutzlasten verwendet werden können. Darüber hinaus haben wir die Prozesse zum Erstellen von Fleet-Richtlinien zum Extrahieren von Beacon-Payloads aus dem Speicher und deren Konfigurationen behandelt.
Diese Flottenrichtlinien und -prozesse ermöglichen es Sicherheitsanalysten, Cobalt Strike-Beacon-Nutzlasten und deren Konfigurationen zu sammeln, um von Bedrohungsakteuren kontrollierte Infrastruktur- und Cluster-Aktivitäten zu identifizieren.
Artefakte
Beobachtbar | Typ | Hinweis -------------------------------------------------------------------|-------------|------------------------------------------ 697fddfc5195828777622236f2b133c0a24a6d0dc539ae7da41798c4456a3f89
| SHA256 | Cobalt Strike Temperable C2 Leuchtfeuer-Nutzlast 7475a6c08fa90e7af36fd7aa76be6e06b9e887bc0a6501914688a87a43ac7ac4
| SHA256 | Cobalt Strike Temperable C2 Leuchtfeuer-Nutzlast f9b38c422a89d73ebdab7c142c8920690ee3a746fc4eea9175d745183c946fc5
| SHA256 | Cobalt Strike Temperable C2 Leuchtfeuer-Nutzlast clevelandclinic[.]cloud
| Domain-Name | Cobalt Strike Temperable C2 Domain 104[.]197[.]142[.]19
| IPv4-ADDR | Cobalt Strike Temperable C2 IP-Adresse 192[.]64[.]119[.]19
| IPv4-ADDR | Cobalt Strike Temperable C2 IP-Adresse
Artefakte
Artefakte stehen auch im ECS- und STIX-Format in einem kombinierten Zip-Bundle zum Download zur Verfügung.