تصلب النواة

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

تطبيق

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

  • نسخة المستخدم المعززة: CONFIG_HARDENED_USERCOPY=y
  • مضاهاة PAN-arm64: 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 وتأكد من أن كل من الأوامر التالية تؤدي إلى ذعر 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

لنظام أندرويد 4.9:

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

مشاكل شائعة

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

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

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

تطبيق

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

  • نسخة المستخدم المعززة: CONFIG_HARDENED_USERCOPY=y
  • مضاهاة PAN-arm64: 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 وتأكد من أن كل من الأوامر التالية تؤدي إلى ذعر 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

لنظام أندرويد 4.9:

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

مشاكل شائعة

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

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

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

تطبيق

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

  • نسخة المستخدم المعززة: CONFIG_HARDENED_USERCOPY=y
  • مضاهاة PAN-arm64: 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 وتأكد من أن كل من الأوامر التالية تؤدي إلى ذعر 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

لنظام أندرويد 4.9:

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

مشاكل شائعة

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

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