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 fallas visibles para el usuario.

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 tienen un impacto negativo en la calidad y la estabilidad y representan una parte significativa de los bloqueos 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 experiencia de usuario deficiente.
El código nativo, escrito en lenguajes inseguros para la memoria 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 pueden detectar y mitigar dichos errores es fundamental para nuestro éxito a largo plazo.
Durante los últimos años, hemos estado trabajando en estrecha colaboración con nuestros socios de hardware para desarrollar tecnologías de hardware como Arm Memory Tagging y hemos introducido 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 latente pueden causar resultados no deterministas, según el estado del sistema. Este comportamiento impredecible provoca bloqueos y molestias para nuestros usuarios.

Todos los días observamos millones de bloqueos nativos de dispositivos de 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 constantemente 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 solo 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 en Google rastrea las vulnerabilidades 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 que se utilizan 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) comprenden una abrumadora mayoría.

Los errores de seguridad de la memoria aumentan los costos

Mantener los dispositivos actualizados con correcciones de seguridad mantiene seguros 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, la detección temprana de estos errores durante el ciclo de desarrollo puede reducir estos costos.

La investigación muestra que la detección temprana de errores 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 los 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 animan 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 la calidad y la 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 encarecidamente el uso de herramientas de seguridad de la memoria durante el desarrollo.
Estamos trabajando en estrecha colaboración 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 la memoria, lo que demuestra que no se encontraron tales errores. 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 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 nuevos proyectos nativos. Sin embargo, reescribir todo el código inseguro de la memoria, que actualmente representa más del 70 % del código de la plataforma Android, en Rust no es factible. En el futuro, Rust será complementario a las herramientas de seguridad de la memoria.

Herramientas de seguridad de la memoria

Android es compatible con 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.