Speichersicherheit

Speicherunsicherheiten

Sicherheitsfehler des Arbeitsspeichers, also Fehler bei der Speicherbehandlung in nativen Programmiersprachen, sind die häufigsten Probleme in der Android-Codebasis. Sie sind für über 60% der Sicherheitslücken mit hohem Schweregrad und für Millionen von für Nutzer sichtbaren Abstürzen verantwortlich.

 Fehler bei der Arbeitsspeichersicherheit wirken sich auf Nutzerfreundlichkeit, Kosten und Sicherheit aus.
Abbildung 1: Speichersicherheitsfehler und ihre negativen Auswirkungen auf Qualität, Sicherheit und Kosten

Speichersicherheitsfehler wirken sich negativ auf Qualität und Stabilität aus und sind für einen erheblichen Anteil der auf Endnutzergeräten auftretenden Abstürze verantwortlich. Daher steht eine hohe Dichte von Speichersicherheitsfehlern in direktem Zusammenhang mit einer schlechten Nutzererfahrung.
Nativer Code, der in speicherunsicheren Sprachen wie C, C++ und Assembly geschrieben wurde, macht über 70% des Android-Plattformcodes aus und ist in etwa 50% der Google Play Store-Apps vorhanden.
Angesichts der immer komplexeren Codestruktur werden sich Speichersicherheitsfehler im Laufe der Zeit vervielfachen, wenn sie nicht behoben werden. Daher ist es für unseren langfristigen Erfolg entscheidend, unserer Plattform die Tools und Technologien zur Verfügung zu stellen, mit denen solche Fehler erkannt und behoben werden können.
In den letzten Jahren haben wir eng mit unseren Hardwarepartnern zusammengearbeitet, um Hardwaretechnologien wie Arm Memory Tagging zu entwickeln. Außerdem haben wir Rust in die Android-Codebasis eingeführt.
Diese Technologien werden unseren Weg zur Speichersicherheit beschleunigen und der gesamten Softwarebranche helfen, ein wichtiges Problemfeld anzugehen.

Speichersicherheitsfehler wirken sich negativ auf die Qualität aus

Latente Fehler bei der Arbeitsspeichersicherheit können je nach Systemstatus zu nicht deterministischen Ergebnissen führen. Dieses unvorhersehbare Verhalten führt zu Abstürzen und Ärgernissen für unsere Nutzer.

Täglich beobachten wir Millionen von nativen Abstürzen auf Endnutzergeräten. Mit der Einführung von GWP-ASan konnten wir den Großteil davon auf Speichersicherheitsfehler zurückführen.
 Dieser Datenpunkt bestätigt die Korrelation zwischen Qualität und Dichte von Arbeitsspeichersicherheitsfehlern und stimmt mit den Beobachtungen unserer Chrome-Kollegen überein (siehe GWP-ASan-Fehler-Hotlist).

Speichersicherheitsfehler wirken sich negativ auf die Sicherheit aus

Speichersicherheitsfehler sind seit der ersten Android-Version der Hauptgrund für Sicherheitslücken in Android.

Speichersicherheitsfehler wirken sich negativ auf die Sicherheit aus.
Abbildung 2: Beitrag von Speichersicherheitsfehlern zu Android-Sicherheitslücken

Es ist zwar beruhigend, dass dies nicht nur ein Android-Problem ist (siehe Statistiken zu Chrome und Microsoft), aber wir müssen mehr für die Sicherheit unserer Nutzer tun.
Das Project Zero-Team von Google verfolgt Zero-Day-Exploits, die bei echten Angriffen auf Nutzer als Zero-Day-Sicherheitslücken verwendet wurden. Das sind keine hypothetischen Fehler, sondern Exploits, die aktiv bei Angriffen auf Nutzer eingesetzt werden. Die überwiegende Mehrheit der Arbeitsspeichersicherheitsfehler (Beschädigung des Arbeitsspeichers und Nutzung nach der Freischaltung)

Arbeitsspeicher-Sicherheitsfehler erhöhen die Kosten

Wenn unsere Geräte mit Sicherheitsupdates auf dem neuesten Stand gehalten werden, sind unsere Nutzer besser geschützt, aber für unsere Plattform sind sie mit Geld verbunden.

Die hohe Dichte von Speichersicherheitsfehlern im Low-Level-Anbietercode, der oft benutzerdefinierte Änderungen enthält, erhöht die Kosten für die Behebung und Tests erheblich. Werden diese Fehler jedoch frühzeitig im Entwicklungszyklus erkannt, können diese Kosten gesenkt werden.

Studien haben gezeigt, dass durch eine frühere Fehlererkennung die Kosten um das bis zu 6-Fache gesenkt werden können. Angesichts der Komplexität unseres Ökosystems, der durchschnittlichen Anzahl der von einem Anbieter verwalteten Codebases und der immer komplexer werdenden Software könnten die Einsparungen jedoch höher ausfallen.

Speichersicherheit

Ab Android 12 haben wir systemische Änderungen vorgenommen, um die Häufigkeit von Speichersicherheitsfehlern in Android-Codebases zu reduzieren. Wir erweitern die Android-Tools zur Speichersicherheit und führen neue Anforderungen ein, die unsere Plattform dazu ermutigen, diese Kategorie von Fehlern zu beheben. Im Laufe der Zeit sollte dies zu einer höheren Qualität und besseren Sicherheit für unsere Nutzer sowie zu niedrigeren Kosten für unsere Anbieter führen.

Die Speichersicherheit wird in den kommenden Jahren wahrscheinlich zu einem Unterscheidungsmerkmal für Qualität und Sicherheit werden. Android möchte hier eine Vorreiterrolle übernehmen.

Anforderungen zur Speichersicherheit

Im Android Compatibility Definition Document (CDD) wird die Verwendung von Tools zur Speichersicherheit während der Entwicklung dringend empfohlen.
Wir arbeiten eng mit unserem Partnernetzwerk zusammen, um die Nutzung von Tools zur Speichersicherheit zu erhöhen und sie in die kontinuierliche Integration und die Testprozesse einzubinden.
Im Laufe der Zeit möchten wir dafür sorgen, dass jedes Gerät mithilfe von Speichersicherheitstools einen vollständigen CTS-Test (Compatibility Test Suite) besteht, was belegt, dass keine solchen Fehler gefunden wurden. Für Arm v9-Plattformen muss beispielsweise ein CTS-Lauf mit aktiviertem Speicher-Tagging bereitgestellt werden, während für Arm v8-Plattformen ein CTS-Lauf mit HWASAN und KASAN erforderlich ist.

Rust als neue Programmiersprache für Plattformcode

Mit Android 12 wurde Rust als Plattformsprache eingeführt. Rust bietet Speicher- und Threadsicherheit bei einer Leistung, die der von C/C++ ähnelt. Wir gehen davon aus, dass Rust die bevorzugte Wahl für die meisten neuen nativen Projekte sein wird. Es ist jedoch nicht möglich, den gesamten speicherunsicheren Code, der derzeit über 70% des Android-Plattformcodes ausmacht, in Rust neu zu schreiben. In Zukunft wird Rust die Tools zur Speichersicherheit ergänzen.

Sicherheitstools für den Arbeitsspeicher

Android unterstützt eine Vielzahl von Tools, mit denen sich sicherheitsrelevante Fehler im Arbeitsspeicher aufdecken lassen. Die folgende Abbildung zeigt eine Taxonomie der verfügbaren Android-Tools zur Arbeitsspeichersicherheit.

Speichersicherheitsfehler wirken sich negativ auf die Sicherheit aus.
Abbildung 3: Tools zur Speichersicherheit unter Android

Unsere Tools decken eine Vielzahl von Bereitstellungsszenarien und -zielen ab. In der folgenden Dokumentation werden die einzelnen Tools beschrieben und es wird eine Referenz für deren Verwendung in Ihren Produkten bereitgestellt.