
Ein Cobalt Strike Scanner, der erkannte Team Server Beacons in ein JSON-Objekt abruft.
Ein Tool zur Jagd/Suche nach Cobalt Strike Beacons und zum "Reduzieren" ihrer Beacon-Konfiguration für die spätere Indizierung. Die Suche kann entweder umfassend und internetweit über Dienste wie SecurityTrails, Shodan oder ZoomEye oder über eine Liste von IPs erfolgen.
cat results.json | jq📺 Demo
Voraussetzungen: virtualenv und python3.8+
git clone https://github.com/splunk/melting-cobalt && cd melting-cobalt Klonen Sie das Projekt und wechseln Sie in das Projektverzeichnis.pip install virtualenv && virtualenv -p python3 venv && source venv/bin/activate && pip install -r requirements.txt Erstellen Sie eine Virtualenv und installieren Sie die Abhängigkeiten.Fahren Sie mit Konfiguration für SecurityTrails-, Shodan- oder ZoomEye-API-Schlüssel fort.
melting-cobalt.confKopieren Sie melting-cobalt.conf.example nach melting-cobalt.conf!
Stellen Sie sicher, dass Sie einen Token für einen der verfügbaren Anbieter setzen. Falls Sie einen für Ihr Konto erstellen müssen, folgen Sie [diesen](htt://need wiki page) Anweisungen.
Konfigurationsbeispiel:
[global]
output = results.json
# stores matches in JSON here
log_path = melting-cobalt.log
# Sets the log_path for the logging file
log_level = INFO
# Sets the log level for the logging
# Possible values: INFO, ERROR, VERBOSE
nse_script = grab_beacon_config.nse
# path to the nse script that rips down cobalt configs. This is specifically using https://github.com/whickey-r7/grab_beacon_config
searches = search.yml
# contains the different searches to run on each internet scanning service provider (eg shodan, zoomeye, security trails) when hunting for team servers.
shodan_token = TOKENHERE
# shodan token for searching
zoomeye_token = TOKENHERE
# zoomeye token for searching
securitytrails_token = TOKENHERE
# security trails token for searching
Um die standardmäßige Suche über verschiedene Anbieter hinweg zu ändern, passen Sie search.yml an. Die standardmäßigen Suchbeispiele von melting-cobalt finden Sie unten.
Ausführen:
python melting-cobalt.py
Befüllen Sie ips.txt mit potenziellen Cobalt Strike C2-IPs, eine pro Zeile, Beispiel:
1.1.1.1
2.2.2.2
3.3.3.3
Ausführen:
python melting-cobalt.py -i ips.txt
Wenn Sie Inspiration von Jägern benötigen, empfehlen wir:
usage: melting-cobalt.py [-h] [-c CONFIG] [-o OUTPUT] [-v] [-i INPUT]
scans for open cobalt strike team servers and grabs their beacon configs and write this as a json log to be analyzed by any analytic tools
like splunk, elastic, etc..
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
config file path
-o OUTPUT, --output OUTPUT
file to write to the results, defaults to results.json.log
-v, --version shows current melting-cobalt version
-i INPUT, --input INPUT
newline delimeted file of cobalt strike server ips to grab beacon configs from. example ips.txt
Die folgenden Suchabfragen werden standardmäßig bereitgestellt und weitere können für mehr Daten zu search.yml hinzugefügt werden.
'ssl.jarm:07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1'
'ssl.jarm:07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 port:"22, 80, 443, 444, 1234, 2000, 2222, 3000, 3780, 4000, 4443, 6379, 7443, 8443, 8080, 8081, 8082, 8087, 8088, 8099, 8089, 8090, 8181, 8888, 8889, 9443, 50050" HTTP/1.1 404 Not Found Content-Length: 0'
'product:"cobalt strike team server"'
Hinweis: erzeugt viele verrauschte Ergebnisse; planen Sie dies nicht wirklich ein, es sei denn, Sie möchten Ihre Lizenzguthaben verbrennen.
'ssl.cert.serial:146473198'
'SELECT address, ports.port FROM ips WHERE jarm = "07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1"'
'SELECT address, ports.port, isp.name_normalized, ports.port, address, asn.number, jarm, http.headers.raw FROM ips WHERE jarm = "07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1" OR jarm = "07d14d16d21d21d07c07d14d07d21d9b2f5869a6985368a9dec764186a9175" OR jarm = "2ad2ad16d2ad2ad22c42d42d00042d58c7162162b6a603d3d90a2b76865b53" AND http.headers.content_type = "text/plain" AND http.headers.raw = "content-length:0" AND ports.port IN (22, 80, 443, 444, 1234, 2000, 2222, 3000, 3780, 4000, 4443, 6379, 7443, 8443, 8080, 8081, 8082, 8087, 8088, 8099, 8089, 8090, 8181, 8888, 8889, 9443, 50050)'
Bitte nutzen Sie den GitHub Issue Tracker, um Fehler zu melden oder Funktionen anzufragen.
Wenn Sie Fragen haben oder Unterstützung benötigen, können Sie:
Copyright 2020 Splunk Inc.
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die Software unter der Lizenz "AS IS" (OHNE MÄNGELGEWÄHR) verteilt, OHNE IRGENDEINE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GARANTIE, einschließlich, aber nicht beschränkt auf die stillschweigende Garantie der MARKTGÄNGIGKEIT oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten zur Lizenz finden Sie in der Lizenz bezüglich der Genehmigungen und Beschränkungen.