Configuración de MTE

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 proporcionar la máxima flexibilidad a los creadores de dispositivos.

En este documento, se describe la configuración y el alcance de la MTE que, en nuestra opinión, proporciona una buena compensación entre seguridad y costo para los usuarios de Android como mitigación de vulnerabilidades siempre activa.

Kernel

MTE en el kernel se configura a través de la línea de comandos. La configuración predeterminada está ACTIVADA en el modo de sincronización. Esto está sujeto a cambios futuros por varios motivos:

  • Se demostró que afecta significativamente el rendimiento y necesita trabajo de optimización.
  • Se cree ampliamente que la calidad del código del kernel es insuficiente para enviar MTE en el modo de aplicación forzosa (es decir, error irrecuperable).

La recomendación actual es inhabilitar MTE del kernel en los dispositivos de producción. Para ello, agrega kasan=off a la línea de comandos del kernel.

Espacio del usuario

Google proporciona una lista predeterminada de objetos binarios de espacio de usuario que se protegerán con MTE. La lista se compiló con la entrada de Android Security y, además, incluye componentes que tienen privilegios o manejan entradas no confiables. La lista actualizada de binarios nativos que se recomiendan con MTE se puede encontrar en el archivo memtag-common.mk del sistema de compilación de Android. Además, también se incluyen varias apps del sistema: actualmente, NFC, Bluetooth y SecureElement. Estos objetos binarios y apps están habilitados en el modo asíncrono de forma predeterminada.

La recomendación actual es usar la lista de objetivos predeterminada (no se requieren cambios). Además, se recomienda evaluar las incorporaciones de BSP y OEM al sistema principal y habilitar MTE en los que sean sensibles a la seguridad.

Apps

Las tres apps del sistema que se mencionaron anteriormente son las únicas que usan MTE en este momento. Para que una app de terceros habilite la MTE, su AndroidManifest.xml debería especificar android:memtagMode con un valor distinto de off. Por lo tanto, los paquetes de comparativas comunes, como Geekbench o AnTuTu, no se ejecutan con MTE. Si también se inhabilita la MTE del kernel (consulta kasan=off más arriba), se espera que las comparativas muestren un impacto de rendimiento muy limitado, si es que lo hacen.

En el caso de las otras apps, se está desarrollando activamente la compatibilidad con MTE en Chrome. La versión actual de Chrome de Play Store incluye la configuración de memtagMode=async en el manifiesto. También esperamos que, con el tiempo, algunas apps centradas en la seguridad del ecosistema de Android (por ejemplo, las apps bancarias) hagan lo mismo. Por otro lado, esperamos que algunas apps que demanden un rendimiento máximo de la CPU, como los juegos, elijan mantener inhabilitada la MTE.

Otros modos

En las instrucciones anteriores, solo se usa el modo MTE asíncrono en todas partes. Según el hardware, es posible que otros modos sean casi tan rápidos o exactamente igual de rápidos. También proporcionan mejores diagnósticos y propiedades de mitigación de vulnerabilidades más sólidas.

Te recomendamos que pruebes una o dos configuraciones más para ver si son lo suficientemente buenas para tus requisitos de rendimiento o energía. Los modos de 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) causaría que cualquier proceso de espacio de usuario que haya solicitado el modo asíncrono se actualice automáticamente en silencio a Sync (o Asymm) mientras se ejecuta en ese núcleo. Esta configuración se puede realizar en un archivo .rc durante el inicio del dispositivo.

Te recomendamos que midas una o dos configuraciones más para verificar si cumplen con tus requisitos de rendimiento y energía. Estas son algunas configuraciones interesantes que puedes explorar:

  • Asymm en todos los núcleos.
  • Asymm en núcleos grandes, Sync en otros núcleos.

Para verificar que un proceso solicite el modo asíncrono (con posible actualización automática), verifica que la siguiente línea incluya PR_MTE_TCF_SYNC y PR_MTE_TCF_ASYNC:

  debuggerd <PID> | head -30 | grep tagged_addr

Lamentablemente, no hay una manera fácil de ver el modo efectivo de un proceso, pero cualquier proceso que muestre ambos valores mencionados anteriormente está sujeto al comportamiento de actualización automática.