Google utilizará Rust para evitar errores de memoria en el sistema operativo Android , una de las causas más frecuentes de vulnerabilidades de seguridad. Como primer paso en esta dirección, el proyecto de código abierto de Android ahora es compatible con Rust como lenguaje de desarrollo de SO. Según Jeff Vander Stoep y Stephen Hines, ingenieros del equipo de Android.
Los errores de seguridad de la memoria en C y C ++ siguen siendo la fuente de errores más difícil de solucionar. Invertimos una gran cantidad de esfuerzo y recursos para detectar, corregir y mitigar esta clase de errores, y estos esfuerzos son efectivos para evitar que una gran cantidad de errores se incluyan en las versiones de Android.El problema es que C / C ++ puede ser difícil de hacer bien , especialmente con código complejo o de múltiples subprocesos, y esto conduce a errores de memoria que, a pesar de todos los esfuerzos de prevención, representan aproximadamente el 70% de las vulnerabilidades de seguridad de alta gravedad de Android .
Si bien gran parte del ecosistema de Android, incluidas las aplicaciones y la mayoría de los marcos de alto nivel, están escritos en Java o Kotlin, que proporcionan un entorno de administración de memoria más seguro, los componentes de nivel inferior del sistema operativo están escritos en C / C ++. Entre ellos se incluyen el cargador de arranque, el hipervisor, los controladores y muchos más.El enfoque tradicional para hacer que el código C / C ++ sea menos incorrecto y, por lo tanto, seguro, es la detección de errores. Esto es crucial en todos los idiomas, dicen los ingenieros de Google, aunque ineficiente y costoso. Esto se debe principalmente a que los errores son difíciles de detectar y costosos de corregir.
Un enfoque eficaz para hacer que el código C / C ++ sea menos inseguro es el sandboxing, que tiene sus propios costos, dicen los dos ingenieros de Android. Dichos costos incluyen una mayor sobrecarga y latencia y un mayor consumo de memoria. Además, el sandboxing no descarta la posibilidad de encadenar vulnerabilidades presentes en diferentes componentes .Gracias a las funciones de Rust, Google espera reducir la densidad de errores, lo que a su vez debería permitir reemplazar el sandboxing con un mecanismo más ligero.
Cuando se trata de decidir qué partes del sistema operativo Android reescribir en Rust, una observación clave es que los componentes más antiguos suelen ser más seguros:
La mayoría de nuestros errores de memoria ocurren en código nuevo o modificado recientemente, y aproximadamente el 50% tiene menos de un año. […] La rareza comparativa de los errores de memoria más antiguos puede resultar una sorpresa para algunos, pero hemos descubierto que el código antiguo no es donde necesitamos mejorar con mayor urgencia.
Los ingenieros de Google han estado trabajando para agregar Rust a la plataforma Android durante los últimos 18 meses y esperan que todo el proceso requiera años. Uno de los primeros proyectos que se reescribió en Rust fue la pila Bluetooth de Android . Otro componente de Android escrito en Rust es Keystore 2.0 .