MTE se puede habilitar de forma independiente en el kernel de Android y en cualquier proceso del sistema Android. Google no exige ninguna configuración específica y su objetivo es brindar la máxima flexibilidad a los fabricantes de dispositivos.
Este documento describe la configuración y el alcance de MTE que, en nuestra opinión, proporciona un buen equilibrio entre seguridad y costo para los usuarios de Android como mitigación de vulnerabilidades siempre activa.
Núcleo
MTE en el kernel se configura a través de la línea de comando. El valor predeterminado es ENCENDIDO en el modo Sincronización. Esto está sujeto a cambios futuros por varias razones:
- Se ha demostrado que afecta significativamente el rendimiento y necesita trabajo de optimización.
- La calidad del código kernel se percibe ampliamente como insuficiente para enviar MTE en el modo de cumplimiento (es decir, pánico en caso de falla).
La recomendación actual es deshabilitar el kernel MTE en dispositivos de producción. Para hacer esto, agregue kasan=off
a la línea de comando del kernel.
Espacio de usuario
Google proporciona una lista predeterminada de archivos binarios del espacio de usuario que se protegerán con MTE. La lista se compuso con los aportes de Android Security e incluye componentes que tienen privilegios y/o manejan entradas que no son de confianza. La lista actualizada de archivos binarios nativos recomendados con MTE se puede encontrar en el archivo memtag-common.mk en el sistema de compilación de Android. Además, también se incluyen varias aplicaciones del sistema : actualmente, Nfc, Bluetooth y SecureElement. Estos archivos binarios y aplicaciones están habilitados en modo asíncrono de forma predeterminada.
La recomendación actual es utilizar la lista de objetivos predeterminada (no se requieren cambios). Además, se recomienda evaluar las adiciones de BSP y OEM al sistema central y habilitar MTE en aquellos que son sensibles a la seguridad.
Aplicaciones
Las tres aplicaciones del sistema enumeradas anteriormente son las únicas que utilizan MTE en este momento. Para que una aplicación de terceros habilite MTE, su AndroidManifest.xml
deberá especificar android:memtagMode
con un valor distinto de off
. Por lo tanto, los conjuntos de pruebas comunes como Geekbench o AnTuTu no se ejecutan con MTE. Si el kernel MTE también está deshabilitado (consulte kasan=off
arriba), entonces se espera que los puntos de referencia muestren un impacto en el rendimiento muy limitado, si es que alguno.
En cuanto a las otras aplicaciones, existe un desarrollo activo de la compatibilidad con MTE en Chrome. La versión actual de Play Store de Chrome incluye la configuración memtagMode=async
en el manifiesto. También esperamos que varias aplicaciones preocupadas por la seguridad en el ecosistema de Android (por ejemplo, aplicaciones bancarias) hagan lo mismo eventualmente. Por otro lado, esperamos que algunas aplicaciones que exigen un rendimiento máximo de la CPU, como los juegos, opten por mantener MTE desactivado.
Otros modos
Las instrucciones anteriores utilizan únicamente el modo MTE asíncrono en todas partes. Dependiendo del hardware, otros modos pueden ser casi o exactamente igual de rápidos. También proporcionan mejores diagnósticos y propiedades de mitigación de vulnerabilidades algo más fuertes.
Recomendamos probar una o dos configuraciones más para ver si son lo suficientemente buenas para sus requisitos de rendimiento/potencia. Los modos MTE se pueden configurar para cada núcleo de CPU del sistema escribiendo en /sys/devices/system/cpu/cpu*/mte_tcf_preferred
. Por ejemplo, escribir sync
(o asymm
) provocaría que cualquier proceso de espacio de usuario que haya solicitado el modo Async se actualice automáticamente de forma silenciosa a Sync (o Asymm) mientras se ejecuta en ese núcleo. Esta configuración se puede realizar en un archivo .rc en el momento del inicio del dispositivo.
Recomendamos medir una o dos configuraciones más para verificar si satisfacen sus requisitos de rendimiento y energía. Algunas configuraciones interesantes para explorar:
- Asimismo en todos los núcleos.
- Asymm en núcleos grandes, sincronización en otros núcleos.
Para verificar que un proceso solicita el modo asíncrono (con posible actualización automática), verifique que la siguiente línea incluya PR_MTE_TCF_SYNC y PR_MTE_TCF_ASYNC :
debuggerd| head -30 | grep tagged_addr
Desafortunadamente, no existe una manera fácil de ver el modo efectivo de un proceso; pero cualquier proceso que muestre ambos valores enumerados anteriormente está sujeto al comportamiento de actualización automática.