Skip to content

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-config aplica-se a todas as conexões que o aplicativo tenta estabelecer.
  • domain-config substitui base-config para domínios específicos (pode conter múltiplas entradas domain).

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:

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>