Mobil-Entwicklung: HWASan sucht Speicherfehler in Android-Apps

Das Tool HWASan von Google nutzt Memory Tagging, um Speicherfehler in nativem Android-Code besser zu finden.

In Pocket speichern vorlesen Druckansicht
Neues Tool soll Speicherfehler in Android aufspüren
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Google hat ein neues Android-Werkzeug veröffentlicht, dass sich an Entwickler richtet, die Apps mit dem Native Development Kit (NDK) erstellen. Zielgruppe sind somit explizit nicht diejenigen, die ihre Anwendungen in Kotlin oder Java für die JVM schreiben, sondern nativen Code mit Sprachen wie C und C++.

Da native Apps für die Speicherverwaltung selbst verantwortlich sind, sind sie anfällig für typische Speicherzugriffsfehler wie Buffer Overflows. Programmierfehler führen unter anderem zu Use-After-Free oder Double-Free-Schwachstellen, also das Verwenden bereits freigegebener Speicherbereiche oder das doppelte Freigeben von Speicher. Abgesehen davon, dass die Speicherfehler zu unvorhersehbarem Verhalten wie Abstürzen führen können, bieten sie Einfalltore für gezielte Angriffe. Unter anderem können Angreifer bei Use-After-Free-Fehlern Code in den von der Anwendung freigegebenen, aber wiederverwendeten Bereich einschleusen.

Google bietet bereits seit geraumer Zeit einen Scanner zum Auffinden von Speicherfehlern: Address Sanitizer (ASan) spürt Fehler auf, allerdings zum Preis einer spürbar geringeren Performance und eines um das Zwei- bis Dreifache erhöhten Speicherbedarfs.

Der nun vorgestellte HWASan (Hardware-Assisted Adedress Sanitizer) soll nur etwa 15 Prozent mehr Speicher benötigen und deutlich performanter arbeiten als ASan. Google nutzt HWASan bereits intern zum Aufspüren von Fehlern in Android und hat das Werkzeug nun für NDK-Entwickler freigegeben.

Zum Aufspüren von Speicherfehlern verwendet HWASan das sogenannte Memory Tagging, das alle Speicherblöcke markiert. Dazu nutzt es das zusätzliche Feld in 64-Bit ARM CPUs, das Top Byte Ignore (TBI) heißt. Konkret speichert das System einen zufälligen 8-Bit-Wert im MSB (Most Significant Byte).

Zum Prüfen setzt HWASan auf Shadow Memory, um die Speichernutzung zu verfolgen. Dabei vergleicht es die Pointer und gesetzten Tags im Speicher bei jedem Speicherzugriff und gibt einen Fehler aus, wenn die Werte nicht zusammenpassen. Das Tool setzt im Shadow Memory den Tag bei jeder Speicherzuweisung und -freigabe auf einen zufälligen Wert.

HWASan erkennt den geänderten Tag und löst einen Fehler aus.

(Bild: Google)

Auf die Weise ist es höchstwahrscheinlich, dass das Tool erkennt, wenn ein Programm auf freigegeben Speicher zugreift oder einen Zugriff außerhalb des reservierten Bereichs versucht. Google weist jedoch darauf hin, dass der Ansatz nicht deterministisch ist, also bei mehrfacher Ausführung ohne Änderung des Codes und der Werte unterschiedliche Ergebnisse erzeugen kann. Es besteht jeweils eine Chance von 1 zu 256, dass das zufällig erzeugte Byte dem Vergleichswert entspricht. Ein zweiter Start der Analyse verringert die Wahrscheinlichkeit, durch die Zufallszahl Fehler zu übersehen.

Beim Auffinden eines Fehlers, beendet HWASan den Prozess und erstellt einen Trash-Dump mit den Informationen über den Speicherbereich und den Prozess, der den Fehler ausgelöst hat.

Weitere Details zu HWASan lassen sich dem Android-Entwickerblog entnehmen. Eine Anleitung zum Einsatz von HWASan finden sich in der Dokumentation zum NDK. Auf Android Source existiert eine Anleitung zum Erstellen von System-Images mit HWASan, die auch vorgefertigt verfügbar sind. (rme)