
आधुनिक Linux सिस्टम पर UEFI बूटकिट के साथ एक Linux पोस्ट-एक्सप्लॉइटेशन फ्रेमवर्क जो लगातार और चुपके से Rust-आधारित कर्नेल मॉड्यूल रूटकिट लोड करता है।

Silverseal एक ओपन-सोर्स लिनक्स बूटकिट रिसर्च फ्रेमवर्क है जो Rust में लिखा गया है। यह प्रदर्शित करता है कि कैसे एक UEFI बूटकिट लिनक्स कर्नेल के शुरुआती बूट प्रक्रिया को हुक करके एक Rust-आधारित कर्नेल मॉड्यूल रूटकिट को लगातार और चुपके से लोड कर सकता है।
यह प्रोजेक्ट आधुनिक लिनक्स सिस्टम पर UEFI बूटकिट डेवलपमेंट, लिनक्स कर्नेल बूट-चेन हुकिंग, रूटकिट लोडिंग, और प्री-OS पर्सिस्टेंस की खोज करता है।

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 प्रविष्टि लिख सकती है जो WSL को उत्पन्न कर्नेल की ओर इंगित करती है।
./scripts/wsl_setup.sh
स्क्रिप्ट स्वचालित रूप से Ubuntu बिल्ड निर्भरताएँ स्थापित करती है, मेल खाते Microsoft WSL2 कर्नेल स्रोत को क्लोन करती है, CONFIG_RUST को सक्षम करती है, LLVM के साथ कर्नेल बनाती है, और बाहरी मॉड्यूल बिल्ड के लिए /lib/modules/<release>/build को वायर करती है।
समर्थित विकल्प देखने के लिए:
./scripts/wsl_setup.sh --help
अपने इच्छित लक्ष्य कर्नेल के विरुद्ध रूटकिट बनाने के लिए, आपको अपनी बिल्ड मशीन (या तो WSL या एक नेटिव लिनक्स मशीन) पर निम्नलिखित स्क्रिप्ट चलानी होगी:
./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-* लक्ष्यों का पता लगाता है और Rust संगतता cfg को Kbuild के Rust फ्लैग वेरिएबल्स के माध्यम से पास करता है ताकि नए 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)आप हेल्पर स्क्रिप्ट का भी उपयोग कर सकते हैं, जो लगातार PuTTY को \\.\pipe\com_1 से 115200 बॉड पर पुनः कनेक्ट करती है:
powershell -ExecutionPolicy Bypass -File .\scripts\connect-vm.ps1