Android 8.0, çekirdekteki güvenlik açıklarını azaltmaya ve çekirdek sürücülerindeki hataları bulmaya yardımcı olmak için çekirdek güçlendirme özellikleri ekledi. Özellikler çekirdekte/android-3.18, android-4.4 ve android-4.9 dallarında ortaktır .
Uygulama
Bu özellikleri elde etmek için cihaz üreticileri ve SOC'ler, kernel/common
tüm güçlendirme yamalarını kendi çekirdek ağaçlarıyla birleştirmeli ve aşağıdaki çekirdek yapılandırma seçeneklerini etkinleştirmelidir:
- Sağlamlaştırılmış kullanıcı kopyası:
CONFIG_HARDENED_USERCOPY=y
- PAN emülasyonu - arm64:
CONFIG_ARM64_SW_TTBR0_PAN=y
- PAN öykünmesi - kol:
CONFIG_CPU_SW_DOMAIN_PAN=y
- KASLR - 4.4 ve üzeri çekirdekler:
CONFIG_RANDOMIZE_BASE=y
KASLR ayrıca donanım entropisini /chosen/kaslr-seed
aygıt ağacı düğümü üzerinden veya EFI_RNG_PROTOCOL
uygulayarak geçirmek için önyükleyici desteğine ihtiyaç duyar.
Ayrıca mevcut sağlamlaştırma özelliklerinin etkinleştirildiğinden emin olun:
- Yığın arabellek taşmasını azaltma:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Dahili bellek koruması:
CONFIG_DEBUG_RODATA=y
veyaCONFIG_STRICT_KERNEL_RWX=y
- Kullanıcı alanı erişimini çekirdekten kısıtlayın - x86 (varsayılan olarak etkindir):
CONFIG_X86_SMAP=y
Test yapmak
Uygulamanızı test etmek için çekirdek yapılandırmasına CONFIG_LKDTM=y
ekleyin ve aşağıdaki komutların her birinin çekirdek paniğine yol açtığını doğrulayın:
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
Android-4.9 için:
echo USERCOPY_HEAP_SIZE_TO > /sys/kernel/debug/provoke-crash/DIRECT
echo USERCOPY_HEAP_SIZE_FROM > /sys/kernel/debug/provoke-crash/DIRECT
Ortak sorunlar
Bu değişikliklerin çekirdek sürücülerindeki hataları ortaya çıkarması muhtemeldir ve bunların ya aygıt üreticisi ya da çekirdek sürücüsünün sahibi tarafından düzeltilmesi gerekir.
- Sağlamlaştırılmış kullanıcı kopyası, verileri kullanıcı alanına/alanından kopyalarken hatalı sınır denetimini ortaya çıkarır. Bunlar, diğer bellek bozulması hataları gibi düzeltilmelidir.
- PAN emülasyonu, çekirdekten doğrudan kullanıcı alanı erişimini açığa çıkarır ve buna izin verilmez. Kullanıcı alanı belleğine erişmeye çalışan sürücülerin bunun yerine standart
copy_to_user()
/copy_from_user()
işlevlerini kullanacak şekilde değiştirilmesi gerekir.