
روتكيت Linux eBPF مع باب خلفي، خادم تحكم وأوامر (C2)، حقن مكتبات، اختطاف تنفيذ، قدرات الثبات والخفاء.
TripleCross هو روتكيت (rootkit) لنظام لينكس يعتمد على تقنية eBPF، ويوضح القدرات الهجومية لهذه التقنية.
تم استلهام TripleCross من تصاميم سابقة في هذا المجال، خاصة أعمال Jeff Dileo في DEFCON 271، و Pat Hogan في DEFCON 292، و Guillaume Fournier و Sylvain Afchain أيضًا في DEFCON 293، و Boopkit لكريس نوفا4. نحن نعيد استخدام ونوسع بعض التقنيات التي ابتكرتها هذه الاستكشافات السابقة للقدرات الهجومية لتقنية eBPF.
تم إنشاء هذا الروتكيت كجزء من مشروع نهاية درجة البكالوريوس في جامعة UC3M. توجد تفاصيل إضافية حول تصميمه في وثيقة الأطروحة.
هذا الروتكيت هو لأغراض تعليمية وأكاديمية بحتة. يتم توفير البرنامج "كما هو" والمؤلفون غير مسؤولين عن أي ضرر أو مشاكل قد تحدث أثناء استخدامه.
لا تحاول استخدام TripleCross لانتهاك القانون. قد يؤدي سوء استخدام البرنامج والمعلومات المقدمة إلى تهم جنائية.
يوضح الشكل التالي بنية TripleCross ووحداته.
مكتبة المقابس الخام RawTCP_Lib المستخدمة في إرسالات الروتكيت هي من تأليفي ولها مستودع خاص بها.
يصف الجدول التالي ملفات وأدلة المصدر الرئيسية لتسهيل التصفح:
| الدليل | الوصف |
|---|---|
| docs | وثيقة الأطروحة الأصلية |
| src/client | الكود المصدري لعميل الروتكيت |
| src/client/lib | مكتبة RawTCP_Lib المشتركة |
| src/common | الثوابت والإعدادات للروتكيت. يتضمن أيضًا تنفيذ العناصر المشتركة بين جانب eBPF وجانب مساحة المستخدم للروتكيت، مثل المخزن المؤقت الحلقي (ring buffer) |
| src/ebpf | الكود المصدري لبرامج eBPF المستخدمة من قبل الروتكيت |
| src/helpers | يتضمن برامج لاختبار وظائف عدة وحدات للروتكيت، بالإضافة إلى البرنامج الخبيث والمكتبة المستخدمة في وحدتي اختطاف التنفيذ وحقن المكتبات، على التوالي |
| src/libbpf | يحتوي على مكتبة libbpf المدمجة مع الروتكيت |
| src/user | الكود المصدري لبرامج مساحة المستخدم المستخدمة من قبل الروتكيت |
| src/vmlinux | رؤوس تحتوي على تعريف لهياكل بيانات النواة (هذه هي الطريقة الموصى بها عند استخدام libbpf) |
تم اختبار هذا المشروع البحثي في البيئات التالية:
| التوزيعة | النواة | GCC | CLANG | GLIBC | |
|---|---|---|---|---|---|
| الإصدار | Ubuntu 21.04 | 5.11.0 | 10.3.0 | 12.0.0 | 2.33 |
نوصي باستخدام Ubuntu 21.04، والذي سيتضمن افتراضيًا إصدارات البرامج الموضحة هنا. بخلاف ذلك، تم وصف بعض المشكلات التي قد تواجهها هنا.
يتم تجميع الكود المصدري للروتكيت باستخدام ملفي Makefile.```
cd src make all
cd client make
الجدول التالي يصف الغرض من كل ملف Makefile بالتفصيل:
| ملف Makefile | الأمر | الوصف | الملفات الناتجة |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile | make | تجميع عميل الروتكيت | src/client/injector |
| src/Makefile | make help | تجميع البرامج لاختبار إمكانيات الروتكيت، والبرنامج الخبيث والمكتبة لوحدتي اختطاف التنفيذ وحقن المكتبة، على التوالي | src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack |
| src/Makefile | make kit | تجميع الروتكيت باستخدام مكتبة libbpf | src/bin/kit |
| src/Makefile | make tckit | تجميع برنامج الخروج TC للروتكيت | src/bin/tc.o |
### التثبيت
بمجرد إنشاء ملفات الروتكيت داخل src/bin/، يجب تحميل برامج *tc.o* و *kit* بالترتيب. في المثال التالي، سيعمل الباب الخلفي للروتكيت على واجهة الشبكة *enp0s3*:```
// TC egress program
sudo tc qdisc add dev enp0s3 clsact
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress
// Libbpf-powered rootkit
sudo ./bin/kit -t enp0s3
هناك نصان برمجيان، packager.sh و deployer.sh، يقومان بتجميع وتثبيت الروتكيت تلقائيًا، تمامًا كما يفعل المهاجم في سيناريو هجوم حقيقي.
تنفيذ packager.sh سيُنتج جميع ملفات الروتكيت داخل دليل apps/.
تنفيذ deployer.sh سيُثبّت الروتكيت ويُنشئ ملفات الاستمرارية.
يجب تكوين هذه النصوص أولاً بالمعاملات التالية لضمان عمل وحدة الاستمرارية بشكل صحيح:
| النص البرمجي | الثابت | الوصف |
|---|---|---|
| src/helpers/deployer.sh | CRON_PERSIST | مهمة كرون ليتم تنفيذها بعد إعادة التشغيل |
| src/helpers/deployer.sh | SUDO_PERSIST | إدخال سودو لمنح صلاحيات بدون كلمة مرور |
يمكن للروتكيت اختطاف تنفيذ العمليات التي تستدعي استدعاءات النظام sys_timerfd_settime أو sys_openat. يتم تحقيق ذلك عن طريق الكتابة فوق قسم جدول العناوين العام (GOT) في الذاكرة الافتراضية للعملية التي تقوم بالاستدعاء. يؤدي هذا إلى تنفيذ مكتبة ضارة (src/helpers/injection_lib.c). ستقوم المكتبة بإنشاء شل عكسي إلى آلة المهاجم، ثم تُعيد تدفق التنفيذ إلى الوظيفة الأصلية دون تعطل العملية.
TripleCross مُعدّ لتجاوز تقنيات تحصين ELF الشائعة، بما في ذلك:
كما أنه مُعدّ للعمل مع كود متوافق مع Intel CET.
يمكن التحقق من وظائف الوحدة باستخدام برنامجين اختباريين src/helpers/simple_timer.c و src/helpers/simple_open.c. بدلاً من ذلك، يمكنك محاولة اختطاف أي عملية نظام (تم اختبارها وتعمل مع systemd).
يتم ضبط تكوين الوحدة عبر الثوابت التالية:
| اسم الملف | الثابت | الوصف |
|---|---|---|
| src/common/constants.h | TASK_COMM_NAME_INJECTION_ TARGET_TIMERFD_SETTIME | اسم العملية المطلوب اختطافها عند استدعاء النظام sys_timerfd_settime |
| src/common/constants.h | TASK_COMM_NAME_INJECTION_ TARGET_OPEN | اسم العملية المطلوب اختطافها عند استدعاء النظام sys_openat |
| src/helpers/injection_lib.c | ATTACKER_IP & ATTACKER_PORT | عنوان IP ومنفذ آلة المهاجم |