Android: Mehr Rust, weniger C/C++ und weniger kritische Schwachstellen

Vulnerabilities aufgrund von Speicherfehlern haben in den letzten Jahren abgenommen, auch wenn die Gesamtzahl der gemeldeten Schwachstellen konstant blieb.

In Pocket speichern vorlesen Druckansicht 37 Kommentare lesen
Messe, MWC, Android

(Bild: heise online)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Das Android-Team hat eine Bilanz zum verstärkten Einsatz von Sprachen mit Memory Safety in dem mobilen Betriebssystem gezogen. Kritische Schwachstellen aufgrund von Speicherfehlern haben wohl in den vergangenen Jahren abgenommen. Android 13 ist das erste Release, in dem der Großteil des neuen Codes entweder von Sprachen mit Speicherverwaltung oder mit dedizierten Memory-Safety-Konzepten stammt. Wohlgemerkt geht es um den Code für das Betriebssystem und nicht um die Apps.

Google setzt für die Entwicklung des mobilen Betriebssystems auf einen Mix aus fünf Programmiersprachen: Kotlin, Java, C, C++ und Rust. Während die ersten beiden den Speicher verwalten, obliegt die Verantwortung für das Management bei den anderen drei Sprachen bei der Anwendung. Sie sind für die effiziente systemnahe Programmierung unumgänglich.

Rust ist der jüngste Neuzugang: Google hatte im April 2021 das Android Open Source Project (AOSP) für die Programmiersprache geöffnet. Rust bietet im Gegensatz zu C und C++ ein Memory-Safety-Konzept, das viele Speicherfehler verhindert, ohne dabei den Overhead einer Speicherverwaltung aufzusetzen. Nach wie vor sind Speicherfehler für einen Großteil der kritischen Schwachstellen in Software verantwortlich.

Allerdings kommt Rust nur für neuen Code zum Einsatz. Eine Portierung von C- oder C++-Code im Betriebssystem ist nicht geplant. Und auch für neuen Code haben C und C++ noch deutlich die Nase vorn: In Android 13 ist laut Google lediglich 21 Prozent des nativen Codes in Rust geschrieben. Das entspricht wohl etwa 1,5 Millionen Codezeilen im AOSP. Rust steckt unter anderem in dem Keystore2, dem Ultra-Wideband-Stack (OWB) und dem Android Virtualization Framework (AVF).

In Android 13 macht der Anteil von neuem C- und C++-Code erstmals weniger als 50 Prozent des Betriebssystems aus.

(Bild: Google)

Wenig überraschend ist der Rückgang der Schwachstellen aufgrund von Speicherfehlern seit 2019 etwa proportional zum reduzierten unsicheren Code.

Der Anteil der Schwachstellen aufgrund von Speicherfehlern hat gemeinsam mit dem Anteil des C- und C++-Codes in Android abgenommen.

(Bild: Google)

Rust kennt das Keyword unsafe, das die strikten Memory-Safety-Konzepte aushebelt. Für die Low-Level-Programmierung ist es an einigen Stellen unerlässlich, aber der mit Unsafe Rust erstellte Code ist anfällig für Speicherfehler. Das Android-Team hat es nach eigenen Angaben nur in Ausnahmefällen genutzt, in denen es unumgänglich ist.

Als weiteren Vorteil von Rust bezeichnet das Team den Performancegewinn, der sich indirekt ergibt: Die für C- und C++-Code notwendigen Sicherheitsmaßnahmen entfallen durch die hauseigene Memory Safety von Rust.

Die Gesamtzahl der gemeldeten Schwachstellen hat sich in den letzten Jahren nicht verändert. Sie liegt laut Google in den letzten vier Jahren konstant bei 20 Vulnerabilities monatlich. Allerdings gibt es insgesamt weniger kritische, bei denen Speicherfehler nach wie vor den höchsten Anteil haben. Im Android Security Bulletin von 2022 machen Memory-Safety-bezogene Schwachstellen 36 Prozent der gesamten Meldungen aus, aber 86 Prozent der als kritisch eingestuften.

In den kommenden Jahren will das Android-Team weiter verstärkt Rust für neuen Code verwenden und dabei auch den Kernel berücksichtigen. Mit Linux 6.1 soll die Programmiersprache endlich Einzug in den Linux-Kernel halten, und für Android soll es zeitnah Kernel-Treiber in Rust geben.

Derweil hat Google im Oktober mit KataOS ein neues Betriebssystem für sichere Embedded-Systeme vorgestellt, das fast ausschließlich auf Rust setzt.

Weitere Details lassen sich dem Google-Security-Blog entnehmen.

(rme)