El equipo de Android analiza la introducción gradual de Rust en el firmware para reducir las vulnerabilidades de seguridad y aumentar la seguridad de la memoria.
Android ha estado confiando en lenguajes de programación seguros para la memoria como Rust, durante algún tiempo para aumentar la seguridad del sistema operativo.
Ahora, este enfoque también se está extendiendo al firmware, especialmente en áreas críticas para la seguridad.
[content-egg module=Amazon products=”es-B0CR3V96YB” template=list]
El blog de seguridad de Google presenta un artículo del equipo de Android en el que los dos autores, Ivan Lozano y Dominik Maier, explican las ventajas y el proceso de introducción de Rust en las bases de código de firmware existentes.
Seguridad de memoria para firmware
El firmware actúa como una interfaz entre el hardware y el software de mayor calidad y según la publicación del blog, a menudo está escrito en lenguajes de programación más inseguros como C o C ++.
Aparentemente, estos lenguajes son vulnerables a vulnerabilidades que los atacantes pueden explotar.
Para los autores del artículo, Rust ofrece una alternativa segura para la memoria con un rendimiento comparable y está destinado a permitir la interoperabilidad con C sin sobrecarga adicional.
Lanzamiento gradual de Rust
La introducción de Rust en las bases de código de firmware existentes se llevará a cabo gradualmente. En primer lugar, se van a sustituir las secciones del código nuevas y especialmente arriesgadas.
[content-egg module=Amazon products=”es-B0CR1GX89P” template=list]
Esto incluye principalmente código que controla entradas externas que no son de confianza. Al utilizar Rust para nuevos desarrollos y la sustitución gradual de los componentes existentes, el número de vulnerabilidades de seguridad debería reducirse a largo plazo.
Desafíos técnicos
Sin embargo, la introducción de Rust en el firmware requiere algunos ajustes técnicos. Esto incluye, por ejemplo, el uso de Rust para usar Rust sin la biblioteca estándar, la creación de enlaces de interfaz de función extranjera (FFI) para interactuar con el código C existente y la adaptación a entornos bare metal donde no hay un sistema operativo.
A la hora de seleccionar las bibliotecas de Rust adecuadas, deben estar bien documentadas, probadas y ser compatibles, según la entrada del blog.
En los casos en los que las bibliotecas no son compatibles, se pueden portar. Sin embargo, este procedimiento requiere ajustes en el código para quitar la dependencia de la biblioteca estándar.
Creación de una pequeña capa de Rust
Una corrección de compatibilidad en Rust se utiliza para integrar las API de C/C++ existentes. Aparentemente, esto permite el uso de funciones seguras de Rust en el firmware.
[content-egg module=Amazon products=”es-B0CR1F2812″ template=list]
Se introducirá una pequeñaa capa delgada de Rust o se requerirá de un adaptador que se utiliza para integrar el código de Rust en sistemas existentes escritos en otro lenguaje de programación (generalmente C o C ++).
El Shim asume la tarea de replicar las interfaces (API) de las bibliotecas o funciones existentes, lo que permite una interoperabilidad perfecta entre Rust y el otro lenguaje de programación.
Optimizaciones de la superficie de almacenamiento
Para optimizar el rendimiento y la superficie de memoria, el equipo de Android recomienda usar la optimización de tiempo de enlace (LTO) y otras configuraciones del compilador.
Estas optimizaciones pueden reducir el tamaño de salida de la biblioteca y mejorar el rendimiento.
[content-egg module=Amazon products=”es-B0CR16KX25″ template=list]
Se puede encontrar más información sobre la introducción gradual de Rust en las bases de código de firmware existentes en el artículo del blog de seguridad de Google.