Android 8.0 menambahkan fitur pengerasan kernel untuk membantu mengurangi kerentanan kernel dan menemukan bug pada driver kernel. Fitur-fiturnya ada di kernel/umum di cabang android-3.18, android-4.4, dan android-4.9.
Penerapan
Untuk memperoleh fitur-fitur ini, produsen perangkat dan SOC harus menggabungkan semua patch pengerasan 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 - Kernel 4.4 dan yang lebih baru:
CONFIG_RANDOMIZE_BASE=y
KASLR juga memerlukan dukungan bootloader untuk meneruskan entropi perangkat keras melalui node pohon perangkat /chosen/kaslr-seed
atau dengan mengimplementasikan EFI_RNG_PROTOCOL
.
Pastikan juga fitur pengerasan yang ada diaktifkan:
- Mitigasi luapan buffer tumpukan:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Perlindungan memori internal:
CONFIG_DEBUG_RODATA=y
atauCONFIG_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 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 kemungkinan besar akan mengungkap bug pada 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()
standar.
Android 8.0 menambahkan fitur pengerasan kernel untuk membantu mengurangi kerentanan kernel dan menemukan bug pada driver kernel. Fitur-fiturnya ada di kernel/umum di cabang android-3.18, android-4.4, dan android-4.9.
Penerapan
Untuk memperoleh fitur-fitur ini, produsen perangkat dan SOC harus menggabungkan semua patch pengerasan 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 - Kernel 4.4 dan yang lebih baru:
CONFIG_RANDOMIZE_BASE=y
KASLR juga memerlukan dukungan bootloader untuk meneruskan entropi perangkat keras melalui node pohon perangkat /chosen/kaslr-seed
atau dengan mengimplementasikan EFI_RNG_PROTOCOL
.
Pastikan juga fitur pengerasan yang ada diaktifkan:
- Mitigasi luapan buffer tumpukan:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Perlindungan memori internal:
CONFIG_DEBUG_RODATA=y
atauCONFIG_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 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 kemungkinan besar akan mengungkap bug pada 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()
standar.
Android 8.0 menambahkan fitur pengerasan kernel untuk membantu mengurangi kerentanan kernel dan menemukan bug pada driver kernel. Fitur-fiturnya ada di kernel/umum di cabang android-3.18, android-4.4, dan android-4.9.
Penerapan
Untuk memperoleh fitur-fitur ini, produsen perangkat dan SOC harus menggabungkan semua patch pengerasan 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 - Kernel 4.4 dan yang lebih baru:
CONFIG_RANDOMIZE_BASE=y
KASLR juga memerlukan dukungan bootloader untuk meneruskan entropi perangkat keras melalui node pohon perangkat /chosen/kaslr-seed
atau dengan mengimplementasikan EFI_RNG_PROTOCOL
.
Pastikan juga fitur pengerasan yang ada diaktifkan:
- Mitigasi luapan buffer tumpukan:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Perlindungan memori internal:
CONFIG_DEBUG_RODATA=y
atauCONFIG_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 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 kemungkinan besar akan mengungkap bug pada 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()
standar.