Los ingenieros de Google han presentado los primeros resultados sobre la implementación del soporte para el desarrollo en el lenguaje Rust en la plataforma Android. En Android 13, aproximadamente el 21% del nuevo código compilable agregado está escrito en Rust, mientras que el 79% está en C/C++. En el repositorio AOSP (Proyecto de Código Abierto de Android), hay aproximadamente 1.5 millones de líneas de código en Rust, relacionado con nuevos componentes como el almacenamiento de claves criptográficas Keystore2, la pila para chips UWB (Ultra Wideband), la implementación del protocolo DNS-over-HTTP3, el marco de virtualización AVF (Marco de Virtualización de Android) y pilas experimentales para Bluetooth y Wi-Fi.

De acuerdo con la estrategia previamente establecida para reducir el riesgo de vulnerabilidades causadas por errores en el manejo de la memoria, el lenguaje Rust se aplica principalmente en el desarrollo de nuevo código y para fortalecer gradualmente la seguridad de los componentes de software más vulnerables y críticos. No se establece un objetivo general de migrar toda la plataforma a Rust, y el código antiguo permanece en C/C++, mientras que la lucha contra los errores en este se realiza a través de la aplicación de pruebas de fuzzing, análisis estático y técnicas de desarrollo como el uso de MiraclePtr (una envoltura sobre punteros en crudo que realiza comprobaciones adicionales de acceso a áreas de memoria liberadas), el sistema de distribución de memoria Scudo (una alternativa segura a malloc/free) y los mecanismos de detección de errores en el manejo de la memoria como HWAsan (AddressSanitizer asistido por hardware), GWP-ASAN y KFENCE.
En cuanto a la estadística sobre la naturaleza de las vulnerabilidades en la plataforma Android, se observa que a medida que disminuye la cantidad de nuevo código que opera de manera insegura con la memoria, también se reduce el número de vulnerabilidades causadas por errores en el manejo de la memoria. Por ejemplo, la proporción de vulnerabilidades causadas por problemas de memoria se redujo del 76% en 2019 al 35% en 2022. En números absolutos, en 2019 se detectaron 223 vulnerabilidades relacionadas con la memoria, en 2020 — 150, en 2021 — 100, y en 2022 — 85 (todas las vulnerabilidades señaladas en el código en C/C++, hasta ahora no se han encontrado problemas similares en el código en Rust). El año 2022 fue el primero en el que las vulnerabilidades relacionadas con la memoria dejaron de dominar.

Dado que las vulnerabilidades relacionadas con la gestión de la memoria suelen ser las más peligrosas, las estadísticas generales también muestran una disminución en el número de problemas críticos y aquellos que pueden ser explotados de forma remota. Sin embargo, la dinámica de detección de vulnerabilidades no relacionadas con la memoria se ha mantenido, durante los últimos 4 años, en un nivel más o menos constante: 20 vulnerabilidades al mes. También se mantiene la proporción de problemas peligrosos entre las vulnerabilidades causadas por errores en la gestión de la memoria (pero dado que el número de estas vulnerabilidades está disminuyendo, también lo está el número de problemas peligrosos).

Las estadísticas también muestran una correlación entre la cantidad de nuevo código que gestiona la memoria de forma insegura y el número de vulnerabilidades relacionadas con la memoria (desbordamiento de búfer, accesos a memoria ya liberada, etc.). Esta observación confirma la suposición de que el enfoque principal al implementar técnicas de programación segura debe estar en el nuevo código, en lugar de reescribir el existente, ya que la mayoría de las vulnerabilidades detectadas provienen del nuevo código.

Fuente: opennet.ru
