
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!
| Mitwirkende | Bemerkenswerte Beiträge | |
|---|---|---|
| Bobby Cooke | @0xBoku | Projekt-Autor und -Betreuer |
| Santiago Pecin | @s4ntiago_p | Wesentliche Verbesserungen am Reflective Loader |
| Chris Spehn | @ConsciousHacker | Aggressor-Scripting |
| Joshua Magri | @passthehashbrwn | IAT-Hooking |
| Dylan Tran | @d_tranman | Spoofing des Reflective Call Stacks |
| James Yeung | @5cript1diot | Indirekte Systemaufrufe |
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.
NtProtectVirtualMemory durchgeführtobfuscate "true" mit eigener UDRL-Aggressor-Skript-Implementierung.0x1000 Bytes sind Nullen.XGetProcAddress zum Auflösen von Symbolen
Kernel32.GetProcAddressxLoadLibrary zum Auflösen der DLL-Basisadresse und zum Laden von DLLs
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaScript Console, 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 zu mappenKernel32.LoadLibraryExA ist DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX- oder RWX-Speicher im Heap.Kernel32.CreateFileMappingA und Kernel32.MapViewOfFile werden aufgerufen, um Speicher für die virtuelle Beacon-DLL zu allozieren.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll erkennt diese Systemaufrufe nicht.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 werden über die BokuLoader-Implementierung unterstützt |
module_x64 | string (DLL-Name) | Wird über die BokuLoader-Implementierung unterstützt. Es gelten dieselben DLL-Stomping-Anforderungen wie bei der CS-Implementierung |
obfuscate | true/false | 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 |
checksum | number | Experimentell. BokuLoader.cna-Aggressor-Skript-Modifikation |
compile_time | Datums-/Zeit-String | Experimentell. BokuLoader.cna-Aggressor-Skript-Modifikation |
image_size_x64 | Dezimalwert | 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 |