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.
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.
Frischer Rost
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).
Wenig ĂĽberraschend ist der RĂĽckgang der Schwachstellen aufgrund von Speicherfehlern seit 2019 etwa proportional zum reduzierten unsicheren Code.
Unsafe Rust und Performancegewinn
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.
Lesen Sie auch
Linux-Kernel: Rust-Entwicklung schreitet mit neuer Edition voran
Ferris Talk #11: Memory Management – Speichermanagement in Rust mit Ownership
CTO von MS Azure: Nehmt Rust für neue Projekte und erklärt C/C++ für überholt!
Kommentar: Rust im Linux-Kernel – handeln statt jubeln!
Neu am Kiosk: iX-Developer-Sonderheft "Programmiersprachen – Next Generation"
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.
Zahl der Schwachstellen trotzdem konstant
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)