En esta página, se describen los errores y las herramientas de seguridad de la memoria.
Inseguridad de la memoria
Los errores de seguridad de la memoria, que son errores en el manejo de la memoria en lenguajes de programación nativos, son el problema más común en las bases de código de Android. Representan más del 60% de las vulnerabilidades de seguridad graves y millones de fallas visibles para el usuario.
Figura 1: Errores de seguridad de la memoria y su impacto negativo en la calidad, la seguridad y los costos
Los errores de seguridad de la memoria afectan negativamente la calidad y la estabilidad, y representan una
parte importante de las fallas observadas en los dispositivos del usuario final. Por lo tanto, una alta
densidad de errores de seguridad de la memoria se correlaciona directamente con una mala experiencia del usuario.
El código nativo, escrito en lenguajes no seguros para la memoria, como C, C++ y Assembly
representa más del 70% del código de la plataforma de Android y está presente en aproximadamente
el 50% de las apps de Google Play Store.
Dada la creciente complejidad del código, si no se abordan, los errores de seguridad de la memoria aumentarán con el tiempo. Por lo tanto, proporcionar a nuestro ecosistema
las herramientas y tecnologías que puedan detectar y mitigar esos errores es
fundamental para nuestro éxito a largo plazo.
En los últimos años, trabajamos en estrecha colaboración con nuestros socios de hardware
para desarrollar tecnologías de hardware, como el etiquetado de memoria de Arm, y presentamos Rust en la base de código de Android.
Estas tecnologías acelerarán nuestro camino hacia la seguridad de la memoria y
ayudarán a la industria del software en general a abordar un área problemática clave.
Los errores de seguridad de la memoria afectan negativamente la calidad
Los errores de seguridad de la memoria latentes pueden causar resultados no deterministas, según el estado del sistema. Este comportamiento impredecible provoca fallas y molestias para nuestros usuarios.
Todos los días, observamos millones de fallas nativas en dispositivos del usuario final y
con la introducción de GWP-ASan, la mayoría de ellas se atribuyen a errores de seguridad de la memoria.
Este punto de datos valida la correlación entre la calidad
y la densidad de los errores de seguridad de la memoria, y está en consonancia con lo que observan nuestros colegas de Chrome (consulta la lista de errores de GWP-ASan de Chrome).
Los errores de seguridad de la memoria afectan negativamente la seguridad
Los errores de seguridad de la memoria siempre fueron el principal factor que contribuye a las vulnerabilidades de seguridad de Android, desde la primera versión de Android.
Figura 2: Contribución de los errores de seguridad de la memoria a las vulnerabilidades de Android
Si bien es alentador saber que este no es solo un problema de Android
(consulta las estadísticas de Chrome
y Microsoft
), debemos hacer más por la seguridad de nuestros usuarios.
El equipo de Project Zero
de Google hace un seguimiento
de los exploits de día cero que se usaron en ataques reales contra los usuarios como vulnerabilidades de día cero. No se trata de errores hipotéticos, sino de exploits que se usan de forma activa en
ataques contra los usuarios. Los errores de seguridad de la memoria (corrupción de la memoria y uso después de liberar)
representan una mayoría abrumadora.
Los errores de seguridad de la memoria aumentan los costos
Mantener los dispositivos actualizados con correcciones de seguridad protege a nuestros usuarios, pero tiene un costo monetario para nuestro ecosistema.
La alta densidad de errores de seguridad de la memoria en el código de proveedor de bajo nivel, que a menudo tiene modificaciones personalizadas, aumenta significativamente los costos de corrección y pruebas. Sin embargo, detectar estos errores de forma temprana durante el ciclo de desarrollo puede reducir estos costos.
La investigación muestra que detectar errores antes puede reducir los costos hasta seis veces. Sin embargo, dada la complejidad de nuestro ecosistema, la cantidad promedio de bases de código que mantiene un proveedor y la creciente complejidad del software, los ahorros podrían ser mayores.
Seguridad de la memoria
Android 12 y versiones posteriores incluyen cambios sistémicos para reducir la densidad de errores de seguridad de la memoria en las bases de código de Android. Estamos extendiendo las herramientas de seguridad de la memoria de Android y presentando nuevos requisitos que alientan a nuestro ecosistema a abordar esta categoría de errores. Con el tiempo, esto debería traducirse en una mayor calidad y seguridad para nuestros usuarios, y en costos más bajos para nuestros proveedores.
Es probable que la seguridad de la memoria se convierta en un diferenciador de calidad y seguridad en los próximos años, y Android planea liderar el camino.
Requisitos en apoyo de la seguridad de la memoria
El Documento de definición de compatibilidad de Android (CDD) recomienda el uso de herramientas de seguridad de la memoria durante el desarrollo.
Trabajamos en estrecha colaboración con nuestro ecosistema para aumentar el uso de herramientas de seguridad de la memoria y para integrarlas en los procesos de integración continua y pruebas.
Con el tiempo, nos gustaría asegurarnos de que cada dispositivo pase una ejecución completa del Conjunto de pruebas de compatibilidad (CTS) con herramientas de seguridad de la memoria, lo que demuestra que no se encontraron errores de este tipo. Por ejemplo, las plataformas Arm v9 deberán proporcionar una ejecución de CTS con el etiquetado de memoria habilitado, mientras que las plataformas Arm v8 deberán proporcionar una ejecución de CTS con HWASAN y KASAN.
Rust como un nuevo lenguaje de programación para el código de la plataforma
Android 12 introdujo Rust como lenguaje de plataforma. Rust proporciona seguridad de memoria y de subprocesos en niveles de rendimiento similares a C/C++. Esperamos que Rust sea la opción preferida para la mayoría de los proyectos nativos nuevos. Sin embargo, no es posible reescribir todo el código no seguro para la memoria, que actualmente representa más del 70% de la plataforma de Android, en Rust. En el futuro, Rust será complementario a las herramientas de seguridad de la memoria.
Herramientas de seguridad de la memoria
Android admite una amplia variedad de herramientas que ayudan a detectar errores de seguridad de la memoria. En la siguiente figura, se presenta una taxonomía de las herramientas de seguridad de la memoria de Android disponibles.

Figura 3: Panorama de las herramientas de seguridad de la memoria de Android
Nuestras herramientas abarcan una amplia gama de situaciones y objetivos de implementación. En la documentación de esta sección, se describe cada herramienta y se proporciona una referencia para usarlas en tus productos.