
Linux-фреймворк для постэксплуатации с UEFI-буткитом, который постоянно и скрытно загружает руткит на основе модуля ядра, написанный на Rust, на современных Linux-системах.

Silverseal — это фреймворк постэксплуатации Linux, демонстрирующий способность UEFI-буткита постоянно и скрытно загружать руткит в виде модуля ядра на Rust на современных системах Linux. Проект включает:

Устанавливает пакеты, необходимые для сборки внешних модулей Rust-for-Linux, устанавливает rustup при необходимости, переключает инструментарий по умолчанию на stable, добавляет rust-src, устанавливает bindgen-cli и предупреждает, если текущее работающее ядро не предоставляет CONFIG_RUST=y.
./scripts/install_dependencies.sh
[!IMPORTANT]
Если вы используете WSL, убедитесь, что настроен WSL 2 и установлен Ubuntu. Этот скрипт собирает кастомное ядро WSL2 с поддержкой Rust, подготавливает VHDX для модулей и может опционально записать запись в Windows .wslconfig, указывающую WSL на сгенерированное ядро.
./scripts/wsl_setup.sh
Скрипт автоматически устанавливает зависимости сборки Ubuntu, клонирует соответствующую версию исходников ядра Microsoft WSL2, включает CONFIG_RUST, собирает ядро с LLVM и настраивает /lib/modules/<release>/build для сборки внешних модулей.
Чтобы увидеть поддерживаемые параметры:
./scripts/wsl_setup.sh --help
Чтобы собрать руткит под нужное целевое ядро, необходимо запустить следующий скрипт на сборочной машине (либо WSL, либо нативной Linux-машине):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
Этот процесс устанавливает соответствующие пакеты linux-headers-<kernel> и linux-lib-rust-<kernel>, устанавливает поставляемый с Ubuntu инструментарий Rust 1.82, используемый в процессе generic-kernel, исправляет /usr/src/linux-headers-<kernel>/rust, если эта символическая ссылка повреждена, и выводит точную команду make для последующего использования.
Соберите руткит с помощью системы сборки ядра. Не используйте Cargo для реальной сборки модуля.
cd Silverseal/silverseal-rootkit
make
Артефакты модуля размещаются в silverseal-rootkit/target/ после сборки.
Сборка руткита для целевого ядра Ubuntu generic из 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
Makefile модуля автоматически определяет цели /usr/src/linux-headers-* и передаёт cfg совместимости Rust через переменные флагов Rust в Kbuild, чтобы более новая схема метаданных module! в Ubuntu использовала authors вместо старого ключа author.
После сборки проверьте, что версия целевого ядра была встроена корректно:
modinfo target/silverseal_rootkit.ko | grep vermagic
Для сборки буткита требуется nasm в PATH. Крейт уже настроен на цель x86_64-unknown-uefi, а сборочный скрипт ассемблирует как asm/x64/lkm_loader.asm, так и asm/x64/lkm_stager.asm в плоские бинарные блобы, встраиваемые в EFI-образ.
cd Silverseal/silverseal-bootkit
cargo build --release
Полученный EFI-бинарник записывается в:
Silverseal/target/x86_64-unknown-uefi/release/silverseal-bootkit.efi
Скрипт развёртывания в настоящее время ожидает файл с именем silverseal-bootkit.efi в корне репозитория. После сборки буткита скопируйте туда EFI-артефакт и затем запустите скрипт настройки из корня репозитория.
cd Silverseal
cp target/x86_64-unknown-uefi/release/silverseal-bootkit.efi ./silverseal-bootkit.efi
sudo ./scripts/setup_silverseal.sh
Скрипт выполняет прямую замену на EFI-разделе:
/boot/efi/EFI/ubuntu/grubx64.efi в /boot/efi/EFI/ubuntu/grubx64.efi.original./silverseal-bootkit.efi на место /boot/efi/EFI/ubuntu/grubx64.efiЧтобы удалить Silverseal, восстановите оригинальный бинарник GRUB из резервной копии .original:
cd Silverseal
sudo ./scripts/restore_silverseal.sh
ls -la /dev/ttyS*
Распространённые порты: /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)Вы также можете использовать вспомогательный скрипт, который непрерывно переподключает PuTTY к \\.\pipe\com_1 на скорости 115200 бод:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1