
Un PoC UDRL per Cobalt Strike realizzato con Crystal Palace che combina la tecnica di streaming delle pagine di Raphael Mudge con un gate di chiamata modulare (Draugr)
Eden loader è un PoC UDRL per Cobalt Strike costruito con Crystal Palace che combina la tecnica di page streaming di Raphael Mudge con un call gate modulare (attualmente una versione PIC del callgate BOF Sleepmask-VS Draugr).
L'obiettivo di Eden loader è:
Per maggiori informazioni su Eden loader, consulta il blog di accompagnamento per ulteriori dettagli.
Nota: Lo scopo di Eden è dimostrare l'idea di usare Crystal Palace per combinare diverse 'unità di esecuzione' (cioè capabilities) per creare loader personalizzati. Non è inteso come un loader 'evasivo' completo e quindi manca di alcune caratteristiche OPSEC di base per progettazione. Ad esempio, usa memoria RWX e non traccia/maschera la memoria heap di Beacon (e quindi è vulnerabile a firme YARA come questa).
Nota: Questa guida rapida presuppone che tu abbia scaricato/compilato Crystal Palace e completato i seguenti passaggi per configurare il tuo ambiente di sviluppo.
stage {
set sleep_mask "false";
}
WSL nella root del repository e compila Eden loader: make clean; make.crystalpalace.jar nella directory del client Cobalt Strike.eden.cna nel client Cobalt Strike.[14:55:55] [*] Generating Payload: HTTP -- Type: HTTP -- Arch: x64 -- Exit Function: Thread -- System Call: None -- HTTP Library: wininet
[14:55:56] [EDEN] Parsing C:\Users\wb\Desktop\eden\eden.spec...
[14:55:56] [EDEN] Applying eden ldr spec...
[14:55:56] [EDEN] Payload Size: 387060 bytes
[14:55:56] [*] Using user modified reflective DLL! DLLName=resources/beacon.x64.rl0k.dll Arch=x64
Nota: Eden supporta Beacon HTTP(S), DNS e Pivot.
Una limitazione di Crystal Palace al momento del rilascio è che attualmente supporta solo file oggetto compilati con mingw. Se provi a usare un COFF compilato con MSVC o Clang, di solito otterrai errori di rilocazione. Questo può essere frustrante poiché mingw non supporta direttamente i file pdb e quindi può essere difficile eseguire il debug quando si scrivono tecniche Windows complesse. Tuttavia, puoi aggiungere l'opzione -g al tuo Makefile per incorporare informazioni di debug nelle build eseguibili. Ciò rende possibile scorrere il codice in WinDbg. Per maggiori informazioni su questo processo, si consiglia di leggere il seguente blog di Rastamouse.
Questo repository utilizza l'approccio sopra per costruire una build di debug di Draugr (draugr.x64.exe) e del codice di page streaming (guardexec.x64.exe) per impostazione predefinita. La build di debug di Draugr non ha dipendenze e quindi verrà compilata immediatamente, tuttavia se desideri scorrere/debuggare il codice di page streaming/hook IAT dovrai seguire i passaggi seguenti:
1. Esporta Beacon senza loader:
debug/export_beacon_with_no_ldr.cna nel tuo client CS ed esporta un Beacon raw x64 (HTTP) senza stadi nella directory /eden/debug/. Questo esporterà una DLL Beacon senza un loader riflessivo che possiamo usare per mockare il punto di ingresso guardexec.$ xxd -i ./beacon_x64.bin > debug_beacon.h2. Esporta lo stub PIC di Draugr da Crystal Palace:
$ ./piclink /<path>/eden/debug/draugr.spec x64 /<path>/eden/debug/draugr.bin. Questo farà sì che Crystal Palace estragga solo lo stub PIC di Draugr che possiamo usare per mockare il punto di ingresso di guardexec.$ xxd -i ./draugr.bin > debug_druagr.h3. Inizia il debug in WinDbg
make clean;makeWinDbg e seleziona l'eseguibile da avviare (/eden/bin/draugr.exe o /eden/bin/guardexec.exe)Open source file e scegli il file .c pertinente (ad esempio guardexec.c se stai debuggando il codice di page streaming).Nota: Non esiste un eseguibile di debug per il loader poiché non c'è un modo ovvio per far esportare a Crystal Palace payload di debug per cose come DLL crittografate e le loro chiavi. Quindi, diventa non banale passare buffer PIC 'crittografati' mockati.
Eden loader è principalmente inteso per dimostrare la potenza di Crystal Palace combinando diverse 'capabilities' per creare un loader innovativo. Questa idea potrebbe essere portata molto oltre quanto fatto in questo repo (ad esempio un loader PIC 'statico' completamente personalizzabile tramite moduli COFF (guardrail, callgate, offuscamento del sonno, ecc.)).
Eden loader usa una versione PIC di Draugr esplicitamente in modo da poter spoofare ogni chiamata del ciclo di vita di Beacon (ad esempio le chiamate VirtualAlloc / LoadLibrary usate durante il processo di caricamento riflessivo). In alcuni casi, questo potrebbe essere eccessivo (ad esempio un EDR non si preoccupa di chiamate non supportate a LoadLibrary ecc.) nel qual caso potrebbe essere modificato per usare un equivalente PICO (=='BOF') di Draugr che è molto più semplice.
Eden loader tenta deliberatamente di mantenere il 'Callgate' disaccoppiato dal loader. Questo è di proposito per la modularità, poiché l'idea è che si possano scambiare BeaconGate/callgate BOF. Quindi, il codice del callgate Draugr è tutto contenuto nel suo file oggetto. Sostituendolo con un'altra 'capability' si potrebbero cambiare drasticamente le TTP di Eden.
Eden loader non utilizza le funzionalità più recenti di Crystal Palace per scelta. Ad esempio, mergelib può essere usato con la libreria condivisa di Crystal Palace, LibTCG. Tuttavia, nota che questo significa perdere la capacità di debuggare il codice.