Android 8.0'a, çekirdeği azaltmaya yardımcı olmak için çekirdek sağlamlaştırma özellikleri eklendi çekirdek sürücülerindeki hataları bulmak için yapay zekadan yararlanabilir. Özellikler şurada çekirdek/ortak konumundadır: android-3.18, android-4.4 ve android-4.9 dalları.
Uygulama
Bu özellikleri edinmek için cihaz üreticileri ve SOC'ler, tüm cihaz üreticilerini
kernel/common
çekirdeklerini çekirdek ağaçlarına ve çekirdeklerine
aşağıdaki çekirdek yapılandırma seçeneklerini etkinleştirin:
- Sağlamlaştırılmış kullanıcı kopyası:
CONFIG_HARDENED_USERCOPY=y
- PAN emülasyonu - arm64:
CONFIG_ARM64_SW_TTBR0_PAN=y
- PAN emülasyonu - kol:
CONFIG_CPU_SW_DOMAIN_PAN=y
- KASLR - 4.4 ve sonraki çekirdekler:
CONFIG_RANDOMIZE_BASE=y
.
KASLR ayrıca donanım entropisini iletmek için bootloader desteği gerektiriyor
/chosen/kaslr-seed
cihaz ağacı düğümünü veya
EFI_RNG_PROTOCOL
.
Ayrıca, mevcut sağlamlaştırma özelliklerinin etkinleştirildiğinden emin olun:
- Yığın arabelleği taşma çözümü:
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ıtla - x86 (varsayılan olarak etkindir):
CONFIG_X86_SMAP=y
.
Test
Uygulamanızı test etmek için çekirdeğe CONFIG_LKDTM=y
ekleyin
yapılandırmanızı ve aşağıdaki komutların her birinin bir çekirdeğe
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
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
Genel sorunlar
Bu değişiklikler muhtemelen çekirdek sürücülerinde hataları ortaya çıkaracaktır. cihaz üreticisi veya çekirdek sürücüsünün sahibi tarafından düzeltilir.
- Sağlamlaştırılmış kullanıcı kopyası, veriler kopyalanırken yanlış sınırlar kontrolü gösteriyor veya bir alandan diğerine gidebilmektedir. Bunlar, diğer bellek bozulması hataları gibi düzeltilmelidir.
- PAN emülasyonu, çekirdekten doğrudan kullanıcı alanına erişimi açığa çıkarıyor.
izin verilir. Kullanıcı alanı belleğine erişmeye çalışan sürücülerin şu şekilde değiştirilmesi gerekiyor:
standart
copy_to_user()
/copy_from_user()
kullanın işlevlerini kullanabilirsiniz.