Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 mediante la implementación de 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 hacia / desde 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.