
تنفيذ بحثي يوضح التفاعل مع نظام eBPF في لينكس والمتعلق بـ CVE-2021-3490. يتضمن إنشاء خرائط BPF، وأغلفة استدعاءات النظام (syscall)، وإعداد مساحات الأسماء (namespace)، وتحليل المُدقِّق (verifier). لأغراض تعليمية وبحوث أمنية فقط.
تنفيذ بحثي يوضح التفاعل مع نظام eBPF في لينكس المتعلق بـ CVE-2021-3490. يتضمن إنشاء خرائط BPF، وأغلفة استدعاء النظام، وإعداد مساحات الأسماء، وتحليل المدقق. لأغراض تعليمية وبحث أمني فقط.
CVE-2021-3490 – تحليل تتبع حدود مدقق eBPF نظرة عامة
يحتوي هذا المستودع على تنفيذ بلغة C يستكشف نظام eBPF في نواة لينكس فيما يتعلق بـ CVE-2021-3490، وهي ثغرة تنطوي على تتبع غير صحيح لحدود 32-بت في مدقق eBPF.
الهدف من هذا المشروع هو فهم كيفية عمل استدعاء النظام bpf() داخليًا، وكيف يتم إنشاء خرائط BPF وإدارتها من مساحة المستخدم، وكيف يتعامل المدقق مع قيود المسجلات. هذا مشروع بحثي وتعلمي يركز على داخلية النواة والتحليل الأمني.
هذا الكود غير مخصص للاستخدام في بيئات الإنتاج.
خلفية
تسمح eBPF لبرامج مساحة المستخدم بتحميل بايت كود مُتحقق منه إلى نواة لينكس. قبل التنفيذ، يتحقق مدقق النواة من أن البرنامج:
لا يقوم بوصول غير آمن إلى الذاكرة
يبقى ضمن حدود المسجلات
لا ينتهك قواعد السلامة في النواة
في إصدارات النواة القابلة للاستغلال، كان المدقق يتتبع حدود 32-بت بشكل غير صحيح أثناء عمليات ALU معينة. هذه الثغرة قد تسمح لبرامج مصممة بعناية بتجاوز منطق التحقق.
للتفاصيل الرسمية:
إشعار أمان Ubuntu: https://ubuntu.com/security/CVE-2021-3490
استشارة Red Hat: https://access.redhat.com/security/cve/CVE-2021-3490
ما الذي يوضحه هذا المشروع
يركز هذا التنفيذ على:
الاستخدام المباشر لاستدعاء النظام bpf()
التعريف اليدوي لـ union bpf_attr
إنشاء خريطة BPF (BPF_MAP_TYPE_ARRAY)
تحديث عناصر الخريطة والاستعلام عنها
استرجاع بيانات كائن BPF الوصفية
إعداد مساحات الأسماء للتنفيذ المتحكم به
تم تصميمه للمساعدة في فهم كيفية تفاعل مساحة المستخدم مع البنية التحتية لـ BPF في النواة.
لا يتضمن هذا المستودع منطق حمولة استغلال آلية.
البيئة المختبرة
Ubuntu 20.10 (Groovy)
Linux kernel 5.8.0-48-generic
يمكنك التحقق من إصدار نواتك باستخدام:
uname -r
قد يختلف السلوك على النواة المعدّلة أو الأحدث.
البناء
قم بالترجمة باستخدام GCC:
gcc -o exploit exploit.c -lpthread
لا تتطلب مكتبات خارجية تتجاوز رؤوس لينكس القياسية.
الاستخدام
قم بتشغيل البرنامج:
./exploit
سيقوم البرنامج بـ:
تهيئة مساحات أسماء المستخدم والشبكة
إنشاء خريطة BPF
إدراج عنصر
الاستعلام عن بيانات الخريطة الوصفية
عرض نتائج التنفيذ
ملاحظة أمنية
هذا المشروع مخصص لـ:
الأغراض التعليمية
البحث الأمني في النواة
فهم داخلية eBPF
بيئات المختبرات المتحكم بها
لا تشغّل هذا الكود على أنظمة دون الحصول على إذن مناسب.
أهداف التعلم
من خلال هذا المشروع، يمكنك فهم:
كيف تعرض نواة لينكس واجهة BPF
كيف تُبنى خرائط BPF
كيف يتفاعل منطق المدقق مع مدخلات مساحة المستخدم
كيف تُنشأ استدعاءات النظام منخفضة المستوى يدويًا