
CobaltWhispers ist ein Aggressor-Skript, das eine Sammlung von Beacon Object Files (BOF) für Cobalt Strike nutzt, um Prozessinjektion, Persistenz und mehr durchzuführen, wobei direkte Syscalls (SysWhispers2) genutzt werden, um EDR/AV zu umgehen.
Autor: @Cerbersec
CobaltWhispers ist ein Aggressor-Skript, das eine Sammlung von Beacon Object Files für Cobalt Strike verwendet, um Prozessinjektion, Persistenz und mehr durchzuführen, indem es direkte Syscalls nutzt, um EDR/AV zu umgehen.
CobaltWhispers nutzt SysWhispers2 und InlineWhispers2
CobaltWhispers basiert auf StayKit sowie Arbeiten von Hasherezade und Forrest Orr.
CobaltWhispers wurde im Rahmen eines Praktikums im Red Team von NVISO Security erstellt. Die zugehörigen Blogbeiträge finden Sie hier (Prozessinjektion) und hier (Kernel Karnage).
CobaltWhispers erfordert mehrere Werkzeuge zum Kompilieren:
apt install mingw-w64apt install makeJedes Projekt benötigt 3 Dateien, die von SysWhispers2 / InlineWhispers2 generiert werden, um zu funktionieren:
Diese Dateien können gemäß der InlineWhispers2-Dokumentation generiert werden, dies ist jedoch nicht die optimale Methode, da eine Menge ungenutzter Code enthalten sein wird:
git clone https://github.com/Sh0ckFR/InlineWhispers2 && cd InlineWhispers2
cd SysWhispers2/ && python3 syswhispers.py --preset all -o syscalls_all && cd ..
python3 InlineWhispers2.py
Verwenden Sie stattdessen SysWhispers2, um die Ausgabedateien nur für die erforderlichen APIs zu generieren, und stellen Sie sie dann manuell (oder per Skript) InlineWhispers2 zur Verfügung, das sie in das richtige Format konvertiert. Weitere Informationen finden Sie im mitgelieferten Makefile, oder verwenden Sie die mitgelieferten Dateien auf eigenes Risiko.
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| - | - | 5 | Nein | Erbt Berechtigungen vom übergeordneten Prozess |
Startet einen neuen angehaltenen Prozess mit aktiviertem Code Integrity Guard (CIG), um nicht von Microsoft signierte Binärdateien zu blockieren. Spooft den angegebenen übergeordneten Prozess. Die PID wird zurückgegeben.
Übergeordneter Prozess: Der Name des Prozesses, der als übergeordneter Prozess festgelegt werden soll
Speicherort der ausführbaren Datei: Vollständiger Pfad zur ausführbaren Datei auf der Festplatte, die zum Starten eines neuen Prozesses verwendet wird
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| Shellcode/Raw | PID | 5 | Nein | - |
Injiziert einen Payload in einen entfernten Prozess mithilfe von NtCreateThreadEx
Prozess-PID: Die Prozess-ID des entfernten Prozesses
Payload-Speicherort: Speicherort des Payloads in binärer Form auf der Festplatte (Bedingt | Optional)
Payload b64: Roher Shellcode im Base64-kodierten String-Format (Bedingt | Optional)
Listener: Listener, für den ein Payload generiert werden soll (Bedingt)
Ein Listener sollte angegeben werden, um einen Beacon-Payload zu generieren. Wenn ein manueller Payload gewünscht ist, sollte er über einen Pfad zur rohen Binärdatei auf der Festplatte oder als Base64-kodierten Shellcode bereitgestellt werden.
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| Shellcode/Raw | PID | 2 | Nein | Kann den Zielprozess möglicherweise zum Absturz bringen |
Injiziert einen Payload in einen entfernten Prozess mithilfe von NtQueueApcThread
Prozess-PID: Die Prozess-ID des entfernten Prozesses
Threads: Anzahl der Threads, zu denen ein APC-Aufruf hinzugefügt werden soll
Payload-Speicherort: Speicherort des Payloads in binärer Form auf der Festplatte (Bedingt | Optional)
Payload b64: Roher Shellcode im Base64-kodierten String-Format (Bedingt | Optional)
Listener: Listener, für den ein Payload generiert werden soll (Bedingt)
Ein Listener sollte angegeben werden, um einen Beacon-Payload zu generieren. Wenn ein manueller Payload gewünscht ist, sollte er über einen Pfad zur rohen Binärdatei auf der Festplatte oder als Base64-kodierten Shellcode bereitgestellt werden.
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| Shellcode/Raw | Surrogate-Prozess | 5 | Nein | - |
Injiziert einen Payload in einen Surrogate-Prozess mithilfe von NtMapViewOfSection
Übergeordneter Prozess: Der Name des Prozesses, der als übergeordneter Prozess festgelegt werden soll
Speicherort der ausführbaren Datei: Der Speicherort der ausführbaren Datei auf der Festplatte, die zum Starten eines neuen Prozesses verwendet wird
Payload-Speicherort: Speicherort des Payloads in binärer Form auf der Festplatte (Bedingt | Optional)
Payload b64: Roher Shellcode im Base64-kodierten String-Format (Bedingt | Optional)
Listener: Listener, für den ein Payload generiert werden soll (Bedingt)
Ein Listener sollte angegeben werden, um einen Beacon-Payload zu generieren. Wenn ein manueller Payload gewünscht ist, sollte er über einen Pfad zur rohen Binärdatei auf der Festplatte oder als Base64-kodierten Shellcode bereitgestellt werden.
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| PE | Surrogate-Prozess | 5 | Nein | Erfordert x64-PE-Payload |
Injiziert einen Payload in einen Surrogate-Prozess mithilfe transaktionaler Sektionen und gemappter Ansichten. Der entfernte Einstiegspunkt und die PEB werden aktualisiert, keine anomalen Speichersektionen oder Speicherberechtigungen. Weitere Informationen finden Sie hier.
Übergeordneter Prozess: Der Name des Prozesses, der als übergeordneter Prozess festgelegt werden soll
Speicherort der ausführbaren Datei: Der Speicherort der ausführbaren Datei auf der Festplatte, die zum Starten eines neuen Prozesses verwendet wird
Payload-Speicherort: Speicherort des x64-PE-Payloads auf der Festplatte (Bedingt | Optional)
Payload b64: x64-PE-Payload im Base64-kodierten String-Format (Bedingt | Optional)
Listener: Listener, für den ein Payload generiert werden soll (Bedingt)
Ein Listener sollte angegeben werden, um einen Beacon-Payload zu generieren. Wenn ein manueller Payload gewünscht ist, sollte er über einen Pfad zur x64-PE-Datei auf der Festplatte oder als Base64-kodierte x64-PE bereitgestellt werden.
DERZEIT NICHT IMPLEMENTIERT
| Payload-Typ | Ziel | Zuverlässigkeit (0-5) | Erweiterte Rechte | Bemerkungen |
|---|---|---|---|---|
| Positionsunabhängiger Shellcode (PIC) | Surrogate-Prozess | 5 | Ja | Erweiterte Berechtigungen sind erforderlich, um System-DLLs mit Schreibberechtigung zu öffnen |
Injiziert einen Payload in einen Surrogate-Prozess mithilfe transaktionaler Sektionen in Kombination mit DLL-Hollowing. Weitere Informationen finden Sie hier.