
وحدة نواة لينكس تمنح صلاحيات الجذر، وتُخفي العمليات/الملفات، وتحمي نفسها من الإلغاء، مصممة لأغراض تعليمية على أنوية أوبونتو.
روتكيت بسيط لنواة لينكس كُتب للمتعة، وليس للشر.
يمكن للروتكيت القيام بما يلي:
تم اختبار الروتكيت ليعمل على نوى لينكس 2.6.32-38 و 4.4.0-22 كما تقدمها أوبونتو في Ubuntu 10.04.4 LTS و Ubuntu 16.04 LTS على التوالي، ولكن يجب أن يكون نقله إلى النوى الواقعة بينهما، وكذلك الأحدث منها، أمرًا سهلاً للغاية.
يوجد بعض الأكواد الخاصة بالبنية المعمارية في الروتكيت وهي منفذة فقط لمعماريتي x86 و x86-64. هذا هو الكود الخاص بإيجاد جدول استدعاءات النظام، وتعطيل حماية الكتابة للذاكرة، وواحدة من طريقتَي ربط الدوال (function hooking). يجب أن يكون نقله إلى بنية معمارية جديدة أمرًا سهلاً للغاية، وبعض هذا الكود ليس ضروريًا بشكل صارم لعمل الروتكيت، على سبيل المثال يمكن إزالة طريقة الربط غير القابلة للنقل، لكن يجب أن تكون شخصًا مملًا جدًا إذا كنت مستعدًا لتفويت متعة ربط الدوال الذي يستبدل كود الآلة الخاص بدالة النواة المستهدفة بحيث تستدعي دالة الربط الخاصة بنا بدلاً منها.
تم اختبار الروتكيت فقط باستخدام نواة واحدة (CPU core)، لذا فقد يعمل أو لا يعمل بشكل صحيح على نظام متعدد الأنوية. من المرجح ألا يعمل جيدًا على نظام متعدد الأنوية لأن الروتكيت كُتب متوقعًا وجود خيط واحد فقط ينفذ أي شيء في أي وقت معين، لذا فهو يفتقر إلى عمليات القراءة/الكتابة الذرية والأقفال (mutexes) حول هياكل بيانات القوائم.
شغّل جهازك الافتراضي (VM) المفضل.
حمّل وقم بتثبيت صورة أوبونتو المطلوبة:
بالنسبة لـ Ubuntu 10.04، قم بتصحيح عنوان مستودع الحزم:
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
قم بتثبيت مترجم (compiler)، ورؤوس لينكس (Linux headers)، وكل ما هو مطلوب لبناء الروتكيت:
apt-get update
apt-get install build-essential
تأكد من عدم استدعاء apt-get upgrade، لأنه سيحدّث النواة، بينما تم اختبار الروتكيت فقط على إصدار النواة المثبت مسبقًا.
make
تحميل الروتكيت:
insmod rootkit.ko
استخدام الروتكيت:
$ ./client --help
Usage: ./client [OPTION]...
Options:
--root-shell Grants you root shell access.
--hide-pid=PID Hides the specified PID.
--unhide-pid=PID Unhides the specified PID.
--hide-file=FILENAME Hides the specified FILENAME globally.
Must be a filename without any path.
--unhide-file=FILENAME Unhides the specified FILENAME.
--hide Hides the rootkit LKM.
--unhide Unhides the rootkit LKM.
--help Print this help message.
--protect Protects the rootkit from rmmod.
--unprotect Disables the rmmod protection.
إلغاء تحميل الروتكيت:
./client --unhide
./client --unprotect
rmmod rootkit.ko
ليس صحيحًا، فهناك العديد من المقالات على الإنترنت حول كيفية كتابة روتكيت لينكس مع توفير الكود المصدري الكامل، ناهيك عن مستودعات GitHub التي لا تُحصى.
تم استخدام المواد التالية في كتابة هذا الروتكيت:
هذا المشروع مرخّص بموجب GPLv2.
| النواة / المعمارية | x86 | x86-64 |
|---|
| 2.6.32 | Ubuntu 10.04.4 i386 (694M) [torrent] [iso] | Ubuntu 10.04.4 amd64 (681M) [torrent] [iso] |
| 4.4.0 | Ubuntu 16.04 i386 (647M) [torrent] [iso] | Ubuntu 16.04 amd64 (655M) [torrent] [iso] |