سخت شدن هسته

Android 8.0 ویژگی‌های سخت‌سازی هسته را برای کمک به کاهش آسیب‌پذیری‌های هسته و یافتن باگ‌ها در درایورهای هسته اضافه کرد. ویژگی ها به صورت هسته/متداول در شاخه های android-3.18، android-4.4، android-4.9 هستند.

پیاده سازی

برای به دست آوردن این ویژگی‌ها، سازندگان دستگاه و SOCها باید همه وصله‌های سخت‌کننده را از kernel/common به درخت هسته خود ادغام کنند و گزینه‌های پیکربندی هسته زیر را فعال کنند:

  • کپی کاربر سخت شده: 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
  • محدود کردن دسترسی به فضای کاربر از هسته - x86 (به طور پیش فرض فعال است): CONFIG_X86_SMAP=y

آزمایش کردن

برای آزمایش پیاده سازی خود، CONFIG_LKDTM=y به پیکربندی هسته اضافه کنید و تأیید کنید که هر یک از دستورات زیر منجر به وحشت هسته می شود:

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

مسائل رایج

این تغییرات احتمالاً باگ هایی را در درایورهای هسته آشکار می کند که باید توسط سازنده دستگاه یا صاحب درایور هسته برطرف شود.

  • کپی کاربر سخت شده، بررسی محدودیت‌های نادرست هنگام کپی کردن داده‌ها از/از فضای کاربر را نشان می‌دهد. اینها باید مانند سایر اشکالات خرابی حافظه برطرف شوند.
  • شبیه سازی PAN دسترسی مستقیم به فضای کاربر از هسته را نشان می دهد که مجاز نیست. درایورهایی که سعی در دسترسی به حافظه فضای کاربر دارند باید تغییر کنند تا به جای آن از توابع استاندارد copy_to_user() / copy_from_user() استفاده کنند.