zurück zum Artikel

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

Rainald Menge-Sonnentag
Ein grüner Android steht vor dem Google-Hauptquartier (Glasgebäude Hintergrund)

(Bild: Daniel AJ Sokolov)

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

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 [1] für nativen Code im mobilen Betriebssystem gezogen. Ein Jahr zuvor hatte Google das Android Open Source Project 2021 [2] für die Programmiersprache geöffnet.

Die Protected Virtual Machine Firmware [3] (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 [4] als Grundlage für pVM genutzt.

Allerdings finden sich immer wieder Schwachstellen in U-Boot [5], 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 [6] zum Einsatz. Dabei handelt es sich um keine eigene Edition, sondern die Variante verzichtet auf die Standard-Library [7] 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 [8]. 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 [9] 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 [10].

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 [11])


URL dieses Artikels:
https://www.heise.de/-9330945

Links in diesem Artikel:
[1] https://www.heise.de/news/Android-Mehr-Rust-weniger-C-C-und-weniger-kritische-Schwachstellen-7364247.html
[2] https://www.heise.de/news/Programmiersprache-Android-springt-auf-den-Rust-Zug-auf-6006946.html
[3] https://cs.android.com/android/platform/superproject/+/main:packages/modules/Virtualization/pvmfw/
[4] https://github.com/u-boot/u-boot
[5] https://nvd.nist.gov/vuln/search/results?form_type=Basic&results_type=overview&query=U-Boot&search_type=all&isCpeNameSearch=false
[6] https://www.rust-lang.org/what/embedded
[7] https://docs.rust-embedded.org/book/intro/no-std.html
[8] https://rust.bettercode.eu/
[9] https://rust.bettercode.eu/index.php#programm
[10] https://security.googleblog.com/2023/10/bare-metal-rust-in-android.html
[11] mailto:rme@ix.de