Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!
BokuLoader — Ein Proof-of-Concept Cobalt Strike Reflective Loader, der darauf abzielt, Cobalt Strikes Evasion-Funktionen nachzubilden, zu integrieren und zu verbessern! | Kitploit
Ein Proof-of-Concept Cobalt Strike Reflective Loader, der darauf abzielt, Cobalt Strikes Evasion-Funktionen nachzubilden, zu integrieren und zu verbessern!
Ein Proof-of-Concept User-Defined Reflective Loader (UDRL), der darauf abzielt, die Evasion-Funktionen von Cobalt Strike nachzubilden, zu integrieren und zu verbessern!
Der integrierte Reflective Loader von Cobalt Strike ist robust und unterstützt alle Malleable-PE-Evasion-Funktionen, die Cobalt Strike zu bieten hat. Der größte Nachteil bei der Verwendung eines eigenen UDRL ist, dass Malleable-PE-Evasion-Funktionen möglicherweise nicht ohne Weiteres unterstützt werden.
Das Ziel des öffentlichen BokuLoader-Projekts ist es, Red Teams bei der Erstellung eines eigenen, internen Cobalt-Strike-UDRL zu unterstützen. Das Projekt zielt darauf ab, alle sinnvollen CS-Malleable-PE-Evasion-Funktionen zu unterstützen. Einige Evasion-Funktionen nutzen die CS-Integration, andere wurden vollständig neu erstellt und einige werden nicht unterstützt.
Bevor du dieses Projekt in irgendeiner Form verwendest, solltest du gründlich testen, ob die Evasion-Funktionen wie vorgesehen funktionieren. Zwischen dem C-Code und dem Aggressor-Skript kann die Kompilierung mit verschiedenen Versionen von Betriebssystemen, Compilern und Java unterschiedliche Ergebnisse liefern.
Evasion-Funktionen
BokuLoader-spezifische Evasion-Funktionen
Spoofing des Reflective Call Stacks mittels synthetischer Frames.
HTTP/S-Beacons werden über die BokuLoader-Implementierung unterstützt. SMB/TCP wird derzeit für obfuscate true nicht unterstützt. Details im Issue. Hilfe wird angenommen, wenn du es beheben kannst :)
entry_point
RVA als Dezimalzahl
Wird über die BokuLoader-Implementierung unterstützt
cleanup
true
Wird über die CS-Integration unterstützt
userwx
true/false
Wird über die BokuLoader-Implementierung unterstützt
sleep_mask
(true/false) oder (Sleepmask-Kit+true)
Unterstützt. Wenn das Standard-"sleepmask true" (ohne Sleepmask-Kit) verwendet wird, setze "userwx true". Wenn ein Sleepmask-Kit verwendet wird, das RX-beacon.text-Speicher unterstützt (src47/Ekko), setze "sleepmask true" && "userwx false".
magic_mz_x64
4-Zeichen-String
Wird über die CS-Integration unterstützt
magic_pe
2-Zeichen-String
Wird über die CS-Integration unterstützt
transform-x64 prepend
escaped Hex-String
BokuLoader.cna-Aggressor-Skript-Modifikation
transform-x64 strrep
string string
BokuLoader.cna-Aggressor-Skript-Modifikation
stomppe
true/false
Nicht unterstützt. BokuLoader kopiert die Beacon-DLL-Header nicht. Die ersten 0x1000 Bytes der virtuellen Beacon-DLL sind 0x00
Importiere in Cobalt Strike das Aggressor-Skript BokuLoader.cna
Generiere den x64-Beacon (Attacks -> Packages -> Windows Executable (S))
Verwende die Script Console, um sicherzustellen, dass BokuLoader in den Beacon-Build implementiert wurde
Die x86-Option wird nicht unterstützt. Die x86-Binärdatei ist die ursprüngliche Reflective-Loader-Objektdatei.
Die Generierung von RAW-Beacons funktioniert sofort. Bei Verwendung des Artifact Kits für den Beacon-Loader muss die Variable stagesize größer als der Standardwert sein.
BokuLoader ändert einige häufig erkannte Strings in neue fest codierte Werte. Diese Strings können zur Signatur von BokuLoader verwendet werden:
Ursprünglicher Cobalt-Strike-String
BokuLoader-Cobalt-Strike-String
ReflectiveLoader
BokuLoader
Microsoft Base Cryptographic Provider v1.0
12367321236742382543232341241261363163151d
(admin)
(tomin)
beacon
bacons
Speicher-Allokatoren
DLL-Modul-Stomping
Kernel32.LoadLibraryExA wird aufgerufen, um die DLL von der Festplatte zu mappen
Das dritte Argument von Kernel32.LoadLibraryExA ist DONT_RESOLVE_DLL_REFERENCES (0x00000001)
das System ruft DllMain nicht auf
Die Adressen im LDR-PEB-Eintrag werden nicht aufgelöst, wie von MDSec hier beschrieben
Erkennbar durch Scannen des Prozessspeichers mit dem Tool pe-sieve
Heap-Allokation
Wenn das Sleepmask-Kit nicht verwendet wird, existiert ausführbarer RX- oder RWX-Speicher im Heap.
Gemappter Allokator
Kernel32.CreateFileMappingA und Kernel32.MapViewOfFile werden aufgerufen, um Speicher für die virtuelle Beacon-DLL zu allozieren.
Sleepmask-Erkennung
Wenn das Sleepmask-Kit verwendet wird, existieren Erkennungsmethoden für diese unabhängige Speicherallokation, wie von MDSec hier beschrieben
Indirekte Syscalls
BokuLoader ruft die folgenden NT-Systemaufrufe auf, um den Speicher des geladenen ausführbaren Beacons einzurichten: NtAllocateVirtualMemory, NtProtectVirtualMemory
Diese werden indirekt aus dem ausführbaren Speicher von BokuLoader aufgerufen.
Das Setzen von Userland-Hooks in ntdll.dll erkennt diese Systemaufrufe nicht.
Es ist möglicherweise möglich, Kernel-Callbacks mit einem Kernel-Treiber zu registrieren, um die oben genannten Systemaufrufe zu überwachen und ihre Verwendung zu erkennen.
BokuLoader selbst enthält die Assembly-Anweisungen mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 in seinem ausführbaren Speicher.
Header der virtuellen Beacon-DLL
Die ersten 0x1000 Bytes der virtuellen Beacon-DLL sind Nullen.
Quellcode verfügbar
Der Quellcode von BokuLoader ist im Repository enthalten und kann zur Erstellung von Speichersignaturen verwendet werden.
Wenn du weitere Erkennungshinweise hast, kannst du gerne einen Pull Request einreichen.