Análise de endpoint — Engenharia Reversa de APIs com Mitmproxy

Fernando Silva
6 min readNov 7, 2022

--

Mitmproxy é um proxy que captura a requisição HTTP/S

Quando se fala em engenharia reversa de APIs, talvez você pense em espionagem corporativa ou algo ilegal, ou eticamente questionável venha à mente. No entanto, também há motivos legítimos para fazer engenharia reversa de uma API.

Por que fazer engenharia reversa de uma API?

As APIs nem sempre são documentadas. Ao depurar uma API, você pode diagnosticar e resolver problemas mais rapidamente ao visualizar todos os dados enviados e recebidos. Isso permite que você obtenha uma compreensão mais profunda de uma API.

Saber como uma API realmente se comporta permite identificar falhas e vulnerabilidades de segurança, como vazamento acidental de dados. Para realizar isto utilizaremos uma solução de proxy.

O que é um proxy HTTP/S?

Um servidor proxy web é como um intermediário que fica entre a aplicação cliente e o servidor. O proxy web é um servidor substituto que pode interceptar o tráfego HTTP entre um navegador web e o servidor real da aplicação.

Razões para usar um proxy web

  • Monitore e espione o tráfego de rede HTTP gravando e exibindo todo o tráfego entre seu cliente e servidor
  • Oculte seu endereço IP público ao navegar em sites e acessar conteúdo bloqueado
  • Filtre ou redirecione requisições para limitar o acesso ao conteúdo ou otimizar o desempenho dos sistemas

Ferramentas gratuitas de proxy web

  • Postman é uma ferramenta gratuita com vários proxies diferentes, incluindo um proxy integrado para capturar requisições HTTP para Mac, Windows ou Linux
  • Mitmproxy é um proxy de código aberto com uma interface de linha de comando, interface web e API Python
  • Fiddler é um proxy de depuração web gratuito com suporte para uma ampla variedade de navegadores, sistemas e plataformas
  • Burp tem uma edição gratuita da comunidade de um servidor proxy web que permite visualizar e modificar requisições e respostas

No restante deste artigo, demonstrarei um dos métodos que podem ser usados para fazer engenharia reserva de APIs. Usaremos o Mitmproxy para coletar requisições de API e criar automaticamente uma Collection.

Engenharia reversa de API com Mitmproxy

Primeiro, começaremos fazendo proxy de todo o tráfego de aplicações da web usando Mitmproxy.

Isso criará um listener de proxy usando a porta 8080. Você pode então abrir um navegador e usar FoxyProxy para fazer proxy de seu navegador para a porta 8080 usando Burp Suite.

Depois que o proxy estiver configurado, você poderá usar novamente a aplicação web de destino como pretendido.

Cada requisição criada a partir de suas ações será capturada pelo proxy mitmweb. Você pode ver o tráfego capturado usando um navegador para visitar o servidor web mitmweb localizado em http://127.0.0.1:8081.

Continue a explorar a aplicação web de destino até que não haja mais nada a fazer. Depois de esgotar o que pode ser feito com sua aplicação web de destino, retorne ao servidor web mitmweb e clique em File > Save para salvar as requisições capturadas.

Selecionar Save criará um arquivo chamado flows. Podemos usar o arquivo “flows” para criar nossa própria documentação de API. Usando uma ferramenta chamada mitmproxy2swagger, poderemos transformar nosso tráfego capturado em um arquivo Open API 3.0 YAML que pode ser visualizado em um navegador e importado como uma collection para o Postman.

$ sudo mitmproxy2swagger -i /home/kali/Downloads/flows -o spec.yml -p http://crapi.apisec.ai -f flow

Depois de executar, você precisará editar o arquivo spec.yml para ver se mitmproxy2swagger ignorou muitos endpoints. Verificar spec.yml revela que existem vários endpoints que foram ignorados e o título do arquivo pode ser atualizado.

Atualize o arquivo YAML para que “ignore:” seja removido dos endpoints que você deseja incluir. Depois de editar o arquivo, ele deve ficar parecido com a imagem abaixo. Observe que o “título” foi atualizado para “crAPI Swagger” e que os endpoints não contêm mais “ignore:”.

Salve o arquivo spec.yml atualizado e execute o mitmproxy2swagger novamente. Desta vez, adicione o sinalizador “ — examples” para aprimorar a documentação da API.

$ sudo mitmproxy2swagger -i /home/kali/Downloads/flows -o spec.yml -p http://crapi.apisec.ai -f flow --examples

Depois de executar o mitmproxy2swagger com sucesso pela segunda vez, sua documentação de engenharia reversa deve estar pronta. Você pode validar a documentação visitando https://editor.swagger.io/ e importando seu arquivo de especificações para o Swagger Editor. Use File>Import file e selecione seu arquivo spec.yml. Se tudo ocorreu conforme o planejado, você deverá ver algo como a imagem abaixo. Esta é uma boa indicação de sucesso, mas para ter certeza, também podemos importar este arquivo como uma Collection Postman para que possamos nos preparar para atacar a API de destino.

Para importar este arquivo como uma coleção, precisaremos abrir o Postman. No canto superior esquerdo do seu Postman Workspace, você pode clicar no botão “Import”. Em seguida, selecione o arquivo spec.yml e importe a coleção.

Depois de importar o arquivo, você verá uma coleção de API relativamente simples que pode ser usada para analisar a API de destino e explorar com ataques futuros.

Com uma collection preparada, você deve estar pronto para usar a API de destino como ela foi projetada. Isso permitirá que você veja os vários endpoints e entenda o que é necessário para fazer requisições bem sucedidas.

Uma observação final sobre engenharia reversa de APIs

Este passo-a-passo é apenas a ponta do iceberg de como você pode capturar e inspecionar o tráfego HTTP para começar a entender o que está acontecendo nos bastidores.

Embora essas ferramentas e métodos sejam poderosos e possam ser usados por motivos egoístas, eles podem e devem ser usados para o bem.

Ferramentas como o Mitmproxy podem melhorar a visibilidade das requisições do cliente, tornando-as mais fáceis de replicar e ajustar, para que você possa diagnosticar e resolver problemas mais rapidamente. Em última análise, isso ajudará você a obter uma compreensão mais profunda de uma API pública ou privada, especialmente para APIs que não estão bem documentadas.

Referências:

BALL, C. Hacking APIs : breaking web application programming interfaces. San Francisco: No Starch Press, 2022.

--

--

Fernando Silva

Application Security Engineer | OWASP Chapter Leader | AppSec | MSc CyberSecurity | Systems Development Analyst