MASTG-TEST-0019: Teste de Criptografia de Dados na Rede
Deprecated Test
This test is deprecated and should not be used anymore. Reason: Nova versão disponível no MASTG V2
Please check the following MASTG v2 tests that cover this v1 test:
- HTTP URLs Embutidas
- Falta de Implementação da Verificação de Nome do Servidor com SSLSockets
- Configurações de Aplicativo Android que Permitem Tráfego em Texto Não Criptografado (Cleartext Traffic)
- Tráfego em Texto Claro Observado na Rede
- Configurações de Framework Multiplataforma que Permitem Tráfego em Texto Claro
- Uso em Runtime de APIs de Rede Transmitindo Tráfego em Texto Claro
- Usando APIs de baixo nível (ex. Socket) para configurar uma conexão HTTP personalizada
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:usesCleartextTrafficda 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
cleartextTrafficPermittedcomo 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: