أضاف 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()
العادية الدوال بدلاً من ذلك.