
إطار عمل لمرحلة ما بعد الاستغلال على Linux مع UEFI bootkit يقوم بتحميل rootkit لوحدة kernel مكتوب بلغة Rust بشكل مستمر وخفي على أنظمة Linux الحديثة.

Silverseal هو إطار عمل مفتوح المصدر لأبحاث Linux bootkit مكتوب بلغة Rust. يوضح كيف يمكن لـ UEFI bootkit اعتراض عملية إقلاع نواة Linux المبكرة لتحميل rootkit على شكل وحدة نواة مبنية بـ Rust بشكل مستمر وخفي.
يستكشف المشروع تطوير UEFI bootkit، واعتراض سلسلة إقلاع نواة Linux، وتحميل rootkit، والاستمرارية قبل نظام التشغيل على أنظمة 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 للوحدات، ويمكنه اختيارياً كتابة إدخال في ملف .wslconfig على Windows يوجّه WSL إلى النواة المُنشأة.
./scripts/wsl_setup.sh
يقوم السكربت تلقائياً بتثبيت تبعيات البناء الخاصة بـ Ubuntu، ويستنسخ مصدر نواة Microsoft WSL2 المطابق، ويفعّل CONFIG_RUST، ويبني النواة باستخدام LLVM، ويربط /lib/modules/<release>/build لبناء الوحدات الخارجية.
لعرض الخيارات المدعومة:
./scripts/wsl_setup.sh --help
لبناء rootkit مقابل نواة الهدف المطلوبة، تحتاج إلى تشغيل السكربت التالي على جهاز البناء الخاص بك (سواء WSL أو جهاز Linux أصلي):
./scripts/ubuntu_target_setup.sh <uname -r of your target kernel>
يقوم هذا التدفق بتثبيت حزم linux-headers-<kernel> و linux-lib-rust-<kernel> المطابقة، ويثبّت سلسلة أدوات Rust 1.82 المُحزَّمة من Ubuntu والمستخدمة في تدفق generic-kernel، ويصلح /usr/src/linux-headers-<kernel>/rust إذا كان هذا الرابط الرمزي معطلاً، ويطبع أمر make الدقيق لاستخدامه بعد ذلك.
ابنِ rootkit باستخدام نظام بناء النواة. لا تستخدم Cargo لبناء الوحدة الحقيقية.
cd Silverseal/silverseal-rootkit
make
يتم تجهيز مخرجات الوحدة في silverseal-rootkit/target/ بعد البناء.
ابنِ rootkit لنواة هدف 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
يتطلب بناء bootkit وجود nasm في PATH. الحزمة (crate) مُهيَّأة بالفعل لاستهداف 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 في جذر المستودع. بعد بناء bootkit، انسخ مخرج 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