Configurazione MTE

MTE può essere attivata in modo indipendente nel kernel di Android e in qualsiasi processo del sistema Android. Google non impone alcuna configurazione specifica e mira a fornire la massima flessibilità ai produttori di dispositivi.

Questo documento descrive le impostazioni e l'ambito di MTE che, a nostro avviso, offre un buon compromesso tra sicurezza e costo per gli utenti Android come mitigazione delle vulnerabilità sempre attiva.

Scoppiettio

MTE nel kernel viene configurato tramite la riga di comando. L'impostazione predefinita è ON in modalità Sincronizza. Ciò può cambiare in futuro per diversi motivi:

  • È stato dimostrato che influisce in modo significativo sul rendimento e richiede un lavoro di ottimizzazione.
  • La qualità del codice del kernel è ampiamente considerata insufficiente per la distribuzione dell'MTE in modalità di applicazione (ovvero panico in caso di errore).

Il consiglio attuale è di disattivare l'MTE del kernel sui dispositivi di produzione. Per farlo, aggiungi kasan=off alla riga di comando del kernel.

Spazio utente

Google fornisce un elenco predefinito di binari dello spazio utente da proteggere con MTE. L'elenco è stato compilato con il contributo di Android Security e include componenti con privilegi e/o che gestiscono input non attendibili. L'elenco aggiornato dei binari nativi consigliati con MTE è disponibile nel file memtag-common.mk nel sistema di compilazione Android. Inoltre, sono incluse anche diverse app di sistema: al momento, NFC, Bluetooth e SecureElement. Questi file binari e app sono attivati in modalità asincrona per impostazione predefinita.

Al momento, il consiglio è di utilizzare l'elenco di target predefinito (non sono necessarie modifiche). Inoltre, è consigliabile valutare le aggiunte di BSP e OEM al sistema di base e attivare l'MTE su quelli sensibili alla sicurezza.

App

Al momento, le tre app di sistema elencate sopra sono le uniche che utilizzano MTE. Affinché un'app di terze parti attivi la misurazione del traffico di terze parti, il suo AndroidManifest.xml deve specificare android:memtagMode con un valore diverso da off. Pertanto, suite di benchmark comuni come Geekbench o AnTuTu non vengono eseguite con MTE. Se anche l'MTE del kernel è disabilitato (vedi kasan=off sopra), i benchmark dovrebbero mostrare un impatto sulle prestazioni molto limitato, se non nullo.

Per quanto riguarda le altre app, è in corso lo sviluppo attivo del supporto MTE in Chrome. La versione corrente di Chrome sul Play Store include l'impostazione memtagMode=async nel file manifest. Prevediamo inoltre che un certo numero di app attente alla sicurezza nell'ecosistema Android (ad esempio le app bancarie) farà lo stesso in futuro. D'altra parte, prevediamo che alcune app che richiedono prestazioni massime della CPU, come i giochi, sceglieranno di mantenere disattivata la tecnologia MTE.

Altre modalità

Le istruzioni riportate sopra utilizzano solo la modalità MTE asincrona ovunque. A seconda dell'hardware, altre modalità potrebbero essere quasi o esattamente così veloci. Offrono inoltre una diagnostica migliore e proprietà di mitigazione delle vulnerabilità leggermente più efficaci.

Ti consigliamo di testare una o due altre configurazioni per verificare se sono sufficienti per i tuoi requisiti di prestazioni/potenza. Le modalità MTE possono essere impostate per ogni core della CPU del sistema scrivendo in /sys/devices/system/cpu/cpu*/mte_tcf_preferred. Ad esempio, la scrittura di sync (o asymm) causerebbe l'upgrade automatico silenzioso a Sync (o Asymm) di qualsiasi processo nello spazio utente che ha richiesto la modalità asincrona durante l'esecuzione su quel core. Questa configurazione può essere eseguita in un file .rc al momento dell'avvio del dispositivo.

Ti consigliamo di misurare una o due altre configurazioni per verificare sesoddisfano i tuoi requisiti di rendimento e potenza. Ecco alcune configurazioni interessanti da esplorare:

  • Asymm su tutti i core.
  • Asymm sui core di grandi dimensioni, Sync sugli altri core.

Per verificare che un processo richieda la modalità asincrona (con possibile upgrade automatico), controlla che la riga seguente includa sia PR_MTE_TCF_SYNC sia PR_MTE_TCF_ASYNC:

  debuggerd <PID> | head -30 | grep tagged_addr

Purtroppo, non esiste un modo semplice per visualizzare la modalità effettiva di un processo, ma qualsiasi processo che mostri entrambi i valori sopra elencati è soggetto al comportamento di upgrade automatico.