
Framework di post-exploitation per Linux con un bootkit UEFI che carica in modo persistente e stealth un rootkit come modulo kernel basato su Rust sui moderni sistemi Linux.

Silverseal è un framework open-source per la ricerca sui bootkit Linux scritto in Rust. Dimostra come un bootkit UEFI possa agganciare il processo di avvio iniziale del kernel Linux per caricare in modo persistente e stealth un rootkit basato su modulo kernel scritto in Rust.
Il progetto esplora lo sviluppo di bootkit UEFI, l'hooking della catena di avvio del kernel Linux, il caricamento di rootkit e la persistenza pre-OS sui moderni sistemi Linux.

Installa i pacchetti necessari per le build di moduli esterni Rust-for-Linux, installa rustup se necessario, imposta la toolchain predefinita su stable, aggiunge rust-src, installa bindgen-cli e avvisa se il kernel attualmente in esecuzione non espone CONFIG_RUST=y.
./scripts/install_dependencies.sh
[!IMPORTANT]
Se stai usando WSL, assicurati di configurare WSL 2 e installare Ubuntu. Questo script compila un kernel WSL2 personalizzato con supporto Rust, prepara un VHDX per i moduli e può opzionalmente scrivere una voce in .wslconfig di Windows che punta WSL al kernel generato.
./scripts/wsl_setup.sh
Lo script installa automaticamente le dipendenze di build di Ubuntu, clona il sorgente del kernel WSL2 Microsoft corrispondente, abilita CONFIG_RUST, compila il kernel con LLVM e collega /lib/modules/<release>/build per le build di moduli esterni.
Per vedere le opzioni supportate:
./scripts/wsl_setup.sh --help
Per compilare il rootkit per il kernel di destinazione desiderato, devi eseguire il seguente script sulla tua macchina di build (WSL o una macchina Linux nativa):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
Questo flusso installa i pacchetti corrispondenti linux-headers-<kernel> e linux-lib-rust-<kernel>, installa la toolchain Rust 1.82 fornita da Ubuntu utilizzata dal flusso generic-kernel, ripara /usr/src/linux-headers-<kernel>/rust se quel symlink è rotto e stampa il comando make esatto da usare successivamente.
Compila il rootkit con il sistema di build del kernel. Non usare Cargo per la build reale del modulo.
cd Silverseal/silverseal-rootkit
make
Gli artefatti del modulo vengono posizionati in silverseal-rootkit/target/ dopo la build.
Compila il rootkit per un kernel di destinazione Ubuntu generic da 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
Il Makefile del modulo rileva automaticamente i target /usr/src/linux-headers-* e passa il cfg di compatibilità Rust attraverso le variabili flag Rust di Kbuild, in modo che lo schema dei metadati module! più recente di Ubuntu usi authors invece della chiave più vecchia author.
Dopo la build, verifica che la versione del kernel di destinazione sia stata incorporata correttamente:
modinfo target/silverseal_rootkit.ko | grep vermagic
La build del bootkit richiede nasm nel PATH. Il crate è già configurato per il target x86_64-unknown-uefi, e lo script di build assembla sia asm/x64/lkm_loader.asm che asm/x64/lkm_stager.asm in blob binari flat incorporati nell'immagine EFI.
cd Silverseal/silverseal-bootkit
cargo build --release
Il binario EFI risultante viene scritto in:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
Lo script di deployment attualmente si aspetta un file chiamato silverseal-bootkit.efi nella root del repository. Dopo aver compilato il bootkit, copia l'artefatto EFI lì e poi esegui lo script di setup dalla root del repository.
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
Lo script esegue uno scambio diretto sulla partizione EFI:
/boot/efi/EFI/ubuntu/grubx64.efi in /boot/efi/EFI/ubuntu/grubx64.efi.original./silverseal-bootkit.efi al suo posto come /boot/efi/EFI/ubuntu/grubx64.efiPer rimuovere Silverseal, ripristina il binario GRUB originale dal backup .original:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
Porte comuni: /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)Puoi anche usare lo script di supporto, che riconnette continuamente PuTTY a \\.\pipe\com_1 a 115200 baud:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1