Rust ya es uno de los favoritos para desarrollo de Android
Google dio a conocer hace poco la inclusión del lenguaje de programación Rust entre los lenguajes permitidos para el desarrollo de Android.
Ya que el compilador de Rust se incluyó en el árbol de fuentes de Android en 2019, pero la compatibilidad con el lenguaje siguió siendo experimental. Algunos de los primeros componentes de Rust que se envÃan a Android son nuevas implementaciones del mecanismo de comunicación entre procesos de Binder y la pila de Bluetooth.
La implementación de Rust se llevó a cabo como parte de un proyecto para fortalecer la seguridad, promover técnicas de codificación segura y mejorar la eficiencia de identificación de problemas al trabajar con memoria en Android. Se observa que alrededor del 70% de todas las vulnerabilidades peligrosas identificadas en Android son causadas por errores al trabajar con memoria.
El uso del lenguaje Rust, que se centra en el manejo seguro de la memoria y proporciona administración automática de la memoria, reducirá el riesgo de vulnerabilidades causadas por errores durante el manejo de la memoria, como acceder a un área de memoria después de que se haya liberado y desbordar los lÃmites del búfer.
El manejo seguro de la memoria está garantizado en Rust en el momento de la compilación mediante la verificación de referencias, el seguimiento de la propiedad del objeto y la vida útil del objeto (alcance), asà como mediante la evaluación de la corrección del acceso a la memoria en el tiempo de ejecución.
Rust también proporciona medios para protegerse contra desbordamientos de enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, adopta el concepto de referencias y variables inmutables de forma predeterminada y ofrece una fuerte escritura estática para minimizar los errores lógicos.
En Android, la gestión segura de la memoria se proporciona en los lenguajes Kotlin y Java ya compatibles, pero no son adecuados para desarrollar componentes del sistema debido a la gran sobrecarga.
Rust permite lograr un rendimiento cercano a los lenguajes C y C ++, lo que permite que se utilice para desarrollar partes de bajo nivel de la plataforma y componentes para interactuar con el hardware.
Para garantizar la seguridad del código C y C ++, Android usa aislamiento de espacio aislado, análisis estático y pruebas de fuzzing. Las capacidades del aislamiento de sandbox son limitadas y han alcanzado el lÃmite de sus capacidades (una mayor fragmentación en los procesos no es práctica desde el punto de vista del consumo de recursos).
Entre las limitaciones de usar sandbox, mencionan la alta sobrecarga y el mayor consumo de memoria causado por la necesidad de generar nuevos procesos, asà como la latencia adicional asociada con el uso de IPC.
Al mismo tiempo, el sandbox no elimina vulnerabilidades en el código, sino que solo reduce los riesgos y complica el ataque, ya que la explotación requiere la identificación no de una, sino de varias vulnerabilidades.
Los métodos de prueba de código están limitados porque, para detectar errores, es necesario crear condiciones para la manifestación del problema. No es posible abarcar todas las opciones posibles, por lo que muchos errores pasan desapercibidos.
Para los procesos del sistema en Android, Google se adhiere a la «regla de dos», según la cual cualquier código agregado no debe cumplir más de dos de tres condiciones: trabajar con datos de entrada no verificados, usar un lenguaje de programación inseguro (C/C++) y ejecutarse sin aislamiento de espacio aislado rÃgido (con privilegios elevados).
De esta regla se deduce que el código para procesar datos externos debe reducirse a privilegios mÃnimos (aislado) o escribirse en un lenguaje de programación seguro.
Google no tiene como objetivo reescribir el código C/C ++ existente en Rust, pero planea usar este lenguaje para desarrollar código nuevo.
Tiene sentido usar Rust para código nuevo, ya que estadÃsticamente la mayorÃa de los errores aparecen en código nuevo o recientemente modificado. En particular, alrededor del 50% de los errores de memoria detectados en Android se detectan en código escrito hace menos de un año.
Fuente: https://security.googleblog.com