MTE-Konfiguration

MTE kann unabhängig im Android-Kernel und in jedem Prozess im Android-System aktiviert werden. Google schreibt keine bestimmte Konfiguration vor und ist bestrebt, den Geräteherstellern maximale Flexibilität zu bieten.

In diesem Dokument werden MTE-Einstellungen und -Bereiche beschrieben, die unserer Meinung nach einen guten Kompromiss zwischen Sicherheit und Kosten für Android-Benutzer bieten, da sie eine stets aktive Schwachstellenminderung bieten.

Kernel

MTE im Kernel wird über die Befehlszeile konfiguriert. Im Synchronisierungsmodus ist die Standardeinstellung EIN. Dies kann sich aus mehreren Gründen in Zukunft ändern:

  • Es hat sich gezeigt, dass es die Leistung erheblich beeinträchtigt und Optimierungsarbeiten erforderlich sind.
  • Es wird allgemein angenommen, dass die Qualität des Kernel-Codes nicht ausreicht, um MTE im erzwingenden (d. h. Panic-on-Failure)-Modus auszuliefern.

Die aktuelle Empfehlung besteht darin, Kernel-MTE auf Produktionsgeräten zu deaktivieren . Fügen Sie dazu kasan=off zur Kernel-Befehlszeile hinzu.

Benutzerbereich

Google stellt eine Standardliste von Userspace-Binärdateien bereit, die mit MTE geschützt werden sollen. Die Liste wurde mit den Eingaben von Android Security zusammengestellt und enthält Komponenten, die privilegiert sind und/oder nicht vertrauenswürdige Eingaben verarbeiten. Die aktuelle Liste der nativen Binärdateien, die mit MTE empfohlen werden, finden Sie in der Datei memtag-common.mk im Android-Build-System. Darüber hinaus sind auch mehrere Systemanwendungen enthalten: derzeit Nfc, Bluetooth und SecureElement. Diese Binärdateien und Anwendungen sind standardmäßig im Async-Modus aktiviert.

Die aktuelle Empfehlung lautet, die Standardzielliste zu verwenden (keine Änderungen erforderlich). Darüber hinaus wird empfohlen, BSP- und OEM-Ergänzungen zum Kernsystem zu evaluieren und MTE für diejenigen zu aktivieren, die sicherheitsrelevant sind.

Anwendungen

Die drei oben aufgeführten Systemanwendungen sind derzeit die einzigen, die MTE verwenden. Damit eine Drittanbieteranwendung MTE aktivieren kann, müsste ihre AndroidManifest.xml android:memtagMode mit einem anderen Wert als off angeben. Daher laufen gängige Benchmark-Suiten wie Geekbench oder AnTuTu nicht mit MTE. Wenn Kernel-MTE ebenfalls deaktiviert ist (siehe kasan=off oben), wird erwartet, dass die Benchmarks, wenn überhaupt, nur sehr begrenzte Auswirkungen auf die Leistung zeigen.

Was die anderen Apps betrifft, wird die MTE-Unterstützung in Chrome aktiv weiterentwickelt. Die aktuelle Play Store-Version von Chrome enthält die Einstellung memtagMode=async im Manifest. Wir gehen auch davon aus, dass eine Reihe sicherheitsbewusster Apps im Android-Ökosystem (z. B. Banking-Apps) irgendwann dasselbe tun werden. Andererseits gehen wir davon aus, dass einige Anwendungen, die eine maximale CPU-Leistung erfordern, wie z. B. Spiele, sich dafür entscheiden, MTE deaktiviert zu lassen.

Andere Modi

Die obigen Anweisungen verwenden überall nur den asynchronen MTE-Modus. Abhängig von der Hardware können andere Modi fast oder genau so schnell sein. Sie bieten außerdem eine bessere Diagnose und etwas stärkere Eigenschaften zur Schwachstellenminderung.

Wir empfehlen, ein oder zwei andere Konfigurationen zu testen, um zu sehen, ob sie Ihren Leistungs-/Stromanforderungen genügen. MTE-Modi können für jeden CPU-Kern im System festgelegt werden, indem in /sys/devices/system/cpu/cpu*/mte_tcf_preferred geschrieben wird. Das Schreiben von sync (oder asymm ) würde beispielsweise dazu führen, dass jeder Userspace-Prozess, der den Async-Modus angefordert hat, stillschweigend automatisch auf Sync (oder Asymm) aktualisiert wird, während er auf diesem Kern ausgeführt wird. Dieses Setup kann beim Gerätestart in einer .rc-Datei durchgeführt werden.

Wir empfehlen, eine oder zwei weitere Konfigurationen zu messen, um zu überprüfen, ob sie Ihren Leistungs- und Leistungsanforderungen genügen. Einige interessante Konfigurationen zum Erkunden:

  • Asymm auf allen Kernen.
  • Asymm auf großen Kernen, Synchronisierung auf anderen Kernen.

Um zu überprüfen, ob ein Prozess den Async-Modus anfordert (mit möglicher automatischer Aktualisierung), überprüfen Sie, ob die folgende Zeile sowohl PR_MTE_TCF_SYNC als auch PR_MTE_TCF_ASYNC enthält:

  debuggerd  | head -30 | grep tagged_addr

Leider gibt es keine einfache Möglichkeit, den effektiven Modus für einen Prozess zu erkennen. Aber jeder Prozess, der beide oben aufgeführten Werte anzeigt, unterliegt dem automatischen Upgrade-Verhalten.