Auf dieser Seite werden Fehler im Zusammenhang mit der Speichersicherheit und entsprechende Tools beschrieben.
Unsichere Speichernutzung
Fehler im Zusammenhang mit der Speichersicherheit, 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 Abstürzen verantwortlich, die Nutzer sehen.
Abbildung 1 : Fehler im Zusammenhang mit der Speichersicherheit und ihre negativen Auswirkungen auf Qualität, Sicherheit und Kosten
Fehler im Zusammenhang mit der Speichersicherheit wirken sich negativ auf Qualität und Stabilität aus und sind für einen
erheblichen Teil der Abstürze verantwortlich, die auf Geräten von Endnutzern auftreten. Daher korreliert eine hohe
Dichte von Fehlern im Zusammenhang mit der Speichersicherheit direkt mit einer schlechten Nutzererfahrung.
Nativer Code, der in speichersicheren 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 größer werdenden Komplexität von Code werden Fehler im Zusammenhang mit der Speichersicherheit mit der Zeit zunehmen, wenn nichts unternommen wird. Daher ist es für unseren langfristigen Erfolg entscheidend, unserem Ökosystem
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, und Rust in die Android-Codebase eingeführt.
Diese Technologien werden unseren Weg zur Speichersicherheit beschleunigen und
der Softwarebranche insgesamt helfen, ein wichtiges Problem anzugehen.
Fehler im Zusammenhang mit der Speichersicherheit wirken sich negativ auf die Qualität aus
Latente Fehler im Zusammenhang mit der Speichersicherheit können je nach Systemstatus zu nicht deterministischen Ergebnissen führen. Dieses unvorhersehbare Verhalten führt zu Abstürzen und Ärger bei unseren Nutzern.
Jeden Tag beobachten wir Millionen von nativen Abstürzen auf Geräten von Endnutzern.
Mit der Einführung von GWP-ASan haben wir die meisten davon auf Fehler im Zusammenhang mit der Speicher
sicherheit zurückgeführt.
Dieser Datenpunkt bestätigt die Korrelation zwischen Qualität
und Dichte von Fehlern im Zusammenhang mit der Speichersicherheit und stimmt mit den Beobachtungen unserer Chrome
Kollegen überein (siehe Chrome GWP-ASan bug hotlist).
Fehler im Zusammenhang mit der Speichersicherheit wirken sich negativ auf die Sicherheit aus
Fehler im Zusammenhang mit der Speichersicherheit sind seit der ersten Android-Version durchweg der Top-Beitragender zu Android-Sicherheitslücken.
Abbildung 2 : Beitrag von Fehlern im Zusammenhang mit der Speichersicherheit zu Android-Sicherheitslücken
Es ist zwar ermutigend zu wissen, dass dies nicht nur ein Android-Problem ist
(siehe Chrome
und Microsoft
Statistiken), aber wir müssen mehr für die Sicherheit unserer Nutzer tun.
Das Project Zero-Team
von Google verfolgt
Zero-Day-Exploits, die bei realen Angriffen auf Nutzer verwendet wurden, als Zero-Day-
Sicherheitslücken. Dabei handelt es sich nicht um hypothetische Fehler, sondern um Exploits, die aktiv bei
Angriffen auf Nutzer eingesetzt werden. Fehler im Zusammenhang mit der Speichersicherheit (Speicherbeschädigung und Use-After-Free)
machen die überwiegende Mehrheit aus.
Fehler im Zusammenhang mit der Speichersicherheit erhöhen die Kosten
Wenn wir Geräte mit Sicherheitsupdates auf dem neuesten Stand halten, sind unsere Nutzer geschützt, aber das kostet unser Ökosystem Geld.
Die hohe Dichte von Fehlern im Zusammenhang mit der Speichersicherheit in Low-Level-Anbietercode, der oft benutzerdefinierte Änderungen enthält, erhöht die Kosten für Fehlerbehebung und Tests erheblich. Wenn diese Fehler jedoch frühzeitig im Entwicklungszyklus erkannt werden, können diese Kosten gesenkt werden.
Untersuchungen zeigen, dass die Kosten um bis zu sechsmal gesenkt werden können, wenn Fehler früher erkannt werden. Angesichts der Komplexität unseres Ökosystems, der durchschnittlichen Anzahl von Codebases, die von einem Anbieter verwaltet werden, und der immer größer werdenden Komplexität von Software könnten die Einsparungen jedoch noch höher sein.
Speichersicherheit
Android 12 und höher enthalten systemische Änderungen, um die Dichte von Fehlern im Zusammenhang mit der Speichersicherheit in Android-Codebases zu verringern. Wir erweitern die Android-Tools für die Speichersicherheit und führen neue Anforderungen ein, die unser Ökosystem dazu anregen, diese Kategorie von Fehlern zu beheben. Mit der Zeit sollten sich diese Maßnahmen in einer höheren Qualität und besseren Sicherheit für unsere Nutzer und niedrigeren Kosten für unsere Anbieter niederschlagen.
Die Speichersicherheit wird in den kommenden Jahren wahrscheinlich zu einem Unterscheidungsmerkmal für Qualität und Sicherheit werden, und Android plant, eine Vorreiterrolle einzunehmen.
Anforderungen zur Unterstützung der Speichersicherheit
Im Android Compatibility Definition Document (CDD) wird die Verwendung von Tools für die Speichersicherheit während der Entwicklung dringend empfohlen.
Wir arbeiten eng mit unserem Ökosystem zusammen, um die Verwendung von Tools für die Speichersicherheit zu erhöhen und sie in die Prozesse für kontinuierliche Integration und Tests zu integrieren.
Mit der Zeit möchten wir sicherstellen, dass jedes Gerät einen vollständigen Compatibility Test Suite (CTS)-Lauf mit Tools für die Speicher sicherheit besteht, was zeigt, dass keine solchen Fehler gefunden wurden. Auf Arm v9-Plattformen muss beispielsweise ein CTS-Lauf mit aktivierter Speicherkennzeichnung bereitgestellt werden, während auf 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 eine ähnlich effektive Speicher- und Threadsicherheit wie C/C++. 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 speichersicheren Code, der derzeit über 70% des Android-Plattformcodes ausmacht, in Rust neu zu schreiben. In Zukunft wird Rust eine Ergänzung zu Tools für die Speichersicherheit sein.
Tools für die Speichersicherheit
Android unterstützt eine Vielzahl von Tools, mit denen Fehler im Zusammenhang mit der Speichersicherheit erkannt werden können. Die folgende Abbildung zeigt eine Taxonomie der verfügbaren Android-Tools für die Speichersicherheit.

Abbildung 3 : Android-Tools für die Speichersicherheit
Unsere Tools decken eine Vielzahl von Bereitstellungsszenarien und Zielen ab. In der Dokumentation in diesem Abschnitt werden die einzelnen Tools beschrieben und eine Referenz für die Verwendung in Ihren Produkten bereitgestellt.