Schattenaufruf-Stack

ShadowCallStack (SCS) ist ein LLVM-Instrumentierungsmodus, der vor Malware und -Rückgabeadresse überschreibt (z. B. Stack-Pufferüberläufe), indem die an ein separat zugewiesenes ShadowCallStack in den Funktionsprolog von Nicht-Blatt-Funktionen und das Laden der Rückgabeadresse aus ShadowCallStack im Funktions-Epilog. Auch die Rücksendeadresse wird gespeichert, auf dem normalen Stack, um Kompatibilität mit Abwicklern zu gewährleisten, wird aber ansonsten nicht verwendet. Dadurch wird sichergestellt, dass Angriffe, bei denen die Rücksendeadresse im regulären Stack geändert wird, haben keine Auswirkungen auf den Ablauf der Programmsteuerung.

Auf aarch64 nutzt die Instrumentierung die x18 um auf den ShadowCallStack zu verweisen, was bedeutet, müssen nicht im Arbeitsspeicher gespeichert werden. So können Sie eine Laufzeit implementieren, die Adresse des ShadowCallStack an Angreifer weiterzugeben, einem beliebigen Arbeitsspeicher.

Implementierung

Android unterstützt ShadowCallStack sowohl für den Kernel als auch für den Nutzerbereich.

SCS für den Kernel aktivieren

Um ShadowCallStack für den Kernel zu aktivieren, fügen Sie die folgende Zeile zur Kernel-Konfigurationsdatei:

CONFIG_SHADOW_CALL_STACK=y

SCS im Userspace aktivieren

Um ShadowCallStack in Userspace-Komponenten zu aktivieren, fügen Sie den folgenden Zeilen in die Blueprint-Datei einer Komponente ein:

sanitize: {
  scs: true
}

SCS geht davon aus, dass das x18-Register zum Speichern der Adresse des ShadowCallStack und wird nicht für andere Zwecke verwendet. Während alle Systeme Bibliotheken kompiliert werden, um das x18-Register zu reservieren. Dies ist möglicherweise problematisch, wenn SCS für Userspace-Komponenten aktiviert ist, die mit In Bearbeitung befindlicher Legacy-Code (z. B. Bibliotheken, die von Drittanbieter- Apps), wodurch das x18-Register überschrieben werden kann. Daher empfehlen wir nur Aktivierung von SCS in eigenständigen Komponenten, die nicht in Legacy-Komponenten geladen werden Binärdateien.

Zertifizierungsstufe

Es gibt keinen speziellen CTS-Test für SCS. Stellen Sie stattdessen sicher, dass CTS Tests durchführt, mit und ohne aktiviertes SCS übergeben, um zu überprüfen, ob SCS .