Skip to content

MASTG-TEST-0019: Teste de Criptografia de Dados na Rede

Visão Geral

Análise Estática

Testando Solicitações de Rede por Meio de Protocolos Seguros

Primeiro, você deve identificar todas as solicitações de rede no código-fonte e garantir que nenhuma URL HTTP simples seja usada. Certifique-se de que informações sensíveis sejam enviadas por canais seguros usando HttpsURLConnection ou SSLSocket (para comunicação em nível de socket usando TLS).

Testando o Uso de APIs de Rede

Em seguida, mesmo ao usar uma API de baixo nível que supostamente deve fazer conexões seguras (como SSLSocket), esteja ciente de que ela precisa ser implementada com segurança. Por exemplo, o SSLSocket não verifica o nome do host. Use getDefaultHostnameVerifier para verificar o nome do host. A documentação do desenvolvedor Android inclui um exemplo de código.

Testando Tráfego em Texto Simples

Em seguida, você deve garantir que o aplicativo não esteja permitindo tráfego HTTP em texto simples. Desde o Android 9 (nível de API 28), o tráfego HTTP em texto simples é bloqueado por padrão (graças à Configuração Padrão de Segurança de Rede))), mas existem várias maneiras pelas quais um aplicativo ainda pode enviá-lo:

  • Definindo o atributo android:usesCleartextTraffic da tag <application> no arquivo AndroidManifest.xml. Observe que essa flag é ignorada caso a Configuração de Segurança de Rede esteja configurada.
  • Configurando a Configuração de Segurança de Rede para permitir tráfego em texto simples, definindo o atributo cleartextTrafficPermitted como true em elementos <domain-config>.
  • Usando APIs de baixo nível (por exemplo, Socket) para configurar uma conexão HTTP personalizada.
  • Usando um framework multiplataforma (por exemplo, Flutter, Xamarin, ...), pois esses normalmente têm suas próprias implementações para bibliotecas HTTP.

Todos os casos acima devem ser cuidadosamente analisados como um todo. Por exemplo, mesmo que o aplicativo não permita tráfego em texto simples em seu Android Manifest ou Configuração de Segurança de Rede, ele ainda pode estar enviando tráfego HTTP. Esse pode ser o caso se estiver usando uma API de baixo nível (para a qual a Configuração de Segurança de Rede é ignorada) ou um framework multiplataforma mal configurado.

Para mais informações, consulte o artigo "Security with HTTPS and SSL".

Análise Dinâmica

Intercepte o tráfego de rede de entrada e saída do aplicativo testado e certifique-se de que esse tráfego esteja criptografado. Você pode interceptar o tráfego de rede de qualquer uma das seguintes maneiras:

  • Capture todo o tráfego HTTP(S) e WebSocket com um proxy de interceptação como ZAP ou Burp Suite e certifique-se de que todas as solicitações sejam feitas via HTTPS em vez de HTTP.
  • Proxies de interceptação como Burp e ZAP mostrarão principalmente tráfego relacionado à web (por exemplo, HTTP(S), Web Sockets, gRPC, etc.). No entanto, você pode usar um plugin do Burp, como Burp-non-HTTP-Extension, ou a ferramenta mitm-relay para decodificar e visualizar a comunicação via XMPP e outros protocolos.

Alguns aplicativos podem não funcionar com proxies como Burp e ZAP devido ao Certificate Pinning. Nesse cenário, consulte Testando Armazenamentos de Certificados Personalizados e Certificate Pinning.

Para mais detalhes, consulte: