Pengerasan kernel

Android 8.0 menambahkan fitur hardening kernel untuk membantu mengurangi kernel kerentanan dan menemukan {i> bug<i} di {i>driver<i} {i>kernel<i}. Fitur tersedia dalam kernel/common di cabang android-3.18, android-4.4, dan android-4.9.

Implementasi

Untuk mendapatkan fitur ini, produsen perangkat dan SOC harus menggabungkan semua hardening patch dari kernel/common ke hierarki kernelnya dan aktifkan opsi konfigurasi kernel berikut:

  • Salinan pengguna yang telah melalui proses hardening: CONFIG_HARDENED_USERCOPY=y
  • Emulasi PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Emulasi PAN - grup: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - Kernel 4.4 dan yang lebih baru: CONFIG_RANDOMIZE_BASE=y

KASLR juga memerlukan dukungan bootloader untuk meneruskan entropi hardware melalui node hierarki perangkat /chosen/kaslr-seed atau dengan menerapkan EFI_RNG_PROTOCOL.

Selain itu, pastikan fitur hardening yang ada diaktifkan:

  • Mitigasi luapan buffer stack: 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

Pengujian

Untuk menguji implementasi Anda, tambahkan CONFIG_LKDTM=y ke kernel konfigurasi dan mengkonfirmasi bahwa setiap perintah berikut mengarah ke {i>kernel<i} panik:

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 {i>bug <i}di {i>driver<i} {i>kernel<i}, yang perlu diperbaiki oleh produsen perangkat atau pemilik {i>driver<i} {i>kernel<i}.

  • Usercopy yang melalui proses hardening mengekspos batas yang salah yang diperiksa saat menyalin data ke/dari ruang pengguna. Masalah ini harus diperbaiki seperti bug kerusakan memori lainnya.
  • Emulasi PAN mengekspos akses ruang pengguna langsung dari kernel, yang diizinkan. {i>Driver<i} yang mencoba mengakses memori ruang pengguna perlu diubah menjadi gunakan copy_to_user()/copy_from_user() standar fungsi-fungsi lainnya.