Speicherunsicherheiten
Speichersicherheitsfehler, also Fehler bei der Speicherverwaltung in nativen Programmiersprachen, sind das häufigste Problem in den Android-Codebases. Sie sind für über 60% der Sicherheitslücken mit hohem Schweregrad und für Millionen von für Nutzer sichtbaren Abstürzen verantwortlich.

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, unserem System 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.

Es ist zwar beruhigend zu wissen, 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. Speichersicherheitsfehler (Speicherbeschädigung und „Use-after-Free“) machen einen überwältigenden Großteil aus.
Speichersicherheitsfehler erhöhen die Kosten
Durch die Aktualisierung von Geräten mit Sicherheitskorrekturen schützen wir unsere Nutzer. Das hat jedoch finanzielle Auswirkungen auf unser System.
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. Wenn Sie diese Fehler jedoch früh im Entwicklungszyklus erkennen, können Sie diese Kosten senken.
Forschungen zeigen, dass sich die Kosten durch eine frühzeitige Fehlererkennung um das Sechsfache senken lassen. 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 Tools zur Speichersicherheit von Android und führen neue Anforderungen ein, die die Entwickler dazu anregen, diese Art 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. So müssen beispielsweise Arm v9-Plattformen einen CTS-Lauf mit aktiviertem Speicher-Tagging bereitstellen, 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.
Tools zur Speichersicherheit
Android unterstützt eine Vielzahl von Tools, mit denen sich Speichersicherheitsfehler erkennen lassen. Die folgende Abbildung zeigt eine Taxonomie der verfügbaren Android-Tools zur Speichersicherheit.

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 die Verwendung in Ihren Produkten bereitgestellt.