
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 di post-exploitation per Linux che dimostra la capacità di un bootkit UEFI di caricare in modo persistente e stealth un rootkit kernel basato su Rust sui moderni sistemi Linux. Il progetto include:

Installa i pacchetti necessari per la compilazione 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 abilitato per 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 compilazione di Ubuntu, clona il codice sorgente del kernel WSL2 di Microsoft corrispondente, abilita CONFIG_RUST, compila il kernel con LLVM e collega /lib/modules/<release>/build per la compilazione di moduli esterni.
Per vedere le opzioni supportate:
./scripts/wsl_setup.sh --help
Per compilare il rootkit per il kernel di destinazione desiderato, è necessario eseguire il seguente script sulla macchina di compilazione (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 compilazione del kernel. Non usare Cargo per la compilazione del modulo reale.
cd Silverseal/silverseal-rootkit
make
Gli artefatti del modulo vengono posizionati in silverseal-rootkit/target/ dopo la compilazione.
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 compilazione, verifica che la versione del kernel di destinazione sia stata incorporata correttamente:
modinfo target/silverseal_rootkit.ko | grep vermagic
La compilazione del bootkit richiede nasm nel PATH. Il crate è già configurato per il target x86_64-unknown-uefi, e lo script di compilazione 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