mitmproxy é uma ferramenta de console interativa, interface web e biblioteca Python gratuita e de código aberto, criada para interceptar, inspecionar, modificar e reproduzir tráfego HTTP/S. Ele funciona como um poderoso proxy man-in-the-middle para desenvolvedores, pesquisadores de segurança e engenheiros de QA que trabalham com aplicações web, APIs e tráfego móvel.
Visão geral do mitmproxy
O mitmproxy opera como um proxy, posicionado entre o cliente e o servidor de destino. Todo o tráfego HTTP e HTTPS que passa pelo proxy pode ser visualizado, filtrado e manipulado em tempo real. Sua funcionalidade central permite a inspeção profunda de cabeçalhos, corpos e outros atributos de requisições e respostas. O conjunto de ferramentas inclui:
- mitmproxy: uma interface de terminal interativa para análise de tráfego em tempo real.
- mitmweb: uma interface gráfica baseada em navegador que oferece funcionalidade semelhante ao
mitmproxy, mas acessível pelo navegador web. - mitmdump: uma ferramenta de linha de comando para modificação programática e registro de tráfego, adequada para scripts e automação.
Principais recursos
Interceptação SSL/TLS
O mitmproxy gera seus próprios certificados SSL/TLS em tempo real, o que permite descriptografar e inspecionar tráfego HTTPS criptografado. Para isso, o cliente precisa confiar no certificado CA do mitmproxy.
Interface interativa
Tanto o mitmproxy quanto o mitmweb oferecem ambientes interativos para visualizar e gerenciar os fluxos de tráfego. Você pode filtrar fluxos, pesquisar conteúdo, editar requisições/respostas e marcar fluxos específicos para análise posterior.
Modificação de tráfego
Requisições e respostas podem ser modificadas em tempo real pela interface interativa ou por scripts Python. Isso permite testar casos extremos, injetar cabeçalhos, alterar dados ou simular respostas diferentes do servidor.
Funcionalidade de replay
O mitmproxy permite reproduzir requisições de cliente gravadas para um servidor ou reproduzir respostas de servidor para um cliente. Isso é útil para testar cenários específicos sem repetir as ações do cliente ou para simular o comportamento do servidor.
Scripts e automação
O mitmdump fornece uma API Python para desenvolver scripts personalizados. Esses scripts podem inspecionar, modificar, redirecionar ou descartar tráfego de forma programática, com base em uma lógica definida, facilitando testes automatizados e manipulações complexas de tráfego.
Modo de proxy transparente
O mitmproxy pode operar em modo de proxy transparente, no qual os clientes não precisam de configuração explícita de proxy. O tráfego de rede é redirecionado para o mitmproxy na camada de rede, geralmente por regras de roteador ou configurações de firewall.
Instalação
O mitmproxy pode ser instalado com o pip:
pip install mitmproxy
Para sistemas operacionais específicos, há binários pré-compilados disponíveis no site oficial do mitmproxy, ou é possível instalá-lo por gerenciadores de pacotes como o Homebrew no macOS.
Uso básico
Iniciando o mitmproxy
Para iniciar a interface de console interativa:
mitmproxy
Para iniciar a interface web:
mitmweb
Por padrão, o mitmproxy escuta em localhost:8080.
Configuração do cliente
Os clientes precisam ser configurados para usar o mitmproxy como proxy HTTP/S.
Exemplo no navegador (Firefox):
1. Abra as configurações do Firefox.
2. Vá até Configurações de Rede ou Configurações de Proxy.
3. Selecione "Configuração manual de proxy".
4. Defina o Proxy HTTP como 127.0.0.1 e a Porta como 8080.
5. Defina o Proxy SSL como 127.0.0.1 e a Porta como 8080.
6. Confirme que a opção "Usar este proxy para todos os protocolos" está marcada ou configure os demais protocolos da mesma forma.
Sistema operacional (macOS):
1. Acesse Ajustes do Sistema > Rede > Wi-Fi > Detalhes.
2. Selecione "Proxies".
3. Ative "Proxy da Web (HTTP)" e "Proxy da Web Seguro (HTTPS)".
4. Defina o Servidor como 127.0.0.1 e a Porta como 8080 em ambos.
Instalação do certificado SSL/TLS
Para descriptografar o tráfego HTTPS, os clientes precisam confiar no certificado CA do mitmproxy.
1. Com o mitmproxy em execução, acesse http://mitm.it no navegador de um cliente já configurado.
2. Baixe e instale o certificado CA adequado ao sistema operacional ou navegador do cliente.
3. Em sistemas como Android ou iOS, são necessárias etapas específicas de instalação, geralmente envolvendo o download do certificado e a marcação manual como confiável nas configurações de segurança.
Uso avançado
Modificando requisições e respostas
Pela interface do mitmproxy ou do mitmweb:
1. Selecione um fluxo.
2. Pressione e (edit) para modificar a requisição ou a resposta.
3. Escolha o componente a editar (por exemplo, cabeçalhos, corpo, URL).
4. Faça as alterações e pressione q para salvar e continuar o fluxo.
Scripts com mitmdump
Scripts Python podem ser passados ao mitmdump para automatizar a manipulação de tráfego.
Exemplo: modificando um cabeçalho de requisição
modify_header.py:
from mitmproxy import http
def request(flow: http.HTTPFlow):
if "example.com" in flow.request.pretty_host:
flow.request.headers["X-Modified-By"] = "mitmproxy-script"
print(f"Modified header for {flow.request.url}")
Execute com o mitmdump:
mitmdump -s modify_header.py
Esse script adiciona um cabeçalho personalizado X-Modified-By às requisições destinadas a example.com.
Exemplo: modificando o corpo de uma resposta
modify_response.py:
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "api.example.com/data" in flow.request.url and flow.response.content:
# Assumindo que a resposta é JSON
data = flow.response.json()
data["status"] = "modified_by_mitmproxy"
flow.response.set_json(data)
print(f"Modified response body for {flow.request.url}")
Execute com o mitmdump:
mitmdump -s modify_response.py
Esse script intercepta as respostas de api.example.com/data, faz o parse delas como JSON, modifica um campo e envia o JSON alterado de volta ao cliente.
Reproduzindo fluxos
O mitmproxy permite reproduzir fluxos HTTP capturados.
Reproduzir a requisição do cliente:
1. No mitmproxy ou no mitmweb, selecione um fluxo.
2. Pressione r para reproduzir a requisição do cliente para o servidor. Isso reenvia exatamente a mesma requisição, sem interação do cliente.
Reproduzir a resposta do servidor:
1. Selecione um fluxo.
2. Pressione R (shift+r) para reproduzir a resposta do servidor para o cliente. Isso envia a resposta gravada de volta ao cliente, ignorando a interação real com o servidor. Útil para testar o comportamento do lado do cliente com respostas específicas do servidor.
Casos de uso
- Desenvolvimento e depuração de APIs: inspecionar requisições e respostas para entender o comportamento da API, validar formatos de dados e depurar problemas de integração.
- Testes de segurança: identificar vulnerabilidades manipulando requisições (por exemplo, injetando SQL, payloads de XSS), testar mecanismos de autenticação e analisar tráfego criptografado.
- Análise de aplicativos móveis: interceptar e analisar o tráfego de aplicativos móveis para entender a comunicação com o backend, o tratamento de dados e possíveis falhas de segurança.
- Engenharia reversa: desmontar protocolos proprietários ou entender como aplicações interagem com servidores remotos observando suas comunicações de rede.
- Testes automatizados: usar scripts do
mitmdumppara simular condições de rede específicas, criar mocks de respostas de API ou executar verificações automatizadas do comportamento da aplicação.
mitmproxy vs. outras ferramentas de proxy
Embora várias ferramentas ofereçam interceptação HTTP/S, o mitmproxy se diferencia pelo código aberto, pela poderosa capacidade de scripting e pelas interfaces flexíveis.
| Recurso | mitmproxy | Burp Suite Community Edition | Fiddler (Windows) |
|---|---|---|---|
| Licença | Código aberto (MIT) | Proprietária (níveis grátis/pagos) | Proprietária (níveis grátis/pagos) |
| Scriptabilidade | API Python (mitmdump) |
Limitada (extensões via Java/Python/Ruby) | FiddlerScript (JScript.NET), extensões .NET |
| Interface | Console (mitmproxy), Web UI (mitmweb) |
GUI desktop | GUI desktop |
| SSL/TLS | Interceptação completa | Interceptação completa | Interceptação completa |
| Mod. de tráfego | Sim | Sim | Sim |
| Replay | Sim (cliente/servidor) | Sim (Repeater) | Sim (Composer) |
| Proxy transp. | Sim | Sim | Sim |
| Público-alvo | Desenvolvedores, pesquisadores de segurança, automação | Pentesters, segurança de aplicações web | Desenvolvedores, testadores, segurança de apps web |
| Plataforma | Multiplataforma (Linux, macOS, Windows) | Multiplataforma (baseada em Java) | Windows, macOS (via Fiddler Everywhere) |
Essa comparação evidencia os pontos fortes do mitmproxy em automação e flexibilidade de código aberto, o que o torna uma escolha robusta para usuários técnicos que precisam de controle profundo sobre seus fluxos de análise de tráfego.
