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