Sanitizer sind eine Gruppe von dynamischen Analysetools, die Fehler in Programmen zur Laufzeit durch zusätzliche Instrumentierung finden, die vom Compiler eingefügt wurde. Dazu gehört auch die Erkennung von Problemen mit der Speichersicherheit. Android unterstützt die folgenden Sanitizer und empfiehlt deren Verwendung:
Hardware-gestützter AddressSanitizer (HWASan)
HWASan ist der Haupt-Sanitizer zur Erkennung von Problemen mit der Speichersicherheit. Er erfordert ARM64 und kann Folgendes erkennen:
- Stack- und Heap-Buffer-Overflow oder -Underflow
- Heap-Nutzung nach dem Freigeben
- Stack-Nutzung nach Bereich
- Stapelnutzung nach Rückgabe
- Doppelfrei oder kostenlos in der Wildnis
Address Sanitizer (ASan)
ASan ist ein Tool, das HWASan ähnelt. Es funktioniert auf mehr Plattformen, wird aber unter Android nicht unterstützt.
KernelAddress sanitizer (KASan)
KASan ist das Kernel-Äquivalent der oben genannten Userspace-Tools. Sie verwenden dieselbe Compilerimplementierung. KASan und ASan/HWASan ergänzen sich, da ein Tool auf den Kernel und das andere auf den Userspace angewendet wird. Wir empfehlen, beide gleichzeitig zu aktivieren, um die Anzahl der Buildkonfigurationen und die Testmatrix zu reduzieren.
UndefinedBehaviorSanitizer (UBSan)
UBSan führt eine Instrumentierung zur Kompilierungszeit durch, um verschiedene Arten von nicht speichersicherem undefiniertem Verhalten zu prüfen. Dazu gehören die Überprüfung von Überlauf bei vorzeichenbehafteten und nicht vorzeichenbehafteten Ganzzahlen (IntSan), Grenzwertprüfungen für Arrays mit statischer Größe (BoundsSan) und viele andere Arten von nicht definiertem Verhalten. IntSan und BoundsSan eignen sich auch als Sicherheitsmaßnahme für die Produktion.