Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Kernel Hardening

Android 8.0 ha aggiunto funzionalità di rafforzamento del kernel per aiutare a mitigare le vulnerabilità del kernel e trovare bug nei driver del kernel. Le funzionalità sono nel kernel / comuni nei rami android-3.18, android-4.4 e android-4.9.

Implementazione

Per acquisire queste funzionalità, i produttori di dispositivi e i SOC dovrebbero unire tutte le patch di hardening dal kernel/common al loro albero del kernel e abilitare le seguenti opzioni di configurazione del kernel:

  • Copia utente rinforzata: CONFIG_HARDENED_USERCOPY=y
  • Emulazione PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Emulazione PAN - arm: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 e successivi kernel: CONFIG_RANDOMIZE_BASE=y

KASLR richiede anche il supporto del bootloader per il passaggio dell'entropia hardware attraverso il nodo dell'albero dei dispositivi /chosen/kaslr-seed o implementando EFI_RNG_PROTOCOL .

Assicurati inoltre che le funzionalità di protezione avanzata esistenti siano abilitate:

  • CONFIG_CC_STACKPROTECTOR_STRONG=y dell'overflow del buffer dello stack: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Protezione della memoria interna: CONFIG_DEBUG_RODATA=y o CONFIG_STRICT_KERNEL_RWX=y
  • Limita l'accesso allo spazio utente dal kernel - x86 (abilitato per impostazione predefinita): CONFIG_X86_SMAP=y

Test

Per testare la tua implementazione, aggiungi CONFIG_LKDTM=y alla configurazione del kernel e conferma che ciascuno dei seguenti comandi porti a un kernel panic:

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 espongano bug nei driver del kernel, che devono essere corretti dal produttore del dispositivo o dal proprietario del driver del kernel.

  • La copia utente rafforzata espone il controllo dei limiti errati durante la copia dei dati nello / dallo spazio utente. Questi dovrebbero essere risolti come qualsiasi altro bug di danneggiamento 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 modificati per utilizzare invece le copy_to_user() standard copy_to_user() / copy_from_user() .