Weniger Speicherfehler: Google setzt für Android nun auch auf Bare-Metal Rust

Nach den guten Erfahrungen mit Rust in Android hat Google nun die Protected Virtual Machine Firmware in Bare-Metal Rust umgesetzt.

In Pocket speichern vorlesen Druckansicht 69 Kommentare lesen
Ein grüner Android steht vor dem Google-Hauptquartier (Glasgebäude Hintergrund)

(Bild: Daniel AJ Sokolov)

Lesezeit: 3 Min.

Google hat den Einsatz der Programmiersprache Rust für nativen Code in Android erweitert. Nachdem das Android-Team bereits einige neue Komponenten des Betriebssystems in Rust geschrieben hat, setzt es nun auch auf Bare-Metal beziehungsweise Embedded Rust für Code jenseits der Linux-Basis.

Ende 2022 hatte Google eine positive Bilanz zum Einsatz von Rust für nativen Code im mobilen Betriebssystem gezogen. Ein Jahr zuvor hatte Google das Android Open Source Project 2021 für die Programmiersprache geöffnet.

Die Protected Virtual Machine Firmware (pVM), die analog zu einem Bootloader arbeitet, ist in Android 14 in Rust umgesetzt. Zuvor hat Google den in C geschriebenen Open-Source-Bootloader U-Boot als Grundlage für pVM genutzt.

Allerdings finden sich immer wieder Schwachstellen in U-Boot, von denen viele auf Speicherfehler wie Buffer Overflow oder Out-of-Bounds-Fehler zurückgehen. Diese Art von Fehlern sind insgesamt für einen Großteil der kritischen Schwachstellen in Software verantwortlich. Rust bietet im Gegensatz zu C und C++ ein Memory-Safety-Konzept, das viele Speicherfehler verhindert, ohne dabei den Overhead einer Speicherverwaltung aufzusetzen wie Java oder Kotlin.

Statt weiter Fehler in der U-Boot-basierten Umsetzung (und U-Boot selbst) zu beheben, hat sich das Android Team dazu entschlossen, die pVM-Firmware für Android 14 neu in Rust umzusetzen.

Für Code außerhalb des Betriebssystems kommt Embedded Rust zum Einsatz. Dabei handelt es sich um keine eigene Edition, sondern die Variante verzichtet auf die Standard-Library von Rust, die auf Betriebssystemfunktion angewiesen ist. Dazu dient das Attribut #![no_std], das auf Paketebene (Crate in Rust) gilt.

Online-Konferenz zu Rust

Am 24. Oktober findet die betterCode() Rust statt. Die von iX und dpunkt.verlag ausgerichtete Online-Konferenz richtet sich vor allem an diejenigen, die Rust nutzen möchten, um ihre C/C++-Codebasis zu migrieren oder zu ergänzen.

Das Programm der Konferenz bietet Vorträge zu folgenden Themen:

  • Grundlegende Unterschiede und Vorteile von Rust zu C/C++
  • Rust und C++: Migrieren und integrieren
  • Traumpaar Rust & WebAssembly
  • Details zur Ausdrucksstärke von Rust
  • Asynchrone Programmierung im Zusammenspiel mit anderen Sprachen
  • Praktischer Einsatz von Rust im industriellen Umfeld

Mit der Umsetzung der pVM-Firmware waren offenbar einige Herausforderungen verbunden, von denen ein Beitrag auf dem Android-Security-Blog berichtet.

Unter anderem ist das Memory-Safety-Konzept von Rust darauf ausgelegt, dass ein Programm exklusiven Zugriff auf den allokierten Speicher hat. Das trifft aber für Firmware-Code, der Memory-Mapped I/O (MMIO) und geteilten Speicher verwalten muss, nicht immer zu. Daher lässt sich als unsafe deklarierter Code teilweise ebenso wenig vermeiden wie Raw Pointers.

Das grenzt die Memory-Safety ein, zumal einige der unsafe-Funktionen sich wohl schwierig mit Wrappern absichern lassen, die unerwartetes Verhalten im unsicheren Code verhindern sollen.

Eine weitere Herausforderung ist die Codegröße. Die Rust pVM-Firmware ist mit 460 KByte mehr als doppelt so groß wie der Vorgänger in C, der allerdings wohl auch weniger Funktionen geboten hat.

Trotz der Einschränkungen ist die Rust-Umsetzung aus Sicht des Teams deutlich sicherer als der C-Code. Es möchte in Zukunft weiterhin Rust auf Bare-Metal-Ebene dort einsetzen, wo es sinnvoll ist.

(rme)