6 Punkte von darjeeling 17 일 전 | Noch keine Kommentare. | Auf WhatsApp teilen

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 selbst no_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-proto und seine Abhängigkeiten, 17 KB auf
    core·alloc·compiler_builtins und 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_builtins die bestehenden modemoptimierten memcpy-/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-proto auf Bare Metal auszuführen, wurde no_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-gnaw GN-Build-Regeln erzeugt.

Noch keine Kommentare.

Noch keine Kommentare.