Seguridad de la memoria

Inseguridad de la memoria

Los errores de seguridad de la memoria, 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 de alta gravedad y millones de fallos visibles para los usuarios.

Los errores de seguridad de la memoria afectan la experiencia del usuario, los costos y la seguridad.
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 los fallos observados en los dispositivos de los usuarios finales. 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 memoria en lenguajes inseguros como C, C++ y Assembly, representa más del 70% del código de la plataforma Android y está presente en aproximadamente el 50% de las aplicaciones de Play Store.
Dada la complejidad cada vez mayor del código, si no se atienden, 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 dichos errores es fundamental para nuestro éxito a largo plazo.
Durante los últimos años, hemos estado trabajando estrechamente con nuestros socios de hardware para desarrollar tecnologías de hardware como Arm Memory Tagging y hemos introducido Rust en el código base 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 latente pueden provocar 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 fallos nativos en los dispositivos de los usuarios finales y, con la introducción de GWP-ASan , hemos rastreado la mayoría de ellos hasta 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á alineado con lo que observan nuestros colegas de Chrome (consulte la lista de errores de Chrome GWP-ASan ).

Los errores de seguridad de la memoria afectan negativamente a la seguridad

Los errores de seguridad de la memoria han sido consistentemente el principal contribuyente a las vulnerabilidades de seguridad de Android, desde la primera versión de Android.

Los errores de seguridad de la memoria afectan negativamente a la seguridad.
Figura 2 : Contribución de los errores de seguridad de la memoria a las vulnerabilidades de Android

Si bien es alentador saber que esto no es sólo un problema de Android (consulte las estadísticas de Chrome y Microsoft ), debemos hacer más por la seguridad de nuestros usuarios.
El equipo de Project Zero de Google rastrea los exploits de día cero que se han utilizado en ataques reales contra usuarios como vulnerabilidades de día cero. Estos no son errores hipotéticos, sino exploits utilizados activamente en ataques contra usuarios. Los errores de seguridad de la memoria (corrupción de la memoria y uso después de la liberación) constituyen una abrumadora mayoría.

Los errores de seguridad de la memoria aumentan los costos

Mantener los dispositivos actualizados con correcciones de seguridad mantiene a nuestros usuarios seguros, pero conlleva un costo monetario para nuestro ecosistema.

La alta densidad de errores de seguridad de la memoria en el código del proveedor de bajo nivel, que a menudo tiene modificaciones personalizadas, aumenta significativamente los costos de corrección y prueba. Sin embargo, la detección temprana de estos errores durante el ciclo de desarrollo puede reducir estos costos.

Las investigaciones muestran 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 mantenidas por un proveedor y la complejidad cada vez mayor del software, los ahorros podrían ser mayores.

Seguridad de la memoria

A partir de Android 12, realizamos cambios sistémicos para reducir la densidad de errores de seguridad de la memoria en las bases de código de Android. Estamos ampliando las herramientas de seguridad de la memoria de Android e introduciendo nuevos requisitos que alientan a nuestro ecosistema a abordar esta categoría de errores. Con el tiempo, esto debería traducirse en mayor calidad y mejor seguridad para nuestros usuarios y menores costos 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 que respaldan la seguridad de la memoria

El Documento de definición de compatibilidad (CDD) de Android recomienda encarecidamente el uso de herramientas de seguridad de memoria durante el desarrollo.
Estamos trabajando estrechamente con nuestro ecosistema para aumentar el uso de herramientas de seguridad de la memoria e integrarlas en los procesos continuos de integración y prueba.
Con el tiempo, nos gustaría asegurarnos de que cada dispositivo pase una ejecución completa del conjunto de pruebas de compatibilidad ( CTS ), utilizando herramientas de seguridad de memoria, lo que demuestra que no se encontraron tales errores. Por ejemplo, las plataformas Arm v9 deberán proporcionar una ejecución CTS con el etiquetado de memoria habilitado, mientras que las plataformas Arm v8 deberán proporcionar una ejecución CTS utilizando HWASAN y KASAN.

Rust como nuevo lenguaje de programación para código de plataforma

Android 12 introdujo Rust como lenguaje de plataforma . Rust proporciona seguridad de memoria y subprocesos a 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, reescribir en Rust todo el código inseguro de la memoria, que actualmente representa más del 70% del código de la plataforma Android, no es factible. 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. La siguiente figura presenta una taxonomía de las herramientas de seguridad de memoria de Android disponibles.

Los errores de seguridad de la memoria afectan negativamente a la seguridad.
Figura 3 : panorama de las herramientas de seguridad de la memoria de Android

Nuestras herramientas cubren una amplia gama de escenarios y objetivos de implementación. La siguiente documentación describe cada herramienta y proporciona una referencia para usarlas en sus productos.