Configurazione MTE

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

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

Nocciolo

MTE nel kernel viene configurato tramite la riga di comando. L'impostazione predefinita è ON in modalità sincronizzazione. Questo è soggetto a modifiche future per diversi motivi:

  • È stato dimostrato che influisce in modo significativo sulle prestazioni e necessita di lavoro di ottimizzazione.
  • La qualità del codice kernel è ampiamente percepita come insufficiente per fornire MTE in modalità di applicazione (ovvero, panico in caso di guasto).

La raccomandazione attuale è quella di disabilitare il kernel MTE sui dispositivi di produzione. Per fare ciò, aggiungi kasan=off alla riga di comando del kernel.

Spazio utente

Google fornisce un elenco predefinito di file binari dello spazio utente da proteggere con MTE. L'elenco è stato composto con l'input di Android Security e include componenti privilegiati e/o che gestiscono input non attendibili. L'elenco aggiornato dei file binari nativi consigliati con MTE è disponibile nel file memtag-common.mk nel sistema di build Android. Inoltre, sono incluse anche diverse applicazioni di sistema : attualmente Nfc, Bluetooth e SecureElement. Questi file binari e applicazioni sono abilitati in modalità asincrona per impostazione predefinita.

La raccomandazione attuale è quella di utilizzare l'elenco di destinazioni predefinito (non sono necessarie modifiche). Inoltre, si consiglia di valutare le aggiunte BSP e OEM al sistema principale e abilitare MTE su quelli sensibili alla sicurezza.

Applicazioni

Le tre applicazioni di sistema sopra elencate sono le uniche che utilizzano MTE in questo momento. Affinché un'applicazione di terze parti possa abilitare MTE, il relativo AndroidManifest.xml dovrebbe specificare android:memtagMode con un valore diverso da off . Pertanto, le suite di benchmark comuni come Geekbench o AnTuTu non funzionano con MTE. Se anche l'MTE del kernel è disabilitato (vedi kasan=off sopra), allora si prevede che i benchmark mostreranno un impatto sulle prestazioni molto limitato, se non addirittura nullo.

Come per le altre app, in Chrome è attivo lo sviluppo del supporto MTE. La versione attuale di Chrome nel Play Store include l'impostazione memtagMode=async nel manifest. Ci aspettiamo anche che un certo numero di app attente alla sicurezza nell’ecosistema Android (ad esempio, le app bancarie) facciano lo stesso prima o poi. D'altra parte, ci aspettiamo che alcune applicazioni che richiedono prestazioni massime della CPU, come i giochi, scelgano di mantenere MTE disabilitato.

Altre modalità

Le istruzioni precedenti utilizzano ovunque solo la modalità MTE asincrona. A seconda dell'hardware, altre modalità potrebbero essere quasi o esattamente altrettanto veloci. Forniscono inoltre una migliore diagnostica e proprietà di mitigazione della vulnerabilità leggermente più forti.

Ti consigliamo di testare una o due altre configurazioni per vedere se sono sufficientemente buone per i tuoi requisiti di prestazioni/potenza. Le modalità MTE possono essere impostate per ciascun core della CPU nel sistema scrivendo in /sys/devices/system/cpu/cpu*/mte_tcf_preferred . Ad esempio, la scrittura sync (o asymm ) causerebbe l'aggiornamento automatico e silenzioso di qualsiasi processo dello spazio utente che ha richiesto la modalità Async a Sync (o Asymm) 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 se soddisfano i tuoi requisiti di prestazioni e alimentazione. Alcune configurazioni interessanti da esplorare:

  • Asimmetrico su tutti i core.
  • Asimmetria su core di grandi dimensioni, sincronizzazione su altri core.

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

  debuggerd  | head -30 | grep tagged_addr

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