
# تدقيق وتحصين أنظمة لينكس ضد تصعيد الامتيازات المحلية AF_ALG (CVE-2026-31431) يقوم بفحص تعرض نواة النظام لواجهة برمجة التشفير، وتقييد الوحدات النمطية، وتوفير سكربتات الاستعادة.
تنفذ هذه الأداة الحظر الهيكلي للتخفيف من CVE-2026-31431 عن طريق إعادة تسمية وحدات النواة فعليًا وتطهيرها من الذاكرة. قبل الاستخدام، يرجى الانتباه إلى المخاطر المعمارية التالية:
/lib/modules/ جديد، مما يبطل الحظر السابق.AF_ALG (واجهة برمجة تطبيقات التشفير للنواة) إلى كسر تطبيقات أو خدمات معينة تعتمد على تسريع الأجهزة على مستوى النواة (مثل شبكات VPN المتخصصة، أو أدوات تشفير الأقراص، أو أدوات الأمان المخصصة).[cite: 3]استخدم على مسؤوليتك الخاصة. تحقق دائمًا من الوظائف الحرجة لنظامك بعد تشغيل solution.sh.[cite: 3]
مجموعة أدوات لاكتشاف وتشخيص واحتواء نواقل تصعيد الامتيازات المحلية (LPE) عبر واجهة برمجة تطبيقات التشفير للنواة في لينكس (AF_ALG).
تستخدم الأداة الحظر الهيكلي لمعالجة CVE-2026-31431 عن طريق إعادة تسمية وحدات النواة وتطهيرها من الذاكرة. تشمل المخاطر المعمارية الرئيسية:
/lib/modules/ جديد، مما يبطل الحظر السابق.استخدم على مسؤوليتك الخاصة.
يوفر هذا المستودع سكربتين يشكلان سير عمل تشخيص ← احتواء ← تحقق ضد هجمات تصعيد الامتيازات عبر AF_ALG (socket(38, 5, 0)):
check.sh — تدقيق متعدد الطبقات لوضع الأمان (يعمل بدون صلاحيات)solution.sh — يطرد وحدات AF_ALG قسريًا من الذاكرة + يتحقق من وجود ملفات الوحدات الفعلية (يتطلب صلاحيات الجذر)restore.sh — يعيد تحميل وحدات AF_ALG ويستعيد النظام إلى حالته قبل تشغيل solution.sh (يتطلب صلاحيات الجذر)./check.sh
sudo ./solution.sh
sudo ./restore.sh
يعكس restore.sh تأثيرات solution.sh عن طريق إعادة تحميل وحدات نواة AF_ALG (af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash). إذا تمت إعادة تسمية ملف الوحدة الفعلي (af_alg.ko.xz) أو إزالته، سيحذرك السكربت ويطالبك بالاستعادة اليدوية قبل محاولة تحميل الوحدات.
تشغيل solution.sh على نظام حي يستخدم AF_ALG بنشاط (مثل نظام يحتوي على IPsec أو dm-crypt/LUKS أو أي تفريغ تشفير عبر الأجهزة) سيكسر فورًا جميع عمليات التشفير في النواة. يشمل ذلك:
algif_*يقوم السكربت بإلغاء تحميل وحدات نواة AF_ALG قسريًا. ستفشل عمليات التشفير في النواة حتى إعادة التشغيل. هذا السكربت مخصص فقط للأنظمة المعزولة أو غير الإنتاجية أو القابلة للتخلص لأغراض الاختبار والتحليل. لا تقم بتشغيله على البنية التحتية الإنتاجية أو الحرجة.
check.sh لا يتطلب أي تبعيات بخلاف قشرة POSIX و /proc//syssolution.sh يتطلب صلاحيات الجذرrestore.sh يتطلب صلاحيات الجذرaf_alg_block.so يتطلب صلاحيات الجذر للتثبيت عبر /etc/ld.so.preloadتم اختبار هذا الإثبات المفاهيمي على WSL2. يرجى الانتباه إلى ما يلي:
wsl --shutdown). يشمل ذلك تغييرات حالة وحدات النواة من solution.sh، وإعادة تسمية الملفات، ونتائج check.sh، وأي تعديلات ملفات محلية في هذا المستودع..wslconfig أو /etc/wsl.conf أو سكربت بدء تلقائي (مثل /etc/rc.local) بشكل منفصل.لإغلاق ناقل هجوم AF_ALG نهائيًا:
ضع الوحدة في القائمة السوداء (الأكثر موثوقية):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
أو أعد تسمية الملف الفعلي:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
عطّل AF_ALG عبر sysctl:
sudo sysctl -w net.core.af_alg_disabled=1
احظر إنشاء مقبس AF_ALG عبر سياسة SELinux / AppArmor
عطّل مساحات أسماء المستخدمين غير المميزة (بيئات الحاويات):
sudo sysctl -w kernel.unprivileged_userns_clone=0
احظر AF_ALG عند استدعاء نظام socket() عبر LD_PRELOAD (حل بديل لـ WSL2):
# التثبيت على مستوى النظام (يتطلب صلاحيات الجذر)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
يتم تضمين مكتبة مشتركة مبنية مسبقًا (af_alg_block.so) في المستودع. تعترض وتُرجع عندما يكون المجال (38). جميع استدعاءات المقابس الأخرى تمر إلى التنفيذ الحقيقي دون تغيير.
MIT
| الفحص | ما يفحصه | الخطورة |
|---|
| سياق العملية | UID/GID الحالي والصلاحيات الفعلية | منخفضة |
| مقبس AF_ALG للتشفير | إمكانية الوصول إلى واجهة برمجة تطبيقات التشفير للنواة عبر socket(AF_ALG, ...) | عالية |
| kptr_restrict | رؤية مؤشرات النواة لمساحة المستخدم | متوسطة |
| dmesg_restrict | تقييد الوصول إلى المخزن المؤقت الحلقي للنواة | متوسطة |
| SELinux | حالة التنفيذ / التسامح / التعطيل | متوسطة |
| /proc hidepid | ما إذا كان /proc يخفي معلومات العمليات الأخرى | منخفضة |
socket(2)EAFNOSUPPORTAF_ALGهذا النهج مخصص بشكل أساسي لـ WSL2 حيث تجعل دلالات المستخدم الفردي وسلوك إعادة التعيين عند إعادة التشغيل LD_PRELOAD على مستوى النظام عمليًا. على أنظمة لينكس التقليدية متعددة المستخدمين، يُفضل الطريقة 1 (القائمة السوداء للوحدات) بدلاً من ذلك — الحقن عبر /etc/ld.so.preload يؤثر على كل عملية في النظام وقد يكسر الخدمات المعتمدة على AF_ALG بصمت.
ملاحظة: يتطلب glibc (وليس musl). يتطلب تعديل /etc/ld.so.preload صلاحيات الجذر. تتم الإزالة بحذف السطر المقابل من الملف.