6 points par darjeeling 18 일 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp

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 de no_std aux 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-proto et de ses dépendances, 17 KB de core·alloc·compiler_builtins, et 4 KB du code shim reliant le modem.
  • Plutôt que d’assembler plusieurs staticlib indé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_builtins remplaçait les implémentations optimisées existantes de memcpy/memset du 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_std a été ajoutée pour exécuter hickory-proto en 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-gnaw de 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.

Aucun commentaire pour le moment.