
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!
| Mitwirkender | Bemerkenswerte Beiträge | |
|---|---|---|
| Bobby Cooke | @0xBoku | Projekt ursprünglicher Autor und Betreuer |
| Santiago Pecin | @s4ntiago_p | Wesentliche Verbesserungen des Reflective Loaders |
| Chris Spehn | @ConsciousHacker | Aggressor-Scripting |
| Joshua Magri | @passthehashbrwn | IAT-Hooking |
| Dylan Tran | @d_tranman | Reflective Call-Stack-Spoofing |
| James Yeung | @5cript1diot | Indirekte Systemaufrufe |
Der integrierte Cobalt Strike-Reflective-Loader ist robust und unterstützt alle Malleable-PE-Evasion-Funktionen, die Cobalt Strike bietet. Der größte Nachteil bei der Verwendung eines benutzerdefinierten UDRL besteht darin, dass Malleable-PE-Evasion-Funktionen möglicherweise nicht out-of-the-box unterstützt werden.
Das Ziel des öffentlichen BokuLoader-Projekts ist es, Red Teams bei der Erstellung eines eigenen Cobalt-Strike-UDRL zu unterstützen. Das Projekt soll alle sinnvollen CS-Malleable-PE-Evasion-Funktionen unterstützen. Einige Evasion-Funktionen nutzen die CS-Integration, andere wurden komplett neu erstellt, und einige werden nicht unterstützt.
Bevor Sie dieses Projekt in irgendeiner Form verwenden, sollten Sie testen, ob die Evasion-Funktionen wie erwartet funktionieren. Zwischen dem C-Code und dem Aggressor-Skript können unterschiedliche Betriebssystemversionen, Compiler und Java zu unterschiedlichen Ergebnissen führen.
NtProtectVirtualMemory durchgeführt.obfuscate "true" mit benutzerdefinierter UDRL-Aggressor-Skript-Implementierung.0x1000 Bytes sind Nullen.XGetProcAddress zur Auflösung von Symbolen
Kernel32.GetProcAddressxLoadLibrary zur Auflösung der Basisadresse von DLLs und zum Laden von DLLs
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList bezogen.Kernel32.LoadLibraryAmakeBokuLoader.cnaSkript-Konsole, um sicherzustellen, dass BokuLoader in den Beacon-Build implementiert wurdeRAW-Beacons funktioniert sofort. Bei Verwendung des Artifact-Kits für den Beacon-Loader muss die Variable stagesize größer als der Standardwert sein.
| Ursprünglicher Cobalt-Strike-String | BokuLoader-Cobalt-Strike-String |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA wird aufgerufen, um die DLL von der Festplatte abzubilden.Kernel32.LoadLibraryExA ist DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX- oder RWX-Speicher wird im Heap vorhanden sein, wenn kein Sleepmask-Kit verwendet wird.Kernel32.CreateFileMappingA & Kernel32.MapViewOfFile werden aufgerufen, um Speicher für die virtuelle Beacon-DLL zuzuweisen.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll wird diese Systemaufrufe nicht erkennen.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 in seinem ausführbaren Speicher.0x1000 Bytes der virtuellen Beacon-DLL sind Nullen.| Befehl | Option(en) | Unterstützt |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Alle unterstützt durch BokuLoader-Implementierung |
module_x64 | string (DLL-Name) | Unterstützt durch BokuLoader-Implementierung. Die gleichen DLL-Stomping-Anforderungen wie bei der CS-Implementierung gelten |
obfuscate | true/false | HTTP/S-Beacons werden durch 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 | Unterstützt durch BokuLoader-Implementierung |
cleanup | true | Unterstützt durch CS-Integration |
userwx | true/false | Unterstützt durch BokuLoader-Implementierung |
sleep_mask | (true/false) oder (Sleepmask Kit+true) | Unterstützt. Bei Verwendung des Standard-„sleepmask true“ (ohne Sleepmask Kit) setze „userwx true“. Bei Verwendung des Sleepmask Kits, das RX-Beacon.text-Speicher unterstützt (src47/Ekko), setze „sleepmask true“ && „userwx false“. |
magic_mz_x64 | 4-Zeichen-String | Unterstützt durch CS-Integration |
magic_pe | 2-Zeichen-String | Unterstützt durch CS-Integration |
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 keine Beacon-DLL-Header. Die ersten 0x1000 Bytes der virtuellen Beacon-DLL sind 0x00 |
checksum | number | Experimentell. BokuLoader.cna Aggressor-Skript-Modifikation |
compile_time | date-time string | Experimentell. BokuLoader.cna Aggressor-Skript-Modifikation |
image_size_x64 | decimal value | Nicht unterstützt |
name | string | Experimentell. BokuLoader.cna Aggressor-Skript-Modifikation |
rich_header | escaped hex string | Experimentell. BokuLoader.cna Aggressor-Skript-Modifikation |
stringw | string | Nicht unterstützt |
string | string | Nicht unterstützt |