Speichersicherheit

Speicherunsicherheit

Speichersicherheitsfehler, Fehler beim Umgang mit Speicher in nativen Programmiersprachen, sind das häufigste Problem in den Android-Codebasen. Sie sind für über 60 % der Sicherheitslücken mit hohem Schweregrad und für Millionen von für den Benutzer sichtbaren Abstürzen verantwortlich.

Speichersicherheitsfehler wirken sich auf Benutzererfahrung, 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 Teil der auf Endbenutzergeräten beobachteten Abstürze verantwortlich. Daher korreliert eine hohe Dichte an Speichersicherheitsfehlern direkt mit einer schlechten Benutzererfahrung.
Nativer Code, geschrieben in speicherunsicheren Sprachen wie C, C++ und Assembly, macht über 70 % des Android-Plattformcodes aus und ist in etwa 50 % der Play Store-Anwendungen vorhanden.
Angesichts der ständig zunehmenden Komplexität des Codes werden die Speichersicherheitsfehler mit der Zeit zunehmen, wenn sie unbeaufsichtigt bleiben. Daher ist es für unseren langfristigen Erfolg von entscheidender Bedeutung, 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-Codebasis eingeführt.
Diese Technologien werden unseren Weg zur Speichersicherheit beschleunigen und der gesamten Softwareindustrie dabei helfen, einen zentralen Problembereich anzugehen.

Sicherheitslücken im Speicher wirken sich negativ auf die Qualität aus

Latente Speichersicherheitsfehler können je nach Systemzustand zu nicht deterministischen Ergebnissen führen. Dieses unvorhersehbare Verhalten führt zu Abstürzen und Ärger für unsere Benutzer.

Jeden Tag beobachten wir Millionen nativer Abstürze von Endbenutzergeräten und mit der Einführung von GWP-ASan haben wir die meisten davon auf Speichersicherheitsfehler zurückgeführt.
Dieser Datenpunkt validiert die Korrelation zwischen Qualität und Dichte von Speichersicherheitsfehlern und stimmt mit den Beobachtungen unserer Chrome-Kollegen überein (siehe Chrome GWP-ASan Bug Hotlist ).

Speichersicherheitsfehler wirken sich negativ auf die Sicherheit aus

Speichersicherheitsfehler waren schon immer die Hauptursache für Android-Sicherheitslücken, und zwar schon seit der ersten Android-Version.

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

Obwohl es ermutigend ist zu wissen, dass es sich nicht nur um ein Android-Problem handelt (siehe Chrome- und Microsoft- Statistiken), müssen wir mehr für die Sicherheit unserer Benutzer tun.
Das Project Zero-Team bei Google verfolgt Zero-Day-Exploits, die bei echten Angriffen gegen Benutzer eingesetzt wurden, als Zero-Day-Schwachstellen. Hierbei handelt es sich nicht um hypothetische Fehler, sondern um Exploits, die aktiv bei Angriffen auf Benutzer eingesetzt werden. Speichersicherheitsfehler (Speicherbeschädigung und „Use-after-free“) machen die überwiegende Mehrheit aus.

Speichersicherheitsfehler erhöhen die Kosten

Wenn wir unsere Geräte mit Sicherheitsupdates auf dem neuesten Stand halten, schützen wir unsere Benutzer, sind aber auch mit finanziellen Kosten für unser Ökosystem verbunden.

Die hohe Dichte an Speichersicherheitsfehlern im Low-Level-Anbietercode, der häufig benutzerdefinierte Änderungen aufweist, erhöht die Reparatur- und Testkosten erheblich. Allerdings können diese Kosten gesenkt werden, wenn diese Fehler frühzeitig im Entwicklungszyklus erkannt werden.

Untersuchungen zeigen, dass die frühere Erkennung von Fehlern die Kosten um das Sechsfache senken kann. Angesichts der Komplexität unseres Ökosystems, der durchschnittlichen Anzahl der von einem Anbieter verwalteten Codebasen und der ständig zunehmenden Komplexität der Software könnten die Einsparungen jedoch höher ausfallen.

Speichersicherheit

Ab Android 12 haben wir systemische Änderungen vorgenommen, um die Dichte von Speichersicherheitsfehlern in Android-Codebasen zu reduzieren. Wir erweitern die Android-Speichersicherheitstools und führen neue Anforderungen ein, die unser Ökosystem dazu ermutigen, diese Kategorie von Fehlern zu beheben. Im Laufe der Zeit sollten sich diese in höherer Qualität und besserer Sicherheit für unsere Benutzer sowie geringeren Kosten für unsere Anbieter niederschlagen.

Speichersicherheit wird in den kommenden Jahren wahrscheinlich zum Unterscheidungsmerkmal für Qualität und Sicherheit werden, und Android plant, eine Vorreiterrolle zu übernehmen.

Anforderungen zur Unterstützung der Speichersicherheit

Das Android Compatibility Definition Document (CDD) empfiehlt dringend die Verwendung von Speichersicherheitstools während der Entwicklung.
Wir arbeiten eng mit unserem Ökosystem zusammen, um den Einsatz von Speichersicherheitstools zu erhöhen und sie in die kontinuierlichen Integrations- und Testprozesse zu integrieren.
Im Laufe der Zeit möchten wir sicherstellen, dass jedes Gerät einen vollständigen Compatibility Test Suite ( CTS )-Lauf unter Verwendung von Speichersicherheitstools besteht, der zeigt, dass keine derartigen Fehler gefunden wurden. Beispielsweise müssen Arm v9-Plattformen einen CTS-Lauf mit aktiviertem Memory Tagging bereitstellen, während Arm v8-Plattformen einen CTS-Lauf mit HWASAN und KASAN bereitstellen müssen.

Rust als neue Programmiersprache für Plattformcode

Mit Android 12 wurde Rust als Plattformsprache eingeführt. Rust bietet Speicher- und Thread-Sicherheit auf einem ähnlichen Leistungsniveau wie C/C++. Wir gehen davon aus, dass Rust für die meisten neuen nativen Projekte die bevorzugte Wahl sein wird. Allerdings ist es nicht möglich, den gesamten speicherunsicheren Code, der derzeit über 70 % des Codes der Android-Plattform ausmacht, in Rust neu zu schreiben. In Zukunft wird Rust die Speichersicherheitstools ergänzen.

Speichersicherheitstools

Android unterstützt eine Vielzahl von Tools, die dabei helfen, Sicherheitslücken im Speicher zu erkennen. Die folgende Abbildung zeigt eine Taxonomie der verfügbaren Android-Speichersicherheitstools.

Speichersicherheitsfehler wirken sich negativ auf die Sicherheit aus.
Abbildung 3 : Landschaft der Android-Speichersicherheitstools

Unsere Tools decken ein breites Spektrum an Einsatzszenarien und -zielen ab. Die folgende Dokumentation beschreibt jedes Tool und bietet eine Referenz für deren Verwendung in Ihren Produkten.