
Framework de pós-exploração para Linux com um bootkit UEFI que carrega de forma persistente e furtiva um rootkit de módulo de kernel baseado em Rust em sistemas Linux modernos.

Silverseal é um framework de pós-exploração para Linux que demonstra a capacidade de um bootkit UEFI de carregar de forma persistente e furtiva um rootkit de módulo de kernel baseado em Rust em sistemas Linux modernos. O projeto inclui:

Instala os pacotes necessários para compilações de módulos externos do Rust-for-Linux, instala o rustup se necessário, muda o toolchain padrão para stable, adiciona rust-src, instala bindgen-cli e avisa se o kernel em execução no momento não expõe CONFIG_RUST=y.
./scripts/install_dependencies.sh
[!IMPORTANT]
Se você estiver usando WSL, certifique-se de configurar o WSL 2 e instalar o Ubuntu. Este script compila um kernel WSL2 personalizado com suporte a Rust, prepara um VHDX de módulos e pode opcionalmente escrever uma entrada no .wslconfig do Windows que aponta o WSL para o kernel gerado.
./scripts/wsl_setup.sh
O script instala automaticamente as dependências de compilação do Ubuntu, clona o código-fonte do kernel WSL2 correspondente da Microsoft, habilita CONFIG_RUST, compila o kernel com LLVM e configura /lib/modules/<release>/build para compilações de módulos externos.
Para ver as opções suportadas:
./scripts/wsl_setup.sh --help
Para compilar o rootkit para o kernel de destino desejado, você precisa executar o seguinte script na sua máquina de compilação (seja WSL ou uma máquina Linux nativa):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
Este fluxo instala os pacotes correspondentes linux-headers-<kernel> e linux-lib-rust-<kernel>, instala o toolchain Rust 1.82 empacotado pelo Ubuntu usado pelo fluxo generic-kernel, repara /usr/src/linux-headers-<kernel>/rust se esse symlink estiver quebrado e imprime o comando make exato a ser usado depois.
Compile o rootkit com o sistema de compilação do kernel. Não use Cargo para a compilação real do módulo.
cd Silverseal/silverseal-rootkit
make
Os artefatos do módulo são preparados em silverseal-rootkit/target/ após a compilação.
Compile o rootkit para um kernel de destino genérico do Ubuntu a partir do 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
O Makefile do módulo detecta automaticamente os alvos /usr/src/linux-headers-* e passa o cfg de compatibilidade do Rust através das variáveis de flag Rust do Kbuild, para que o esquema de metadados module! mais recente do Ubuntu use authors em vez da chave mais antiga author.
Após a compilação, verifique se a versão do kernel de destino foi incorporada corretamente:
modinfo target/silverseal_rootkit.ko | grep vermagic
A compilação do bootkit requer nasm no PATH. O crate já está configurado para ter como alvo x86_64-unknown-uefi, e o script de compilação monta tanto asm/x64/lkm_loader.asm quanto asm/x64/lkm_stager.asm em blobs binários flat incorporados na imagem EFI.
cd Silverseal/silverseal-bootkit
cargo build --release
O binário EFI resultante é gravado em:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
O script de implantação atualmente espera um arquivo chamado silverseal-bootkit.efi na raiz do repositório. Após compilar o bootkit, copie o artefato EFI para lá e então execute o script de configuração a partir da raiz do repositório.
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
O script realiza uma troca direta na partição EFI:
/boot/efi/EFI/ubuntu/grubx64.efi para /boot/efi/EFI/ubuntu/grubx64.efi.original./silverseal-bootkit.efi para o lugar como /boot/efi/EFI/ubuntu/grubx64.efiPara remover o Silverseal, restaure o binário GRUB original a partir do backup .original:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
Portas comuns: /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)Você também pode usar o script auxiliar, que reconecta continuamente o PuTTY a \\.\pipe\com_1 a 115200 baud:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1