Interceptando conexões com OWASP Zed Attack Proxy

Sobre o ZAP

O Zed Attack Proxy (ZAP) é uma ferramenta integrada de testes de penetração, fácil de usar, para encontrar vulnerabilidades em aplicações web. Ele é projetado para ser usado por pessoas com uma ampla gama de experiência de segurança e, como tal, é ideal para desenvolvedores e testadores funcionais que são novos para testes de penetração. ZAP fornece scanners automatizados, bem como um conjunto de ferramentas que permitem encontrar vulnerabilidades de segurança manualmente.

Instalação

A instalação é bem simples: pode ser feita acessando a página de download e clicando no link referente ao seu sistema operacional. Após isso, se você estiver utilizando GNU/Linux, basta descompactar o arquivo gzip e executar o script zap.sh, como em:

$ wget https://github.com/zaproxy/zaproxy/releases/download/2.5.0/ZAP_2.5.0_Linux.tar.gz
$ tar -xzf ZAP_2.5.0_Linux.tar.gz
$ cd ZAP_2.5.0
$ ./zap.sh

Como é a primeira execução, será apresentada a licença do software e, caso a aceite, o ZAP irá carregar sua interface gráfica e lhe perguntará se deseja persistir, isto é, salvar, o que você irá fazer:

A primeira opção irá armazenar os dados em ~/.ZAP/sessions/. A segunda lhe perguntará o caminho e nome do arquivo que desejas salvar, já a última não salvará o que for feito no ZAP.

Configurando o proxy

Este processo é dividido em duas partes: configurar o proxy embutido no ZAP e configurar o software que você irá utilizar para fazer as requisições (geralmente um browser).

Para a primeira parte basta acessar a janela de configuração do proxy do ZAP, para isso vá ao menu Ferramentas -> Opções e selecione “Proxy Local” na listagem a esquerda.

As opções mais comuns de serem alteradas são “address” e “porta”, que significam, respectivamente, o endereço e porta onde o proxy ficará disponível. Para fins deste artigo, altere o valor do campo “address” para o ip de rede local do seu computador, como em 192.168.0.87. Isto fará com que outros dispositivos na mesma rede, como um smartphone, possam acessar o proxy ativo na sua máquina.

Agora é necessário fazer com que a conexão passe pelo proxy no ZAP. Irei demonstrar como fazer isso utilizando o Firefox, Android e iOS.

Nota: O Google Chrome, Chromium e alguns outros browsers utilizam as configurações de proxy definidas globalmente no sistema operacional, já no Firefox podemos optar por utilizar configurações que afetarão apenas as conexões feitas nele.

Firefox

Vá em Menu -> Preferências -> Avançado -> Rede e clique em “Configurar conexão…”.

Há duas maneiras de configurarmos o proxy aqui. A primeira é selecionar a opção “Configuração manual de proxy” e preencher os campos com as informações de endereço e porta que foram configuradas no ZAP:

A segunda maneira é selecionar a opção “Endereço para configuração automática de proxy”. O campo logo abaixo aceita a URL de um arquivo PAC que irá dizer ao browser quais os dados do proxy que ele deve utilizar. Basta informar http://IP_DO_ZAP:PORTA_DO_ZAP/proxy.pac. Exemplo: http://192.168.0.87:8080/proxy.pac.

Sinta-se livre para escolher a maneira que mais lhe agradar.

Uma vez configurado o proxy, é necessário importar o certificado gerado pelo ZAP. Para isso acesse http://IP_DO_ZAP:PORTA_DO_ZAP/other/core/other/rootcert ou http://zap:8080/other/core/other/rootcert e salve o arquivo localmente. Depois acesse o menu do Firefox e vá em Avançado -> Certificados, clique em “Ver certificados”. Na tela que aprece clique em “Importar”, selecione o arquivo que foi baixado e marque como na imagem:

Android

Em um aparelho com Android a configuração do proxy será feita nas configurações avançadas da rede Wi-Fi na qual ele está conectado. Na versão 6 (Marshmallow) você pode ir em Menu -> Configurar -> Wi-Fi. Pressione e segure sobre o nome da rede conectada, toque em “Modificar a rede” e depois em “Opções avançadas”.

Na imagem acima optei por usar “Autoconfiguração do proxy” no campo “Proxy” e preencher a “URL do PAC”, mas você também pode escolher “Manual” e preencher o Host e Porta, assim como demonstrado no exemplo anteior, com o Firefox.

Para importar o certificado, abra o Google Chrome e acesse http://zap:8080/other/core/other/rootcert. Assim que o download terminar será exibida uma tela como esta:

Preencha o campo “Nome do certificado” e clique em OK.

Emulador Android

Se você estiver utilizando o emulador do Android, basta iniciá-lo com a opção http-proxy. Exemplo: /caminho/para/o/diretorio/do/sdk/tools/emulator -avd NomeDaImagem -http-proxy 192.168.0.87:8080.

iOS

No iOS anterior a versão 10, para importar o certificado é necessário abrir o Safari e acessar http://zap:8080/other/core/other/rootcert. Assim que o download terminar será exibida uma tela para importação.

Utilizando a interface do ZAP

Agora que você tem um ou mais softwares configurados para redirecionarem suas conexões para o proxy do ZAP, basta acessar algum site e/ou app e você verá, na aba “Histórico”, as chamadas que ele faz.

Clique em uma das linhas para ver qual foi a requisição feita ao servidor e o que ele respondeu:

Tentativa de login registrada pelo ZAP. Repare que o usuário e senha podem ser vistos no corpo da requisição.

Uma funcionalidade muito útil é poder editar uma requisição e enviá-la novamente ao servidor. Para isso clique com o botão direito sobre ela e selecione “Reenviar…”. Você verá uma tela semelhante a esta:

Nela é possível editar tanto o cabeçalho quanto o corpo da requisição e enviá-los novamente ao servidor. É onde a parte interessante começa.

Agradecimentos

Agradeço ao Maycon Vitali pelas dúvidas esclarecidas ao longo dos anos e a todos os integrantes do OWASP pelo excelente trabalho.

Referências