Configuration MTE

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 constructeurs d'appareils.

Ce document décrit les paramètres et la portée de MTE qui, à notre avis, offrent un bon compromis entre sécurité et coût pour les utilisateurs d'Android en tant qu'atténuation permanente des vulnérabilités.

Noyau

MTE dans le noyau est configuré via la ligne de commande. La valeur par défaut est ON en mode Sync. Ceci est sujet à changement futur pour plusieurs raisons :

  • Il a été démontré que cela affecte considérablement les performances et nécessite un travail d’optimisation.
  • La qualité du code du noyau est largement perçue comme étant insuffisante pour expédier MTE en mode application (c'est-à-dire panique en cas d'échec).

La recommandation actuelle est de désactiver le noyau MTE sur les appareils de production. Pour ce faire, ajoutez kasan=off à la ligne de commande du noyau.

Espace utilisateur

Google fournit une liste par défaut des binaires de l'espace utilisateur à protéger avec MTE. La liste a été composée avec les entrées d'Android Security et comprend des composants privilégiés et/ou gérant des entrées non fiables. La liste à jour des binaires natifs recommandés avec MTE se trouve dans le fichier memtag-common.mk du système de build Android. De plus, plusieurs applications système sont également incluses : actuellement, Nfc, Bluetooth et SecureElement. Ces binaires et applications sont activés en mode Async par défaut.

La recommandation actuelle consiste à utiliser la liste de cibles par défaut (aucune modification requise). De plus, il est recommandé d’évaluer les ajouts BSP et OEM au système principal et d’activer MTE sur ceux qui sont sensibles en matière de sécurité.

Applications

Les trois applications système répertoriées ci-dessus sont les seules à utiliser MTE pour le moment. Pour qu'une application tierce active MTE, son AndroidManifest.xml devra spécifier android:memtagMode avec une valeur autre que off . Ainsi, les suites de benchmark courantes telles que Geekbench ou AnTuTu ne fonctionnent pas avec MTE. Si le MTE du noyau est également désactivé (voir kasan=off ci-dessus), alors les tests devraient montrer un impact très limité sur les performances, voire inexistant.

Comme pour les autres applications, le support MTE est activement développé dans Chrome. La version actuelle du Play Store de Chrome inclut le paramètre memtagMode=async dans le manifeste. Nous espérons également qu'un certain nombre d'applications soucieuses de la sécurité dans l'écosystème Android (par exemple, les applications bancaires) finiront par faire de même. D’un autre côté, nous nous attendons à ce que certaines applications qui exigent des performances CPU maximales, comme les jeux, choisissent de garder MTE désactivé.

Autres modes

Les instructions ci-dessus utilisent uniquement le mode MTE asynchrone partout. Selon le matériel, d'autres modes peuvent être presque, ou exactement aussi rapides. Ils fournissent également de meilleurs diagnostics et des propriétés d’atténuation des vulnérabilités un peu plus fortes.

Nous vous recommandons de tester une ou deux autres configurations pour voir si elles sont suffisamment adaptées à vos besoins en performances/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 sync (ou asymm ) entraînerait la mise à niveau automatique et silencieuse de tout processus de l'espace utilisateur ayant demandé le mode Async vers Sync (ou Asymm) lors de son exécution 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 si elles satisfont à vos exigences de performances et de puissance. Quelques configurations intéressantes à explorer :

  • Asymm sur tous les cœurs.
  • Asymm sur les gros cœurs, Sync sur les autres cœurs.

Pour vérifier qu'un processus demande le mode Async (avec mise à niveau automatique possible), vérifiez que la ligne suivante inclut à la fois PR_MTE_TCF_SYNC et PR_MTE_TCF_ASYNC :

  debuggerd  | head -30 | grep tagged_addr

Malheureusement, il n’existe pas de moyen simple de déterminer le mode efficace d’un processus ; mais tout processus affichant les deux valeurs répertoriées ci-dessus est soumis au comportement de mise à niveau automatique.