Google introduit Rust dans le firmware de bande de base du Pixel 10
(security.googleblog.com)Google a introduit dans le firmware de bande de base cellulaire (modem) du Pixel 10 un parseur DNS basé sur Rust, un langage à sûreté mémoire.
Il s’agit d’une mesure proactive pour réduire les vulnérabilités liées à la sûreté mémoire dans la bande de base, dont la surface d’attaque à distance est importante.
Points clés
- Sur le Pixel 9, des mesures d’atténuation des vulnérabilités de sûreté mémoire avaient été appliquées ; avec le Pixel 10, Google va plus loin en intégrant du code Rust directement dans le firmware de bande de base.
- Le premier composant concerné est le parseur DNS. Le DNS n’est pas utilisé uniquement par les navigateurs, mais aussi par des fonctions de base du réseau mobile comme le renvoi d’appel ; comme il analyse directement des données non fiables, c’est un domaine particulièrement exposé aux vulnérabilités.
- Google a adopté la bibliothèque DNS Rust open source
hickory-proto. Son état de maintenance, sa couverture de tests et son niveau d’adoption par la communauté ont été jugés très satisfaisants. - En revanche, la prise en charge de
no_std, nécessaire dans un environnement bare-metal, était insuffisante ; Google a donc ajouté directement la prise en charge deno_stdaux crates concernées et à leurs dépendances, puis a contribué ces modifications en upstream. - La taille du code a été mesurée à environ 371 KB. Sur ce total, 350 KB proviennent de
hickory-protoet de ses dépendances, 17 KB decore·alloc·compiler_builtins, et 4 KB du code shim reliant le modem. - Plutôt que d’assembler plusieurs
staticlibindépendantes avec Cargo, Google a choisi d’intégrer directement l’étape de compilation Rust dans le système de build existant du modem (Pigweed/GN). - L’allocateur mémoire de Rust et la gestion des panic ont également été intégrés via FFI avec l’allocator et le backend de crash du firmware modem existant.
- À l’étape de l’édition de liens,
compiler_builtinsremplaçait les implémentations optimisées existantes dememcpy/memsetdu modem, ce qui entraînait une baisse de performances ; le problème a été résolu en les supprimant via un script d’une seule ligne. - Google explique que cette intégration n’est pas une mesure ponctuelle, mais une base pour étendre à l’avenir l’usage de langages à sûreté mémoire à d’autres parseurs et morceaux de code à haut risque dans la bande de base.
Pourquoi c’est important
La bande de base cellulaire est un logiciel bas niveau directement exposé à l’extérieur, ce qui en fait une cible de grande valeur pour les attaques. Par le passé, Project Zero avait d’ailleurs démontré une exécution de code à distance via Internet sur un modem Pixel. Dans un tel environnement, les problèmes de sûreté mémoire dans du code principalement en C/C++ deviennent facilement un risque structurel.
L’annonce de Google est importante non seulement parce qu’elle dit « nous avons utilisé Rust », mais surtout parce qu’elle montre qu’il est possible de déployer en production des langages à sûreté mémoire même dans des domaines firmware très contraints et sensibles comme la bande de base mobile.
Points techniques remarquables
- La prise en charge de
no_stda été ajoutée pour exécuterhickory-protoen bare-metal. - L’interface entre Rust et le code C/C++ existant a été reliée via FFI.
- Rust se charge de l’analyse des réponses, tandis que la mise à jour des structures mémoire C existantes réutilise des callbacks de fonctions C déjà en place.
- Comme il y a plus de 30 crates externes, Google a utilisé
cargo-gnawde Fuchsia pour générer des règles de build GN au lieu d’écrire manuellement les règles de build.
Aucun commentaire pour le moment.