
Un proof-of-concept di Cobalt Strike Reflective Loader che mira a ricreare, integrare e potenziare le funzionalità di evasione di Cobalt Strike!

Una proof-of-concept di User-Defined Reflective Loader (UDRL) che mira a ricreare, integrare e potenziare le funzionalità di evasione di Cobalt Strike!
| Contributore | Contributi notevoli | |
|---|---|---|
| Bobby Cooke | @0xBoku | Autore originale e maintainer del progetto |
| Santiago Pecin | @s4ntiago_p | Miglioramenti principali del Reflective Loader |
| Chris Spehn | @ConsciousHacker | Scripting Aggressor |
| Joshua Magri | @passthehashbrwn | Hooking dell'IAT |
| Dylan Tran | @d_tranman | Spoofing del call stack riflessivo |
| James Yeung | @5cript1diot | Chiamate di sistema indirette |
Il reflective loader integrato di Cobalt Strike è robusto e gestisce tutte le funzionalità di evasione Malleable PE che Cobalt Strike offre. Il principale svantaggio nell'usare un UDRL personalizzato è che le funzionalità di evasione Malleable PE potrebbero essere o meno supportate out-of-the-box.
L'obiettivo del progetto pubblico BokuLoader è assistere i red team nella creazione del proprio UDRL interno per Cobalt Strike. Il progetto mira a supportare tutte le funzionalità di evasione Malleable PE di CS che valga la pena. Alcune funzionalità di evasione sfruttano l'integrazione con CS, altre sono state ricreate completamente e alcune non sono supportate.
Prima di usare questo progetto, in qualsiasi forma, dovresti testare adeguatamente che le funzionalità di evasione funzionino come previsto. Tra il codice C e lo script Aggressor, la compilazione con diverse versioni di sistemi operativi, compilatori e Java può restituire risultati diversi.
NtProtectVirtualMemoryobfuscate "true" con implementazione personalizzata dello script Aggressor UDRL.0x1000 byte saranno nulli.XGetProcAddress per la risoluzione dei simboli
Kernel32.GetProcAddressxLoadLibrary per risolvere l'indirizzo di base delle DLL e caricare le DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaScript Console per assicurarti che BokuLoader sia stato implementato nella build della beaconRAW funziona out of the box. Quando usi l'Artifact Kit per il loader della beacon, la variabile stagesize deve essere più grande del valore predefinito.
| Stringa originale di Cobalt Strike | Stringa BokuLoader di Cobalt Strike |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA viene chiamata per mappare la DLL dal discoKernel32.LoadLibraryExA è DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX o RWX sarà presente nell'heap se non viene usato il sleepmask kit.Kernel32.CreateFileMappingA e Kernel32.MapViewOfFile vengono chiamate per allocare memoria per la beacon DLL virtuale.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll non rileverà queste system call.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 all'interno della sua memoria eseguibile.0x1000 byte della beacon DLL virtuale sono zeri.| Comando | Opzione/i | Supportato |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Tutte supportate tramite l'implementazione di BokuLoader |
module_x64 | stringa (nome DLL) | Supportato tramite l'implementazione di BokuLoader. Valgono gli stessi requisiti di DLL stomping dell'implementazione CS |
obfuscate | true/false | Beacon HTTP/S supportati tramite l'implementazione di BokuLoader. SMB/TCP attualmente non supportato per obfuscate true. Dettagli nella issue. Accetto aiuto se puoi sistemarlo :) |
entry_point | RVA come numero decimale | Supportato tramite l'implementazione di BokuLoader |
cleanup | true | Supportato tramite l'integrazione con CS |
userwx | true/false | Supportato tramite l'implementazione di BokuLoader |
sleep_mask | (true/false) o (Sleepmask Kit+true) | Supportato. Quando usi il "sleepmask true" predefinito (senza sleepmask kit) imposta "userwx true". Quando usi il sleepmask kit che supporta la memoria RX beacon.text (src47/Ekko) imposta "sleepmask true" && "userwx false". |
magic_mz_x64 | stringa di 4 caratteri | Supportato tramite l'integrazione con CS |
magic_pe | stringa di 2 caratteri | Supportato tramite l'integrazione con CS |
transform-x64 prepend | stringa hex con escape | Modifica dello script Aggressor BokuLoader.cna |
transform-x64 strrep | stringa stringa | Modifica dello script Aggressor BokuLoader.cna |
stomppe | true/false | Non supportato. BokuLoader non copia le intestazioni della beacon DLL. I primi 0x1000 byte della beacon DLL virtuale sono 0x00 |
checksum | numero | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
compile_time | stringa data-ora | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
image_size_x64 | valore decimale | Non supportato |
name | stringa | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
rich_header | stringa hex con escape | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
stringw | stringa | Non supportato |
string | stringa | Non supportato |