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

Un prototipo Caricatore Riflessivo Definibile dall'Utente (UDRL) che mira a ricreare, integrare e potenziare le funzionalità di evasione di Cobalt Strike!
| Contributore | Contributi Notevoli | |
|---|---|---|
| Bobby Cooke | @0xBoku | Autore originale e manutentore del progetto |
| Santiago Pecin | @s4ntiago_p | Miglioramenti significativi al Caricatore Riflessivo |
| Chris Spehn | @ConsciousHacker | Scripting Aggressor |
| Joshua Magri | @passthehashbrwn | Hooking IAT |
| Dylan Tran | @d_tranman | Spoofing dello Stack di Chiamate Riflessivo |
| James Yeung | @5cript1diot | Chiamate di Sistema Indirette |
Il caricatore riflessivo integrato di Cobalt Strike è robusto e gestisce tutte le funzionalità di evasione PE Malleable che Cobalt Strike offre. Il principale svantaggio nell'utilizzare un UDRL personalizzato è che le funzionalità di evasione PE Malleable potrebbero essere supportate o meno così com'è.
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 PE Malleable di CS che ne valgano la pena. Alcune funzionalità di evasione sfruttano l'integrazione con CS, altre sono state ricreate completamente, e alcune non sono supportate.
Prima di utilizzare 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 potrebbe dare risultati diversi.
NtProtectVirtualMemoryobfuscate "true" con implementazione personalizzata dello script Aggressor per UDRL.0x1000 byte saranno nulli.XGetProcAddress per la risoluzione dei simboli
Kernel32.GetProcAddressxLoadLibrary per la risoluzione dell'indirizzo base della DLL e il caricamento della DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaConsole degli Script per assicurarti che BokuLoader sia stato implementato nella build del beaconRAW funziona subito. Quando si utilizza l'Artifact Kit per il caricatore del beacon, la variabile stagesize deve essere maggiore del predefinito.
| Stringa Originale di Cobalt Strike | Stringa di Cobalt Strike di BokuLoader |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA per mappare la DLL dal discoKernel32.LoadLibraryExA è DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX o RWX esisterà nell'heap se non viene utilizzato il kit sleepmask.Kernel32.CreateFileMappingA e Kernel32.MapViewOfFile per allocare memoria per la DLL beacon virtuale.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll non rileverà queste systemcall.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 nella sua memoria eseguibile.0x1000 byte della DLL beacon virtuale sono zeri.| Comando | Opzioni | Supportato |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Tutte supportate tramite implementazione BokuLoader |
module_x64 | string (Nome DLL) | Supportata tramite implementazione BokuLoader. Stessi requisiti di sovrascrittura DLL dell'implementazione CS |
obfuscate | true/false | Beacon HTTP/S supportati tramite implementazione BokuLoader. SMB/TCP attualmente non supportato per obfuscate true. Dettagli nell'issue. Accettiamo aiuto se puoi risolvere :) |
entry_point | RVA come numero decimale | Supportata tramite implementazione BokuLoader |
cleanup | true | Supportata tramite integrazione CS |
userwx | true/false | Supportata tramite implementazione BokuLoader |
sleep_mask | (true/false) or (Sleepmask Kit+true) | Supportata. Quando si utilizza il default "sleepmask true" (senza sleepmask kit) impostare "userwx true". Quando si utilizza sleepmask kit che supporta RX beacon.text memory (src47/Ekko) impostare "sleepmask true" && "userwx false". |
magic_mz_x64 | Stringa di 4 caratteri | Supportata tramite integrazione CS |
magic_pe | Stringa di 2 caratteri | Supportata tramite integrazione CS |
transform-x64 prepend | Stringa hex escape | Modifica dello script Aggressor BokuLoader.cna |
transform-x64 strrep | stringa stringa | Modifica dello script Aggressor BokuLoader.cna |
stomppe | true/false | Non supportata. BokuLoader non copia gli header della DLL beacon. I primi 0x1000 byte della DLL beacon 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 supportata |
name | stringa | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
rich_header | stringa hex escape | Sperimentale. Modifica dello script Aggressor BokuLoader.cna |
stringw | stringa | Non supportata |
string | stringa | Non supportata |