Google führt Rust in die Baseband-Firmware des Pixel 10 ein
(security.googleblog.com)Google hat in die zellulare Baseband-(Modem-)Firmware des Pixel 10 einen DNS-Parser auf Basis von Rust, einer speichersicheren Sprache,
eingeführt. Das ist eine proaktive Maßnahme, um in einem Baseband mit großer Remote-Angriffsfläche die Klasse von Memory-Safety-Schwachstellen zu verringern.
Kernpunkte
- Beim Pixel 9 wurden Maßnahmen zur Abschwächung von Memory-Safety-Schwachstellen angewendet, und beim Pixel 10 ging man noch einen Schritt weiter und brachte Rust-Code direkt in die tatsächliche
Baseband-Firmware ein. - Das erste Einsatzgebiet ist der DNS-Parser. DNS wird nicht nur im Browser, sondern auch für grundlegende Mobilfunkfunktionen wie Rufumleitung verwendet. Da dabei nicht vertrauenswürdige
Daten direkt geparst werden, ist dies ein Bereich, in dem leicht Schwachstellen entstehen können. - Google entschied sich für die Open-Source-Rust-DNS-Bibliothek
hickory-proto. Ausschlaggebend waren der Wartungszustand, die Testabdeckung und die breite Akzeptanz in der Community. - Allerdings fehlte es an ausreichender
no_std-Unterstützung für Bare-Metal-Umgebungen, weshalb Google selbstno_std-Support zu den relevanten Crates und Abhängigkeiten hinzufügte und dies upstream beitrug. - Die Codegröße wurde mit ungefähr 371 KB gemessen. Davon entfallen 350 KB auf
hickory-protound seine Abhängigkeiten, 17 KB auf
core·alloc·compiler_builtinsund 4 KB auf Shim-Code zur Anbindung an das Modem. - Statt mit Cargo mehrere unabhängige
staticlibs zusammenzufügen, entschied sich Google dafür, den Rust-Kompilierungsschritt direkt in das bestehende Modem-Build-System (Pigweed/GN) zu integrieren. - Auch Rusts Speicher-Allocator und die Panic-Behandlung wurden per FFI mit dem bestehenden Allocator und dem Crash-Backend der Modem-Firmware verbunden und integriert.
- In der Link-Phase überschrieb
compiler_builtinsdie bestehenden modemoptimiertenmemcpy-/memset-Implementierungen, was zu Leistungseinbußen führte; dies wurde durch das Entfernen per One-Line-Skript behoben. - Google erklärte, dass diese Einführung keine einmalige Maßnahme sei, sondern die Grundlage dafür bilde, speichersichere Sprachen künftig auf weitere Hochrisiko-Parser und anderen Code im Baseband auszuweiten.
Warum das wichtig ist
Das zellulare Baseband ist niedrigstufige Software mit direktem Kontakt zur Außenwelt und daher ein besonders attraktives Angriffsziel. Tatsächlich hat Project Zero in der Vergangenheit bereits Remote Code Execution über das Internet auf einem Pixel-Modem demonstriert. In einer solchen Umgebung werden Memory-Safety-Probleme in C/C++-zentriertem Code leicht zu einem strukturellen Risiko.
Googles aktuelle Ankündigung ist bedeutsam, weil sie über das bloße „Wir haben Rust eingesetzt“ hinaus zeigt, dass sich speichersichere Sprachen auch in stark eingeschränkten und sensiblen Firmware-Bereichen wie mobilen Basebands praxisnah einsetzen lassen.
Technisch auffällige Punkte
- Um
hickory-protoauf Bare Metal auszuführen, wurdeno_std-Unterstützung hinzugefügt. - Die Schnittstelle zwischen Rust und bestehendem C/C++-Code wurde über FFI angebunden.
- Das Parsen der Antworten übernimmt Rust, während für die Aktualisierung bestehender C-Speicherstrukturen vorhandene Callback-Funktionen in C wiederverwendet wurden.
- Da es mehr als 30 externe Crates gab, wurden statt manueller Build-Regeln mit Fuchsias
cargo-gnawGN-Build-Regeln erzeugt.
Noch keine Kommentare.