Rust se incluye entre los principales lenguajes para el desarrollo de plataformas Android

Google ha anunciado la inclusión del lenguaje de programación Rust entre los lenguajes permitidos para desarrollar la plataforma Android. El compilador del lenguaje Rust se incluyó en el árbol fuente de Android en 2019, pero la compatibilidad con este lenguaje siguió siendo experimental. Algunos de los primeros componentes de Rust planeados para Android incluyen nuevas implementaciones del mecanismo de comunicación entre procesos de Binder y la pila Bluetooth.

La introducción de Rust se llevó a cabo como parte de un proyecto para fortalecer la seguridad, promover técnicas de programación seguras y aumentar la eficiencia en la identificación de problemas al trabajar con memoria en Android. Cabe señalar que alrededor del 70% de todas las vulnerabilidades peligrosas identificadas en Android se deben a errores al trabajar con la memoria. El uso de Rust, que se centra en la seguridad de la memoria y la gestión automática de la memoria, reducirá el riesgo de vulnerabilidades causadas por errores de memoria, como el acceso posterior a la liberación y las saturaciones del búfer.

Rust refuerza la seguridad de la memoria en tiempo de compilación mediante la verificación de referencias, la propiedad de los objetos y el seguimiento de la vida útil de los objetos (alcances), y mediante la evaluación de la exactitud de los accesos a la memoria en tiempo de ejecución. Rust también brinda protección contra desbordamientos de enteros, requiere que los valores de las variables se inicialicen antes de su uso, tiene un mejor manejo de errores en la biblioteca estándar, utiliza el concepto de referencias y variables inmutables de forma predeterminada y ofrece tipos estáticos sólidos para minimizar los errores lógicos.

En Android, la seguridad de la memoria se proporciona en los lenguajes Kotlin y Java que ya son compatibles, pero no son adecuados para desarrollar componentes del sistema debido a su gran sobrecarga. Rust permite lograr un rendimiento cercano al de los lenguajes C y C++, lo que permite su uso para desarrollar partes de plataforma de bajo nivel y componentes para interactuar con el hardware.

Para garantizar la seguridad del código C y C++, Android utiliza aislamiento sandbox, análisis estático y pruebas de fuzzing. Las capacidades del aislamiento de la zona de pruebas son limitadas y han alcanzado el límite de sus capacidades (una mayor fragmentación en procesos no es práctica desde el punto de vista del consumo de recursos). Las limitaciones del uso de Sandbox incluyen grandes costos generales y un mayor consumo de memoria causado por la necesidad de generar nuevos procesos, así como retrasos adicionales asociados con el uso de IPC.

Al mismo tiempo, Sandbox no elimina las vulnerabilidades en el código, 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 basados ​​​​en pruebas de código tienen la limitación de que para identificar errores es necesario crear las 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 debe cumplir no más de dos de tres condiciones: trabajar con datos de entrada no validados, usar un lenguaje de programación no seguro (C/C++) y ejecutándose sin un aislamiento estricto de la zona de pruebas (con privilegios elevados). Esta regla implica 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 pretende reescribir el código C/C++ existente en Rust, pero planea utilizar este lenguaje para desarrollar código nuevo. Tiene sentido usar Rust para código nuevo porque, estadísticamente, la mayoría de los errores aparecen en código nuevo o modificado recientemente. 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.

Rust se incluye entre los principales lenguajes para el desarrollo de plataformas Android


Fuente: opennet.ru

Añadir un comentario