Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!
BokuLoader — Un proof-of-concept di Reflective Loader per Cobalt Strike che mira a ricreare, integrare e migliorare le funzionalità di evasione di Cobalt Strike! | Kitploit
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.
Funzionalità di Evasione
Funzionalità di Evasione Specifiche di BokuLoader
Spoofing dello stack di chiamate riflessivo tramite frame sintetici.
Codice personalizzato del caricatore riflessivo in ASM/C
Chiamate di sistema NT indirette tramite le tecniche HellsGate & HalosGate
Tutte le modifiche alla protezione della memoria per tutte le opzioni di allocazione vengono eseguite tramite chiamata di sistema indiretta a NtProtectVirtualMemory
obfuscate "true" con implementazione personalizzata dello script Aggressor per UDRL.
NOHEADERCOPY
Il caricatore non copierà gli header della DLL beacon grezza nella DLL beacon virtuale. I primi 0x1000 byte saranno nulli.
XGetProcAddress per la risoluzione dei simboli
Non utilizza Kernel32.GetProcAddress
xLoadLibrary per la risoluzione dell'indirizzo base della DLL e il caricamento della DLL
Per le DLL caricate, ottiene l'indirizzo base della DLL da TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
Non utilizza Kernel32.LoadLibraryA
Cifrario di Cesare per l'offuscamento delle stringhe
Dimensione UDRL 100k
I nomi delle DLL importate e le stringhe dei nomi delle voci di importazione vengono sovrascritti nella DLL beacon virtuale.
Funzionalità di Evasione PE Malleable Supportate
Comando
Opzioni
Supportato
allocator
HeapAlloc, MapViewOfFile, VirtualAlloc
Tutte supportate tramite implementazione BokuLoader
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
All'interno di Cobalt Strike, importa lo script Aggressor BokuLoader.cna
Genera il beacon x64 (Attacchi -> Pacchetti -> Eseguibile Windows (S))
Usa la Console degli Script per assicurarti che BokuLoader sia stato implementato nella build del beacon
Non supporta l'opzione x86. Il binario x86 è il file oggetto originale del Reflective Loader.
Generare beacon RAW funziona subito. Quando si utilizza l'Artifact Kit per il caricatore del beacon, la variabile stagesize deve essere maggiore del predefinito.
BokuLoader modifica alcune stringhe comunemente rilevate in nuovi valori codificati. Queste stringhe possono essere utilizzate per creare firme per BokuLoader:
Stringa Originale di Cobalt Strike
Stringa di Cobalt Strike di BokuLoader
ReflectiveLoader
BokuLoader
Microsoft Base Cryptographic Provider v1.0
12367321236742382543232341241261363163151d
(admin)
(tomin)
beacon
bacons
Allocatori di Memoria
Sovrascrittura del Modulo DLL
Viene chiamata Kernel32.LoadLibraryExA per mappare la DLL dal disco
Il 3° argomento di Kernel32.LoadLibraryExA è DONT_RESOLVE_DLL_REFERENCES (0x00000001)
il sistema non chiama DllMain
Non risolve gli indirizzi nella voce LDR del PEB come descritto da MDSec qui
Rilevabile scansione della memoria del processo con lo strumento pe-sieve
Allocazione Heap
Memoria eseguibile RX o RWX esisterà nell'heap se non viene utilizzato il kit sleepmask.
Allocatore Mappato
Vengono chiamate Kernel32.CreateFileMappingA e Kernel32.MapViewOfFile per allocare memoria per la DLL beacon virtuale.
Rilevamento Sleepmask
Se viene utilizzato il kit sleepmask, esistono metodi di rilevamento per questa allocazione di memoria indipendente come descritto da MDSec qui
Chiamate di Sistema Indirette
BokuLoader chiama le seguenti systemcall NT per configurare la memoria del beacon eseguibile caricato: NtAllocateVirtualMemory, NtProtectVirtualMemory
Vengono chiamate indirettamente dalla memoria eseguibile di BokuLoader.
Impostare hook in userland in ntdll.dll non rileverà queste systemcall.
Potrebbe essere possibile registrare callback del kernel utilizzando un driver del kernel per monitorare le systemcall di cui sopra e rilevarne l'uso.
BokuLoader stesso conterrà le istruzioni assembly mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 nella sua memoria eseguibile.
Header della DLL Beacon Virtuale
I primi 0x1000 byte della DLL beacon virtuale sono zeri.
Codice Sorgente Disponibile
Il codice sorgente di BokuLoader è fornito all'interno del repository e può essere utilizzato per creare firme di memoria.
Se hai ulteriori guide per il rilevamento, sentiti libero di contribuire inviando una pull request.