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 möchte den Geräteherstellern maximale Flexibilität bieten.

In diesem Dokument werden MTE-Einstellungen und -Umfang beschrieben, die unserer Meinung nach für Android-Nutzer ein gutes Gleichgewicht zwischen Sicherheit und Kosten bieten, da sie eine ständige Risikominderung darstellen.

Ploppendes Popcorn

MTE im Kernel wird über die Befehlszeile konfiguriert. Im Synchronisierungsmodus ist diese Option standardmäßig aktiviert. Dies kann sich aus verschiedenen Gründen ändern:

  • Es hat sich gezeigt, dass sich das erheblich auf die Leistung auswirkt und optimiert werden muss.
  • Die Qualität des Kernelcodes wird allgemein als unzureichend angesehen, um MTE im Erzwingungsmodus (d. h. im Panik-bei-Fehler-Modus) zu liefern.

Derzeit wird empfohlen, die Kernel-MTE auf Produktionsgeräten zu deaktivieren. Fügen Sie dazu kasan=off zur Kernel-Befehlszeile hinzu.

Nutzerbereich

Google stellt eine Standardliste von Userspace-Binärdateien bereit, die mit MTE geschützt werden sollen. Die Liste wurde mithilfe von Android-Sicherheitsinformationen erstellt und enthält Komponenten, die Berechtigungen haben und/oder nicht vertrauenswürdige Eingaben verarbeiten. Eine aktuelle Liste der nativen Binärdateien, die für MTE empfohlen werden, finden Sie in der Datei memtag-common.mk im Android-Build-System. Außerdem sind mehrere System-Apps enthalten: derzeit NFC, Bluetooth und SecureElement. Diese Binärdateien und Apps sind standardmäßig im asynchronen Modus aktiviert.

Derzeit wird empfohlen, die Standardzielliste zu verwenden. Es sind keine Änderungen erforderlich. Außerdem wird empfohlen, BSP- und OEM-Erweiterungen des Kernsystems zu bewerten und MTE für die sicherheitsrelevanten zu aktivieren.

Apps

Die drei oben aufgeführten System-Apps sind derzeit die einzigen, die MTE verwenden. Damit eine Drittanbieter-App die dynamische Anzeigenbereitstellung aktivieren kann, muss android:memtagMode in AndroidManifest.xml mit einem anderen Wert als off angegeben werden. Daher werden gängige Benchmark-Suiten wie Geekbench oder AnTuTu nicht mit MTE ausgeführt. Wenn auch die MTE des Kernels deaktiviert ist (siehe kasan=off oben), sollten die Benchmarks nur sehr geringe Leistungseinbußen zeigen, wenn überhaupt.

Wie bei den anderen Apps wird die MTE-Unterstützung in Chrome aktiv entwickelt. Die aktuelle Play Store-Version von Chrome enthält die Einstellung memtagMode=async im Manifest. Wir gehen davon aus, dass auch eine Reihe sicherheitsbewusster Apps im Android-Ökosystem (z. B. Banking-Apps) dies irgendwann tun werden. Wir gehen jedoch davon aus, dass einige Apps, die eine hohe CPU-Leistung erfordern, wie z. B. Spiele, die Funktion weiterhin deaktivieren werden.

Andere Modi

In der obigen Anleitung wird überall nur der asynchrone MTE-Modus verwendet. Je nach Hardware sind andere Modi möglicherweise fast oder genau so schnell. Außerdem bieten sie eine bessere Diagnose und etwas stärkere Funktionen zur Behebung von Sicherheitslücken.

Wir empfehlen, eine oder zwei weitere Konfigurationen zu testen, um festzustellen, ob sie für Ihre Leistungs-/Energieanforderungen geeignet sind. MTE-Modi können für jeden CPU-Kern im System festgelegt werden, indem Sie in /sys/devices/system/cpu/cpu*/mte_tcf_preferred schreiben. Wenn Sie beispielsweise sync (oder asymm) schreiben, wird jeder Userspace-Prozess, der den asynchronen Modus angefordert hat, während der Ausführung auf diesem Kern automatisch und ohne Benachrichtigung auf „Sync“ (oder „Asymm“) umgestellt. Diese Einrichtung kann beim Starten des Geräts in einer .rc-Datei erfolgen.

Wir empfehlen, eine oder zwei weitere Konfigurationen zu messen, um zu prüfen, ob sie Ihre Leistungs- und Leistungsanforderungen erfüllen. Einige interessante Konfigurationen:

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

Um zu prüfen, ob ein Prozess den asynchronen Modus (mit möglichem automatischen Upgrade) anfordert, prüfe, ob die folgende Zeile sowohl PR_MTE_TCF_SYNC als auch PR_MTE_TCF_ASYNC enthält:

  debuggerd <PID> | head -30 | grep tagged_addr

Leider gibt es keine einfache Möglichkeit, den effektiven Modus für einen Prozess zu sehen. Bei allen Prozessen, für die beide oben aufgeführten Werte angezeigt werden, wird das automatische Upgrade angewendet.