
Linuxポストエクスプロイトフレームワーク。UEFIブートキットを備え、最新のLinuxシステム上でRustベースのカーネルモジュール型ルートキットを永続的かつステルス的にロードする。

Silversealは、UEFIブートキットが最新のLinuxシステム上でRustベースのカーネルモジュールルートキットを永続的かつステルス的にロードする能力を実証するLinuxポストエクスプロイトフレームワークです。このプロジェクトには以下が含まれます:

Rust-for-Linuxの外部モジュールビルドに必要なパッケージをインストールし、必要に応じてrustupをインストールし、デフォルトのツールチェーンをstableに切り替え、rust-srcを追加し、bindgen-cliをインストールし、現在実行中のカーネルがCONFIG_RUST=yを公開していない場合は警告を表示します。
./scripts/install_dependencies.sh
[!IMPORTANT]
WSLを使用している場合は、WSL 2をセットアップし、Ubuntuをインストールしてください。このスクリプトは、Rustを有効にしたカスタムWSL2カーネルをビルドし、モジュールVHDXを準備し、オプションで生成されたカーネルを指すWindows .wslconfigエントリを書き込むことができます。
./scripts/wsl_setup.sh
このスクリプトは、Ubuntuのビルド依存関係を自動的にインストールし、一致するMicrosoft WSL2カーネルソースをクローンし、CONFIG_RUSTを有効にし、LLVMでカーネルをビルドし、外部モジュールビルド用に/lib/modules/<release>/buildを設定します。
サポートされているオプションを確認するには:
./scripts/wsl_setup.sh --help
目的のターゲットカーネルに対してルートキットをビルドするには、ビルドマシン(WSLまたはネイティブLinuxマシンのいずれか)で以下のスクリプトを実行する必要があります:
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
このフローは、一致するlinux-headers-<kernel>およびlinux-lib-rust-<kernel>パッケージをインストールし、generic-kernelフローで使用されるUbuntuパッケージ版Rust 1.82ツールチェーンをインストールし、そのシンボリックリンクが壊れている場合は/usr/src/linux-headers-<kernel>/rustを修復し、その後使用する正確なmakeコマンドを表示します。
カーネルビルドシステムを使用してルートキットをビルドします。実際のモジュールビルドにはCargoを使用しないでください。
cd Silverseal/silverseal-rootkit
make
モジュールの成果物は、ビルド後にsilverseal-rootkit/target/にステージングされます。
WSLからUbuntu genericターゲットカーネル用にルートキットをビルドする:
cd Silverseal/silverseal-rootkit
make clean
PATH=/usr/bin:/bin:$PATH \
RUST_LIB_SRC=/usr/src/rustc-1.82.0/library \
make RUST_MIN_TOOLCHAIN= \
KDIR=/usr/src/linux-headers-6.17.0-20-generic \
CC=x86_64-linux-gnu-gcc-13 \
RUSTC=rustc-1.82 \
RUSTDOC=rustdoc-1.82
モジュールのMakefileは/usr/src/linux-headers-*ターゲットを自動検出し、Rust互換性cfgをKbuildのRustフラグ変数を通じて渡すため、新しいUbuntuのmodule!メタデータスキーマは古いauthorキーの代わりにauthorsを使用します。
ビルド後、ターゲットカーネルバージョンが正しく埋め込まれたことを確認します:
modinfo target/silverseal_rootkit.ko | grep vermagic
ブートキットのビルドにはPATH上のnasmが必要です。クレートはすでにx86_64-unknown-uefiをターゲットに設定されており、ビルドスクリプトはasm/x64/lkm_loader.asmとasm/x64/lkm_stager.asmの両方をフラットバイナリブロブにアセンブルし、EFIイメージに埋め込みます。
cd Silverseal/silverseal-bootkit
cargo build --release
生成されたEFIバイナリは以下に書き込まれます:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
デプロイメントスクリプトは現在、リポジトリルートにsilverseal-bootkit.efiという名前のファイルを想定しています。ブートキットをビルドした後、EFI成果物をそこにコピーし、リポジトリルートからセットアップスクリプトを実行します。
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
このスクリプトはEFIパーティション上で直接スワップを実行します:
/boot/efi/EFI/ubuntu/grubx64.efiを/boot/efi/EFI/ubuntu/grubx64.efi.originalに移動します./silverseal-bootkit.efiを/boot/efi/EFI/ubuntu/grubx64.efiとして所定の位置に移動しますSilversealを削除するには、.originalバックアップから元のGRUBバイナリを復元します:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
一般的なポート: /dev/ttyS0 (COM1)、/dev/ttyS1 (COM2)
minicomでシリアル出力を監視する:sudo minicom -D /dev/ttyS0 -b 115200
# Or with `screen`:
sudo screen /dev/ttyS0 115200
# Or with `picocom`:
sudo picocom -b 115200 /dev/ttyS0
\\.\pipe\com_1)を入力しますヘルパースクリプトを使用することもできます。これはPuTTYを\\.\pipe\com_1に115200ボーで継続的に再接続します:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1