MASTG-KNOW-0014: Configuração de Segurança de Rede Android
A partir do Android 7.0 (API level 24), aplicativos Android podem personalizar suas configurações de segurança de rede usando o recurso chamado Configuração de Segurança de Rede, que oferece as seguintes capacidades principais:
- Tráfego em texto claro: Protege aplicativos contra o uso acidental de tráfego em texto claro (ou o habilita).
- Âncoras de confiança personalizadas: Personaliza quais Autoridades de Certificação (CAs) são confiáveis para conexões seguras de um aplicativo. Por exemplo, confiar em certificados autoassinados específicos ou restringir o conjunto de CAs públicas confiáveis para o aplicativo.
- Certificate pinning: Restringe a conexão segura de um aplicativo a certificados específicos.
- Substituições apenas para depuração: Depura com segurança conexões seguras em um aplicativo sem adicionar riscos à base instalada.
Se um aplicativo define uma Configuração de Segurança de Rede personalizada, você pode obter sua localização procurando por android:networkSecurityConfig no arquivo AndroidManifest.xml.
<application android:networkSecurityConfig="@xml/network_security_config"
Neste caso, o arquivo está localizado em @xml (equivalente a /res/xml) e tem o nome "network_security_config" (que pode variar). Você deve encontrá-lo como "res/xml/network_security_config.xml". Se uma configuração existir, o seguinte evento deve estar visível nos logs do sistema ( Monitoramento de Logs do Sistema):
D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config
A Configuração de Segurança de Rede é baseada em XML e pode ser usada para configurar definições para todo o aplicativo e específicas por domínio:
base-configaplica-se a todas as conexões que o aplicativo tenta estabelecer.domain-configsubstituibase-configpara domínios específicos (pode conter múltiplas entradasdomain).
Por exemplo, a seguinte configuração usa base-config para impedir tráfego em texto claro para todos os domínios. Mas substitui essa regra usando domain-config, permitindo explicitamente tráfego em texto claro para localhost.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false" />
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
</domain-config>
</network-security-config>
Saiba mais:
- "Um Guia do Analista de Segurança para Configuração de Segurança de Rede no Android P"
- Android Developers - Configuração de Segurança de Rede
- Android Codelab - Configuração de Segurança de Rede
Configurações Padrão¶
A configuração padrão para aplicativos direcionados ao Android 9 (API level 28) e superior é a seguinte:
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
A configuração padrão para aplicativos direcionados ao Android 7.0 (API level 24) até Android 8.1 (API level 27) é a seguinte:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
A configuração padrão para aplicativos direcionados ao Android 6.0 (API level 23) e inferior é a seguinte:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>