MTE peut être activé indépendamment dans le noyau Android et dans n'importe quel processus du système Android. Google n'impose aucune configuration spécifique et vise à offrir une flexibilité maximale aux fabricants d'appareils.
Ce document décrit les paramètres et la portée de la MTE qui, selon nous, offrent un bon compromis entre sécurité et coût pour les utilisateurs d'Android en tant que mitigation des failles permanente.
Noyau
MTE dans le noyau est configuré via la ligne de commande. Par défaut, il est activé en mode Sync. Cette offre est susceptible d'évoluer à l'avenir pour plusieurs raisons:
- Il a été démontré qu'il affecte considérablement les performances et nécessite des travaux d'optimisation.
- La qualité du code du noyau est largement considérée comme insuffisante pour distribuer le MTE en mode d'application (c'est-à-dire en mode panique en cas de défaillance).
La recommandation actuelle est de désactiver MTE du kernel sur les appareils de production. Pour ce faire, ajoutez kasan=off
à la ligne de commande du kernel.
Espace utilisateur
Google fournit une liste par défaut de binaires d'espace utilisateur à protéger avec MTE. La liste a été composée avec les informations fournies par Android Security et inclut des composants privilégiés et/ou qui gèrent des entrées non approuvées. La liste à jour des binaires natifs recommandés avec MTE se trouve dans le fichier memtag-common.mk du système de compilation Android. De plus, plusieurs systèmes d'application sont également inclus: actuellement, Nfc, Bluetooth et SecureElement. Ces binaires et applications sont activés en mode asynchrone par défaut.
La recommandation actuelle est d'utiliser la liste de cibles par défaut (aucune modification requise). De plus, nous vous recommandons d'évaluer les ajouts de BSP et d'OEM au système de base, et d'activer la MTE sur ceux qui sont sensibles à la sécurité.
Applis
Les trois applications système listées ci-dessus sont les seules à utiliser MTE pour le moment. Pour qu'une application tierce puisse activer MTE, son AndroidManifest.xml
doit spécifier android:memtagMode
avec une valeur autre que off
. Par conséquent, les suites de benchmarks courantes telles que Geekbench ou AnTuTu ne s'exécutent pas avec MTE. Si le MTE du kernel est également désactivé (voir kasan=off
ci-dessus), les benchmarks devraient montrer un impact sur les performances très limité, voire nul.
Comme pour les autres applications, le développement de la prise en charge de MTE dans Chrome est en cours. La version actuelle de Chrome sur le Play Store inclut le paramètre memtagMode=async
dans le fichier manifeste. Nous nous attendons également à ce qu'un certain nombre d'applications axées sur la sécurité de l'écosystème Android (par exemple, les applications bancaires) fassent de même à terme. En revanche, nous nous attendons à ce que certaines applications qui exigent des performances de processeur maximales, comme les jeux, choisissent de laisser MTE désactivé.
Autres modes
Les instructions ci-dessus n'utilisent que le mode MTE asynchrone partout. Selon le matériel, d'autres modes peuvent être presque aussi rapides, voire exactement. Elles fournissent également de meilleurs diagnostics et des propriétés de mitigation des failles plus efficaces.
Nous vous recommandons de tester une ou deux autres configurations pour voir si elles sont suffisantes pour vos exigences en termes de performances/d'alimentation. Les modes MTE peuvent être définis pour chaque cœur de processeur du système en écrivant dans /sys/devices/system/cpu/cpu*/mte_tcf_preferred
. Par exemple, l'écriture de sync
(ou asymm
) entraînerait la mise à niveau automatique et silencieuse de tous les processus d'espace utilisateur ayant demandé le mode asynchrone vers Sync (ou Asymm) lorsqu'ils s'exécutent sur ce noyau. Cette configuration peut être effectuée dans un fichier .rc au démarrage de l'appareil.
Nous vous recommandons de mesurer une ou deux autres configurations pour vérifier qu'elles répondent à vos exigences en termes de performances et d'alimentation. Voici quelques configurations intéressantes à explorer:
- Asymm sur tous les cœurs.
- Asymm sur le ou les cœurs principaux, Sync sur les autres cœurs.
Pour vérifier qu'un processus demande le mode asynchrone (avec une mise à niveau automatique possible), vérifiez que la ligne suivante inclut à la fois PR_MTE_TCF_SYNC et PR_MTE_TCF_ASYNC:
debuggerd <PID> | head -30 | grep tagged_addr
Malheureusement, il n'existe pas de moyen simple de voir le mode effectif d'un processus. Toutefois, tout processus qui affiche les deux valeurs listées ci-dessus est soumis au comportement de mise à niveau automatique.