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.
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.
Rust statt U-Boot
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.
Eingeschränkte Funktionen und spezielle Herausforderungen
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.
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
Copyright © 2023 Heise Medien