تقوية النواة

أضاف Android 8.0 ميزات تعزيز النواة للمساعدة في تخفيف آثار النواة. والعثور على أخطاء في برامج تشغيل النواة. تتوفر الميزات بالنواة kernel/common في الفروع android-3.18 وandroid-4.4 وandroid-4.9.

التنفيذ

للحصول على هذه الميزات، يجب أن تدمج الشركات المصنِّعة للأجهزة وشركات النظام الأساسي (SOC) جميع بقع تقوية من kernel/common إلى شجرة النواة لتفعيل خيارات إعداد النواة التالية:

  • نص المستخدم الذي تم تحسينه: CONFIG_HARDENED_USERCOPY=y
  • محاكاة رقم PAN - التجربة 64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • محاكاة رقم PAN - المجموعة: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 النواة والإصدارات الأحدث: CONFIG_RANDOMIZE_BASE=y

يتطلب KASLR أيضًا دعم برنامج الإقلاع لتمرير قصور الأجهزة من خلال إما عقدة شجرة الجهاز /chosen/kaslr-seed أو من خلال تنفيذ EFI_RNG_PROTOCOL

تأكَّد أيضًا من تفعيل ميزات زيادة درجة الحرارة الحالية:

  • الحد من تجاوز سعة المخزن المؤقت للحزمة: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • حماية الذاكرة الداخلية: CONFIG_DEBUG_RODATA=y أو CONFIG_STRICT_KERNEL_RWX=y
  • تقييد الوصول إلى مساحة المستخدم من kernel - x86 (يتم التفعيل تلقائيًا): CONFIG_X86_SMAP=y

الاختبار

لاختبار عملية التنفيذ، أضِف CONFIG_LKDTM=y إلى النواة. والتأكد من أن كل من الأوامر التالية يؤدي إلى kernel الذعر:

echo ACCESS_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO_AFTER_INIT > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_KERN > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_STACK > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_RODATA > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_KMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_VMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo CORRUPT_STACK > /sys/kernel/debug/provoke-crash/DIRECT

بالنسبة إلى android-4.9:

echo USERCOPY_HEAP_SIZE_TO > /sys/kernel/debug/provoke-crash/DIRECT
echo USERCOPY_HEAP_SIZE_FROM > /sys/kernel/debug/provoke-crash/DIRECT

المشاكل الشائعة

ومن المحتمل أن تكشف هذه التغييرات عن أخطاء في برامج تشغيل النواة، والتي يجب إصلاح الأخطاء إما عن طريق الشركة المصنعة للجهاز أو مالك برنامج تشغيل النواة.

  • يعرض نص المستخدم الذي تم تعزيزه حدودًا غير صحيحة يتم التحقّق منها عند نسخ البيانات من/إلى مساحة المستخدم. ويجب إصلاحها مثل أي خطأ برمجي آخر متعلق بالتلف في الذاكرة.
  • تعرض محاكاة شبكة PAN الوصول المباشر إلى مساحة المستخدم من النواة (النواة)، وهي ليست مسموح به. يجب تغيير برامج التشغيل التي تحاول الوصول إلى ذاكرة مساحة المستخدم إلى استخدام copy_to_user()/copy_from_user() العادية الدوال بدلاً من ذلك.