Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

ShadowCallStack

ShadowCallStack (SCS) ist ein LLVM-Instrumentierungsmodus , der vor Überschreibungen von Rücksprungadressen (wie Stapelpufferüberläufen) schützt, indem die Rücksprungadresse einer Funktion in einem separat zugewiesenen ShadowCallStack im Funktionsprolog von Nichtblattfunktionen gespeichert und die Rücksprungadresse aus dem ShadowCallStack in der Funktion geladen wird Epilog. Die Absenderadresse wird aus Gründen der Kompatibilität mit Unwindern ebenfalls auf dem regulären Stapel gespeichert, ansonsten jedoch nicht verwendet. Dies stellt sicher, dass Angriffe, die die Rücksprungadresse auf dem regulären Stapel ändern, keine Auswirkungen auf den Programmsteuerungsfluss haben.

Auf aarch64 verwendet die Instrumentierung das x18 Register, um auf den ShadowCallStack zu verweisen. Dies bedeutet, dass Verweise auf den ShadowCallStack nicht im Speicher gespeichert werden müssen. Auf diese Weise kann eine Laufzeit implementiert werden, die verhindert, dass die Adresse des ShadowCallStack Angreifern zugänglich gemacht wird, die beliebigen Speicher lesen können.

Implementierung

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

Aktivieren von SCS für den Kernel

Fügen Sie der Kernel-Konfigurationsdatei die folgende Zeile hinzu, um ShadowCallStack für den Kernel zu aktivieren:

CONFIG_SHADOW_CALL_STACK=y

Aktivieren von SCS im Userspace

Fügen Sie der Blueprint-Datei einer Komponente die folgenden Zeilen hinzu, um ShadowCallStack in Userspace-Komponenten zu aktivieren:

sanitize: {
  scs: true
}

SCS geht davon aus, dass das x18 Register zum Speichern der Adresse des ShadowCallStack reserviert ist und nicht für andere Zwecke verwendet wird. Während alle Systembibliotheken kompiliert werden, um das x18 Register zu reservieren, ist dies möglicherweise problematisch, wenn SCS für Userspace-Komponenten aktiviert ist, die mit in Bearbeitung befindlichem Legacy-Code zusammenarbeiten (z. B. Bibliotheken, die von Anwendungen von Drittanbietern geladen werden könnten), die möglicherweise überlastet sind das x18 Register. Daher empfehlen wir, SCS nur in eigenständigen Komponenten zu aktivieren, die nicht in ältere Binärdateien geladen werden.

Validierung

Es gibt keinen CTS-Test speziell für SCS. Stellen Sie stattdessen sicher, dass CTS-Tests mit und ohne aktiviertem SCS bestanden werden, um sicherzustellen, dass SCS keine Auswirkungen auf das Gerät hat.