Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Pengerasan Kernel

Android 8.0 menambahkan fitur pengerasan kernel untuk membantu mengurangi kerentanan kernel dan menemukan bug di driver kernel. Fitur-fiturnya ada di kernel / umum di cabang android-3.18, android-4.4, dan android-4.9.

Penerapan

Untuk memperoleh fitur ini, produsen perangkat dan SOC harus menggabungkan semua hardening patch dari kernel/common ke pohon kernel mereka dan mengaktifkan opsi konfigurasi kernel berikut:

  • Salinan pengguna yang diperkeras: CONFIG_HARDENED_USERCOPY=y
  • Emulasi PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Emulasi PAN - lengan: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 dan kernel yang lebih baru: CONFIG_RANDOMIZE_BASE=y

KASLR juga membutuhkan dukungan bootloader untuk meneruskan entropi perangkat keras melalui simpul pohon perangkat /chosen/kaslr-seed atau dengan mengimplementasikan EFI_RNG_PROTOCOL .

Juga pastikan fitur pengerasan yang ada diaktifkan:

  • Mitigasi overflow buffer tumpukan: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Perlindungan memori internal: CONFIG_DEBUG_RODATA=y atau CONFIG_STRICT_KERNEL_RWX=y
  • Batasi akses ruang pengguna dari kernel - x86 (diaktifkan secara default): CONFIG_X86_SMAP=y

Menguji

Untuk menguji implementasi Anda, tambahkan CONFIG_LKDTM=y ke konfigurasi kernel dan konfirmasikan bahwa setiap perintah berikut menyebabkan kepanikan 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

Untuk 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

Masalah umum

Perubahan ini cenderung mengekspos bug di driver kernel, yang perlu diperbaiki oleh produsen perangkat atau pemilik driver kernel.

  • Salinan pengguna yang diperkeras memperlihatkan pemeriksaan batas yang salah saat menyalin data ke / dari ruang pengguna. Ini harus diperbaiki seperti bug kerusakan memori lainnya.
  • Emulasi PAN memperlihatkan akses ruang pengguna langsung dari kernel, yang tidak diperbolehkan. Driver yang mencoba mengakses memori ruang pengguna perlu diubah untuk menggunakan fungsi copy_to_user() / copy_from_user() sebagai gantinya.