MTE può essere abilitato in modo indipendente nel kernel Android e in qualsiasi nel sistema Android. Google non impone alcun obbligo e mira a fornire la massima flessibilità al dispositivo costruttori.
Questo documento descrive le impostazioni e l'ambito dell'MTE che, a nostro parere, offre un buon compromesso tra sicurezza e costi per Android come mitigazione sempre attiva delle vulnerabilità.
Kernel
L'MTE nel kernel è configurato tramite la riga di comando. La per impostazione predefinita è ON in modalità di sincronizzazione. Questa modifica è soggetta a modifiche future per per diversi motivi:
- È stato dimostrato che influisce significativamente su prestazioni ed esigenze delle attività di ottimizzazione.
- La qualità del codice del kernel è ampiamente percepita come insufficiente da distribuire MTE in modalità di applicazione forzata (panic-on-failure).
Il consiglio attuale è di disabilitare l'MTE del kernel su
i dispositivi di produzione. Per farlo, aggiungi kasan=off
al
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 con privilegi e/o gestiscono componenti non attendibili di input. L'elenco aggiornato di file binari nativi consigliati con MTE è disponibile in il memtag-common.mk nella build di Android di un sistema operativo completo. Inoltre, diversi app di sistema attualmente sono inclusi Nfc, Bluetooth e SecureElement. Questi programmi binari e app vengono è attivata per impostazione predefinita in modalità asincrona.
Il consiglio attuale è di utilizzare l'elenco di target predefinito (non è necessario apportare modifiche). Inoltre, si consiglia di valutare Aggiunte BSP e OEM al sistema di base e attivazione di MTE su quelli sensibili alla sicurezza.
App
Le tre app di sistema elencate sopra sono le uniche che utilizzano
MTE in questo momento. Affinché un'app di terze parti possa attivare
MTE, AndroidManifest.xml
deve specificare
android:memtagMode
con un valore other
di off
. Di conseguenza, suite di benchmark comuni
Geekbench o AnTuTu non funzionano con MTE. Se anche il kernel MTE è
disattivata (vedi kasan=off
sopra), i benchmark sono
che si prevede un impatto sul rendimento molto limitato, se non del tutto.
Per quanto riguarda le altre app, è attivo lo sviluppo del supporto degli MTE in
Chrome. L'attuale versione del Play Store di Chrome include
memtagMode=async
nel manifest. È anche nostra aspettativa
che alcune app attente alla sicurezza nell'ecosistema Android
come le app di online banking. Il giorno
dall'altro, ci aspettiamo che alcune app che richiedano picchi di CPU
come i giochi, l'opzione MTE verrà disattivata.
Altre modalità
Le istruzioni riportate sopra utilizzano solo la modalità MTE asincrona ovunque. A seconda dell'hardware, altre modalità possono essere quasi o altrettanto rapidamente. Offrono inoltre una diagnostica migliore e con migliori proprietà di mitigazione delle vulnerabilità.
Ti consigliamo di testare una o due altre configurazioni per vedere se
sono sufficienti per soddisfare i requisiti di prestazioni e potenza. Modalità MTE
può essere impostato per ogni core della CPU nel sistema scrivendo
/sys/devices/system/cpu/cpu*/mte_tcf_preferred
. Ad esempio, scrivendo
sync
(o asymm
) causerebbe qualsiasi processo dello spazio utente che ha richiesto
la modalità asincrona di cui eseguire l'upgrade automatico automatico a Sync (o Asymm) mentre
in esecuzione su quel core. Questa configurazione può essere eseguita in un file .rc sul dispositivo
all'avvio del dispositivo.
Consigliamo di misurare una o due altre configurazioni per verificare soddisfano i tuoi requisiti di prestazioni e alimentazione. Alcune configurazioni interessanti da esplorare:
- Asymm su tutti i core.
- Asymm su core di grandi dimensioni, Sincronizzazione su altri core.
Per verificare che un processo richieda la modalità asincrona (con possibili upgrade automatico), controlla che la seguente riga includa entrambi PR_MTE_TCF_SYNC e PR_MTE_TCF_ASYNC:
debuggerd <PID> | head -30 | grep tagged_addr
Sfortunatamente, non è facile capire quale sia la modalità effettiva di un processo; ma qualsiasi processo che mostri entrambi i valori elencati sopra in base al comportamento di upgrade automatico.