Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Endurecimiento del grano

Android 8.0 agregó funciones de refuerzo del kernel para ayudar a mitigar las vulnerabilidades del kernel y encontrar errores en los controladores del kernel. Las funciones están en kernel / common en las ramas android-3.18, android-4.4 y android-4.9.

Implementación

Para adquirir estas características, los fabricantes de dispositivos y los SOC deben fusionar todos los parches de refuerzo del kernel/common a su árbol del kernel y habilitar las siguientes opciones de configuración del kernel:

  • Copia de CONFIG_HARDENED_USERCOPY=y reforzada: CONFIG_HARDENED_USERCOPY=y
  • Emulación PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Emulación PAN - armar: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 y kernels posteriores: CONFIG_RANDOMIZE_BASE=y

KASLR también requiere soporte del cargador de arranque para pasar la entropía de hardware a través del nodo del árbol de dispositivos /chosen/kaslr-seed o implementando EFI_RNG_PROTOCOL .

También asegúrese de que las funciones de endurecimiento existentes estén habilitadas:

  • Mitigación de desbordamiento del búfer de pila: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Protección de la memoria interna: CONFIG_DEBUG_RODATA=y CONFIG_STRICT_KERNEL_RWX=y
  • Restringir el acceso al espacio de usuario desde el kernel - x86 (habilitado de forma predeterminada): CONFIG_X86_SMAP=y

Pruebas

Para probar su implementación, agregue CONFIG_LKDTM=y a la configuración del kernel y confirme que cada uno de los siguientes comandos CONFIG_LKDTM=y un pánico en el 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

Para 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

Problemas comunes

Es probable que estos cambios expongan errores en los controladores del kernel, que deben ser corregidos por el fabricante del dispositivo o el propietario del controlador del kernel.

  • La copia de usuario reforzada expone la comprobación de límites incorrecta al copiar datos desde / hacia el espacio del usuario. Estos deben corregirse como cualquier otro error de corrupción de memoria.
  • La emulación PAN expone el acceso directo al espacio del usuario desde el kernel, lo cual no está permitido. Los controladores que intentan acceder a la memoria del espacio del usuario deben cambiarse para usar las copy_to_user() estándar copy_to_user() / copy_from_user() lugar.