Google introduce Rust en el firmware de banda base del Pixel 10
(security.googleblog.com)Google introdujo en el firmware de banda base celular (módem) del Pixel 10 un parser de DNS basado en Rust, un lenguaje con seguridad de memoria.
Es una medida preventiva para reducir la familia de vulnerabilidades de seguridad de memoria en la banda base, cuya superficie de ataque remoto es amplia.
Puntos clave
- En el Pixel 9 se aplicaron mitigaciones para vulnerabilidades de seguridad de memoria, y en el Pixel 10 se dio un paso más al incorporar código Rust directamente en el firmware de la banda base.
- El primer objetivo de esta implementación es el parser de DNS. DNS se usa no solo en el navegador, sino también en funciones básicas de telecomunicaciones móviles como el desvío de llamadas, y al parsear directamente datos no confiables es un área propensa a vulnerabilidades.
- Google adoptó la biblioteca open source de DNS para Rust
hickory-proto. Valoró especialmente su estado de mantenimiento, cobertura de pruebas y nivel de adopción en la comunidad. - Sin embargo, faltaba soporte de
no_std, necesario para entornos bare-metal, por lo que Google añadió directamente soporte deno_stda los crates relacionados y sus dependencias, y contribuyó esos cambios upstream. - El tamaño del código se midió en aproximadamente 371 KB. De eso, 350 KB corresponden a
hickory-protoy sus dependencias, 17 KB acore,allocycompiler_builtins, y 4 KB al código shim que conecta con el módem. - En lugar de usar Cargo para unir varios
staticlibindependientes, Google eligió integrar directamente la etapa de compilación de Rust en el sistema de build existente del módem (Pigweed/GN). - El asignador de memoria y el manejo de panic de Rust también se integraron conectándolos por FFI con el allocator y el backend de fallos del firmware existente del módem.
- En la etapa de enlace,
compiler_builtinssobrescribía las implementaciones optimizadas existentes dememcpy/memsetdel módem, lo que provocaba una caída de rendimiento; esto se resolvió eliminándolo con un script de una sola línea. - Google explicó que esta implementación no es una medida aislada, sino la base para ampliar en el futuro el uso de lenguajes con seguridad de memoria a otros parsers y código de alto riesgo dentro de la banda base.
Por qué importa
La banda base celular es software de bajo nivel que está expuesto directamente al exterior, por lo que tiene un alto valor como objetivo de ataque. De hecho, Project Zero ya demostró en el pasado ejecución remota de código a través de Internet en módems Pixel. En un entorno así, los problemas de seguridad de memoria del código centrado en C/C++ tienden a convertirse en un riesgo estructural.
El anuncio de Google es importante no solo porque “usó Rust”, sino porque muestra un caso real de despliegue de un lenguaje con seguridad de memoria incluso en un área de firmware tan restringida y sensible como la banda base móvil.
Aspectos técnicos destacados
- Se añadió soporte de
no_stdpara ejecutarhickory-protoen bare-metal. - La interfaz entre Rust y el código existente en C/C++ se conectó mediante FFI.
- Rust se encarga del parseo de respuestas, mientras que la actualización de las estructuras de memoria existentes en C reutiliza callbacks de funciones C ya existentes.
- Como había más de 30 crates externos, en lugar de reglas de build hechas a mano se utilizó
cargo-gnawde Fuchsia para generar reglas de build de GN.
Aún no hay comentarios.