
pyCobaltHound ist eine Aggressor-Skripterweiterung für Cobalt Strike, die eine tiefe Integration zwischen Cobalt Strike und Bloodhound bieten soll.
pyCobaltHound ist eine Aggressor-Skript-Erweiterung für Cobalt Strike, die eine tiefe Integration zwischen Cobalt Strike und Bloodhound ermöglicht.
pyCobaltHound unterstützt Red-Team-Operatoren, indem es:
BloodHound-Datenbank abfragt, um Eskalationspfade zu entdecken, die durch neu gesammelte Anmeldedaten eröffnet wurden.Um dies zu erreichen, verwendet pyCobaltHound einen Satz eingebauter Abfragen. Operatoren können auch eigene Abfragen hinzufügen/entfernen, um die Überwachungsfähigkeiten von pyCobaltHound anzupassen. Dies gibt ihnen die Flexibilität, pyCobaltHound während Einsätzen spontan an engagement-spezifische Ziele (Benutzer, Hosts usw.) anzupassen.
Um pyCobaltHound zu installieren, klonen Sie dieses Repository. Vergessen Sie nicht, das enthaltene Submodul ebenfalls zu klonen!
Sie können den folgenden Befehl verwenden:
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesStellen Sie sicher, dass die folgenden Abhängigkeiten korrekt installiert sind:
PyCobalt ist eine Python-API für Cobalt Strike. Sie stellt viele Aggressor-Funktionen zur Verfügung, die direkt aus Python verwendet werden können.
Stellen Sie sicher, dass Python3+ installiert ist. Obwohl PyCobalt möglicherweise auch unter macOS und Windows funktioniert, haben wir es nur unter Linux getestet.
Es gibt zwei Möglichkeiten, die PyCobalt Python-Bibliothek zu verwenden:
pyCobaltHound verfolgt diesen Ansatz, indem es den Suchpfad innerhalb des Python-Programms mit der Variablen sys.path setzt.PyCobalt Python-Bibliothek installieren. Führen Sie dazu python3 setup.py install aus. Sie müssen pycobalthound.py anpassen, um sicherzustellen, dass die installierte Bibliothek anstelle derjenigen im enthaltenen Repository verwendet wird.PyCobalt-Projekt in Zukunft gewartet wird. Tatsächlich war das letzte Update des Projekts die Integration der Änderungen aus Cobalt Strike 4.2. Da pyCobaltHound jedoch nur grundlegende Aggressor-Funktionen zur Schnittstelle mit Cobalt Strike und dessen Operator nutzt, ist dies für pyCobaltHound kein großes Problem.PyCobalt-Submodul ist ein von uns erstellter Fork. Wir kontrollieren das PyCobalt-Repository jedoch nicht.PyCobalt enthält einige Skript-Konsolen-Befehle zur Verwaltung der laufenden Python-Skripte. Wenn Sie Ihr Aggressor-Skript neu laden, sollten Sie die Python-Skripte zuerst explizit stoppen. Andernfalls laufen sie endlos weiter und tun nichts. Während der Entwicklung von pyCobaltHound haben wir festgestellt, dass dies auch zu undefiniertem Verhalten führen kann.
Das Neuladen von pyCobaltHound kann wie folgt erfolgen:
aggressor> python-stop-all`
[pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
[pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
aggressor> reload example.cna`
[pycobalt] Executing script /root/pycobalthound/pycobalthound.py
Damit PyCobalt richtig funktioniert, können Sie PyCobalt nur in einem Aggressor-Skript aufrufen. Beachten Sie dies, wenn Sie pyCobaltHound zusammen mit anderen Aggressor-Skripten verwenden möchten, die ebenfalls PyCobalt nutzen. Unser Ansatz besteht darin, ein Aggressor-Skript mit Aufrufen von python() und include() für jedes PyCobalt-basierte Tool zu haben.
notify2 ist – oder war – ein Paket zur Anzeige von Desktop-Benachrichtigungen unter Linux. Wie wir später sehen werden, unterstützt pyCobaltHound verschiedene Möglichkeiten, den Operator zu benachrichtigen. notify2 wird unter Linux verwendet, um Benachrichtigungen an den Benachrichtigungs-Daemon über D-Bus zu senden.
Um dies zu aktivieren, muss notify2 mit folgendem Befehl installiert werden:
pip install notify2
Die Verwendung von pyCobaltHound in Cobalt Strike ist so einfach wie das Importieren des pycobalthound.cna Aggressor-Skripts in Ihren Client. Sobald dies geschehen ist, sollte ein pyCobaltHound-Menü in Ihrer Cobalt Strike-Menüleiste erscheinen.

Das ursprüngliche Ziel von pyCobaltHound war es, Cobalt Strikes Anmeldeinformations-Cache (Ansicht > Anmeldeinformationen) auf neue Einträge zu überwachen. Dies geschieht durch Reaktion auf das on_credentials-Ereignis, das Cobalt Strike auslöst, wenn Änderungen am Anmeldeinformationsspeicher vorgenommen werden.
Wenn dieses Ereignis ausgelöst wird, führt pyCobaltHound Folgendes aus:
Cobalt Strike empfangenen Daten.BloodHound-Datenbank existieren.BloodHound-Datenbank für jede neue Entität mit sowohl integrierten als auch benutzerdefinierten Abfragen.Da all dies asynchron zum Haupt-Cobalt Strike-Client stattfindet, sollte dieser Prozess Ihre Benutzeroberfläche nicht blockieren, sodass Sie weiterarbeiten können, während pyCobaltHound im Hintergrund ermittelt.
pyCobaltHound verwendet separate Caches pro Teamserver, um Probleme bei der Verwendung mehrerer Teamserver zu vermeiden.
Manchmal gibt es Situationen, in denen Sie bestimmte Benutzer (oder den gesamten Anmeldeinformationsspeicher) erneut untersuchen möchten. Dies kann der Fall sein, wenn Sie neue Daten in die BloodHound-Datenbank hochgeladen haben.
Da pyCobaltHound bereits alle Entitäten in Ihrem Anmeldeinformationsspeicher untersucht (und daher zwischengespeichert) haben sollte, wird es diese ohne Operator-Eingriff nicht gegen diese neuen Daten auswerten.
Den Betreibern stehen zwei Methoden zur Verfügung, um zu steuern, welche Entitäten zwischengespeichert werden.
In Fällen, in Sie eine bestimmte Entität (oder mehrere) aus dem Cache entfernen möchten, können Sie dies im Anmeldeinformations-Viewer tun (Ansicht > Anmeldeinformationen). Wählen Sie einfach Ihre Ziel(e) aus und klicken Sie auf die Option Aus Cache entfernen im pyCobaltHound-Menüeintrag.

In Fällen, in denen Sie alle Entitäten aus dem Cache entfernen möchten, können Sie dies im Hauptmenü von pyCobaltHound tun (Cobalt Strike > pyCobaltHound > Cache löschen). Dies ist besonders hilfreich, wenn Sie Ihren gesamten Anmeldeinformationsspeicher neu bewerten möchten.