Android 8.0 ha aggiunto funzionalità di protezione del kernel per contribuire a mitigare l'impatto del kernel le vulnerabilità e trova bug nei driver del kernel. Le caratteristiche sono nel kernel/common in rami android-3.18, android-4.4 e android-4.9.
Implementazione
Per acquisire queste funzionalità, i produttori di dispositivi e i SOC devono unire tutti
delle patch di protezione avanzata da kernel/common
al rispettivo albero del kernel
abilita le seguenti opzioni di configurazione del kernel:
- Copia utente protetta:
CONFIG_HARDENED_USERCOPY=y
- Emulazione PAN - gruppo 64:
CONFIG_ARM64_SW_TTBR0_PAN=y
- Emulazione PAN - gruppo:
CONFIG_CPU_SW_DOMAIN_PAN=y
- Kernel KASLR - 4.4 e successivi:
CONFIG_RANDOMIZE_BASE=y
KASLR richiede anche il supporto del bootloader per passare l'entropia hardware
il nodo ad albero dei dispositivi /chosen/kaslr-seed
oppure implementando
EFI_RNG_PROTOCOL
.
Assicurati inoltre che le funzionalità di protezione esistenti siano abilitate:
- Mitigazione dell'overflow del buffer dello stack:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Protezione della memoria interna:
CONFIG_DEBUG_RODATA=y
oCONFIG_STRICT_KERNEL_RWX=y
- Limita l'accesso allo spazio utente dal kernel - x86 (abilitato per impostazione predefinita):
CONFIG_X86_SMAP=y
Test
Per testare l'implementazione, aggiungi CONFIG_LKDTM=y
al kernel
e verificare che ognuno dei seguenti comandi indirizzi a un kernel
panico:
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
Per 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
Problemi comuni
È probabile che queste modifiche mostrino bug nei driver del kernel, che devono essere dal produttore del dispositivo o dal proprietario del driver del kernel.
- La copia utente protetta espone il controllo dei limiti errati durante la copia dei dati da/verso lo spazio utente. Dovrebbero essere risolti come qualsiasi altro bug di corruzione della memoria.
- L'emulazione PAN espone l'accesso diretto allo spazio utente dal kernel, che non è
consentito. I driver che tentano di accedere alla memoria dello spazio utente devono essere impostati su
utilizza lo standard
copy_to_user()
/copy_from_user()
funzioni.