A MTE pode ser ativada de forma independente no kernel do Android e em qualquer processo no sistema Android. O Google não exige nenhuma configuração específica e tem como objetivo oferecer a máxima flexibilidade aos desenvolvedores de dispositivos.
Este documento descreve as configurações e o escopo da MTE que, na nossa opinião, oferece um bom equilíbrio entre segurança e custo para usuários do Android como mitigação de vulnerabilidade sempre ativa.
Kernel
A MTE no kernel é configurada pela linha de comando. O padrão é ATIVADO no modo de sincronização. Isso está sujeito a mudanças futuras por vários motivos:
- Ela afeta significativamente a performance e precisa de otimização.
- A qualidade do código do kernel é amplamente considerada insuficiente para enviar MTE no modo de aplicação (ou seja, pânico em caso de falha).
A recomendação atual é desativar a MTE do kernel em
dispositivos de produção. Para fazer isso, adicione kasan=off
à
linha de comando do kernel.
Espaço do usuário
O Google fornece uma lista padrão de binários do espaço do usuário para serem protegidos com MTE. A lista foi composta com a entrada do Android Security e inclui componentes que são privilegiados e/ou processam entradas não confiáveis. A lista atualizada de binários nativos recomendados com MTE pode ser encontrada no arquivo memtag-common.mk no sistema de build do Android. Além disso, vários apps do sistema também são incluídos: atualmente, NFC, Bluetooth e SecureElement. Esses binários e apps são ativados no modo assíncrono por padrão.
A recomendação atual é usar a lista de destino padrão, sem necessidade de mudanças. Além disso, é recomendável avaliar as adições de BSP e OEM ao sistema principal e ativar a MTE nos que são sensíveis à segurança.
Apps
Os três apps do sistema listados acima são os únicos que usam
a MTE no momento. Para que um app de terceiros ative
a MTE, o AndroidManifest.xml
dele precisa especificar
android:memtagMode
com um valor diferente
de off
. Portanto, os pacotes de comparativos de mercado comuns, como
Geekbench ou AnTuTu, não são executados com a MTE. Se a MTE do kernel também estiver
desativada (consulte kasan=off
acima), os comparativos de mercado
vão mostrar um impacto de desempenho muito limitado, se houver algum.
Quanto aos outros apps, há um desenvolvimento ativo do suporte à MTE no
Chrome. A versão atual do Chrome na Play Store inclui
a configuração memtagMode=async
no manifesto. Também esperamos
que vários apps preocupados com a segurança no ecossistema do Android
(por exemplo, apps bancários) façam o mesmo. Por
outro lado, esperamos que alguns apps que exigem o pico de desempenho
da CPU, como jogos, mantenham a MTE desativada.
Outros modos
As instruções acima usam apenas o modo MTE assíncrono em todos os lugares. Dependendo do hardware, outros modos podem ser quase ou exatamente tão rápidos. Eles também fornecem diagnósticos melhores e propriedades de mitigação de vulnerabilidades mais fortes.
Recomendamos testar uma ou duas outras configurações para saber se elas
são boas o suficiente para seus requisitos de desempenho/potência. Os modos MTE
podem ser definidos para cada núcleo da CPU no sistema escrevendo em
/sys/devices/system/cpu/cpu*/mte_tcf_preferred
. Por exemplo, a gravação de
sync
(ou asymm
) faria com que qualquer processo do espaço do usuário que tenha solicitado
o modo assíncrono fosse atualizado automaticamente para o modo síncrono (ou Asymm) enquanto
executado nesse núcleo. Essa configuração pode ser feita em um arquivo .rc no momento da inicialização
do dispositivo.
Recomendamos medir uma ou duas outras configurações para verificar se elas atendem aos requisitos de desempenho e energia. Confira algumas configurações interessantes:
- Asymm em todas as cores.
- Asymm em núcleos grandes, Sync em outros núcleos.
Para verificar se um processo está solicitando o modo assíncrono (com possível upgrade automático), verifique se a linha a seguir inclui PR_MTE_TCF_SYNC e PR_MTE_TCF_ASYNC:
debuggerd <PID> | head -30 | grep tagged_addr
Infelizmente, não há uma maneira fácil de conferir o modo efetivo de um processo. No entanto, qualquer processo que mostre os dois valores listados acima está sujeito ao comportamento de atualização automática.