
Há situações em que, ao desenvolver ou testar um aplicativo móvel, torna-se necessário visualizar o tráfego de rede do aplicativo. Ainda está visualizando o tráfego de aplicativos para dispositivos móveis, exibindo-o no console do seu IDE? Existem ferramentas mais eficazes para esta tarefa, por exemplo, proxies. Neste artigo, analisaremos os proxies HTTP (S) mais populares, aprenderemos como usá-los no desenvolvimento do iOS e os compararemos de acordo com vários critérios.
Além disso, falaremos sobre o uso de proxies no desenvolvimento do iOS, mas muitas coisas também são aplicáveis no desenvolvimento do Android.
Cuidado, sob o corte muitas fotos.
As ferramentas para analisar o tráfego de rede de um aplicativo móvel podem ser divididas em:
- Não requer integração no código-fonte do aplicativo em teste - proxy:
- Exigindo integração ao código-fonte do aplicativo em teste. Isso inclui principalmente estruturas de depuração:
Esta é a primeira parte do artigo em que consideraremos o uso de proxies e os compararemos de acordo com vários critérios. Na segunda parte do artigo, examinaremos minuciosamente as estruturas para depuração.
Mitmproxy

O Mitmproxy é um proxy HTTP (S) gratuito e de código aberto (~ 12.000 estrelas no github), que consiste no próprio Mitmproxy, um utilitário de console para proxy de tráfego, mitmdump, um utilitário de console adicional que apresenta funcionalidade semelhante ao tcpdump, mas para HTTP (S) tráfego, bem como mitmweb, a interface da web para o Mitmproxy.
Você pode instalar o Mitmproxy usando o Homebrew:
brew install mitmproxy
Ou faça o download da versão desejada na página de lançamento do site oficial.
Após a instalação bem-sucedida, para analisar o tráfego HTTP de um simulador ou dispositivo, você precisa especificar um proxy nas configurações de rede.
Para o simulador, você precisa ativar os proxies HTTP e HTTPS nas configurações de rede do Mac OS (Preferências do sistema -> Rede -> Avançado -> Proxies):

Um pequeno script bash para ativação / desativação rápida de um proxy nas configurações de rede do Wi-Fi em um Mac. (Depois que registramos a porta IP e proxy nas configurações e usamos o comando proxy on
ou proxy off
no console).
Para interceptar o tráfego de um dispositivo real, é necessário especificar o proxy nas configurações da rede iOS, enquanto o endereço IP do computador executando o Mitmproxy é definido como o endereço IP do proxy e a porta 8080. (O endereço IP do computador pode ser visualizado em Configurações> Rede)

Nesse estágio, já podemos interceptar o tráfego HTTP, mas para interceptar o tráfego HTTPS, é necessário instalar os certificados Mitmproxy no simulador / dispositivo.
Para fazer isso, no simulador, faça o seguinte (para um dispositivo real, as etapas são semelhantes):
- Verifique se o Mitmproxy está em execução e se o proxy está ativado e registrado nas configurações de rede (para o simulador - configurações do macOS, para o dispositivo - configurações do iOS), conforme descrito acima. Agora vá para o navegador em mitm.it e clique no ícone Apple para baixar o certificado Mitmproxy. Um alerta será exibido com a mensagem de que este site está tentando abrir as configurações do iOS: clique em Permitir.

- Em seguida, instale o certificado Mitmproxy.

- E o último toque - para iOS versão 10.3 e superior, você deve habilitar o acesso total ao certificado raiz do Mitmproxy. Para fazer isso, vá para Configurações> Geral> Sobre> Configurações de confiança do certificado e ative o acesso total ao certificado Mitmproxy.

Agora podemos analisar o tráfego HTTPS no simulador. Resta acrescentar um pequeno esclarecimento: o certificado é instalado para um simulador específico, ou seja, se o fizéssemos apenas no simulador do iPhone X, no simulador do iPhone 8, precisamos fazer o mesmo para que o proxy intercepte o tráfego HTTPS. Para interceptar o tráfego HTTPS de um dispositivo real, todas as etapas são semelhantes, o principal é que ele esteja conectado à mesma rede local que um computador com Mitmproxy.
Depois disso, você pode executar mitmproxy no console e me sinto como um hacker ou cliente da web mitmweb.
O cliente do console nos encontra com uma interface de tubo (para os amantes da GUI, existe até suporte para mouse), onde todas as solicitações interceptadas são exibidas.

Você pode visualizar informações detalhadas para cada solicitação (parâmetros, cabeçalhos, resposta, etc.)

O Mitmproxy possui um poderoso sistema de filtragem de consultas com suporte para expressões regulares. Você pode filtrar solicitações por código, corpo de solicitação / resposta, cabeçalhos, domínio etc. Ligue para a ajuda sobre os atalhos disponíveis e expressões de filtro clicando em ?
. Por exemplo, para limpar a lista de consultas da sessão atual, basta pressionar z
, para filtrar a lista de consultas por URL, na qual existe a palavra "maçã", é necessário pressionar f
e escrever uma expressão de filtro por URL ~u apple
, o que exige uma expressão regular.

Os fãs do Vim também ficarão satisfeitos com o suporte ao hjkl. Quase nos esquecemos de um atalho muito importante q
- ele funciona como um botão de retorno ao se mover entre telas, e na tela principal com uma lista de consultas quando você clica nesse atalho, o Mitmproxy se oferece para sair do programa.
Apesar da interface do console, o uso do Mitmproxy é um prazer, graças a atalhos convenientes e controles intuitivos simples. Abaixo está uma pequena tabela com os principais atalhos.
Atalho | Descrição do produto |
---|
? | Ajuda |
z | Limpar lista de sessões atuais |
f | Filtragem de Sessão |
q | Voltar (sair na tela principal) |
d | Remover solicitação da lista de sessões |
r | Repetir solicitação |
e | Salvar solicitação no arquivo |
g | Lista de sessões principais |
G | No final da lista de sessões |
Se você ainda é um oponente ardente do console e reconhece apenas os aplicativos da GUI, então a mitmweb está com pressa para nos ajudar, vamos lançá-lo por enquanto também no console, depois podemos fazer um atalho para a área de trabalho.

O web client ainda está em teste beta e contém apenas a funcionalidade básica de mitmproxy (suficiente para 95% das tarefas), que é gradualmente complementada com novos recursos a cada nova versão, mas, apesar disso, agora pode ser usada e é muito conveniente. Alguns atalhos da versão do console também funcionam aqui, por exemplo, para limpar a lista de solicitações da sessão atual, basta pressionar z
. Você também pode filtrar solicitações interceptadas através do campo "Pesquisar", como fizemos no aplicativo de console quando aplicamos o filtro de ~u apple
.

O Mitmproxy reivindica suporte para o padrão Websocket, mas infelizmente a exibição dos quadros Websocket na interface do usuário ainda não foi implementada e, de acordo com os desenvolvedores, a funcionalidade Websocket está disponível apenas para o utilitário mitmdump.
Charles

Charles é talvez o proxy HTTP (S) mais popular para MacOS, sua única desvantagem é que ele é pago, no momento da redação deste artigo, a licença custa US $ 50. No entanto, existe uma versão de avaliação - ela funciona por 30 minutos, o aplicativo precisa ser reiniciado e todo o histórico de consultas é perdido. Há também atrasos de inicialização de cinco segundos.
Após a instalação e a primeira inicialização, Charles solicitará que você forneça o acesso para configurar automaticamente o proxy do sistema, selecione "Conceder privilégios" ou altere as configurações do proxy do sistema todas as vezes manualmente. Portanto, Charles alterará e ativará as configurações de proxy do sistema quando estiver em execução - isso é conveniente ao depurar no simulador, mas em um dispositivo real, você precisará definir manualmente as configurações do servidor proxy para a rede, pois o servidor proxy especifica o endereço IP do computador executando Charles, como porto - 8888.
Nesta fase, podemos apenas visualizar o tráfego HTTP, para analisar o tráfego HTTPS de um simulador ou de um dispositivo real, precisamos instalar um certificado Charles nele, o procedimento é semelhante à instalação de um certificado Mitmproxy. Verifique se o proxy está sendo executado e ativado nas configurações de rede do iOS (para um dispositivo real) ou nas configurações de rede do macOS (para um simulador). Em seguida, iremos ao simulador / dispositivo no navegador em chls.pro/ssl . Um alerta será exibido com a mensagem de que este site está tentando abrir as configurações do iOS: selecione Permitir. Em seguida, selecione Instalar para instalar o certificado. Após instalar o certificado para iOS versão 10.3 e superior, você deve ativar o acesso completo ao certificado raiz Charles. Para fazer isso, vá para Configurações> Geral> Sobre> Configurações de confiança do certificado e ative o acesso total ao certificado Charles.

Por fim, você precisa configurar o proxy SSL no Charles, por padrão, não descriptografa o tráfego HTTPS, mesmo se você instalou todos os certificados necessários. Para ativar o proxy SSL, vá para Proxy> SSL Proxying Settings e ative Proxy SSL, se estiver desativado, temos duas opções - ativar o proxy SSL para todos os domínios ou apenas para domínios específicos. Para habilitar o proxy SSL para todos os domínios, você precisa adicionar um local curinga: clique no botão Adicionar e especifique *
em todos os campos, para que as configurações de SSL sejam assim.

Para habilitar o proxy SSl apenas para domínios específicos, você deve adicioná-los à lista e verificar se o local do curinga está desabilitado. Nesse caso, Charles ainda interceptará todo o tráfego, mas as solicitações HTTPS para domínios que não estão na lista não serão descriptografadas.
Ao usar Charles, é conveniente usar filtros de interceptação de tráfego, que podem ser configurados no menu Proxy> Configurações de gravação: você pode especificar o protocolo, URL, porta.

Agora temos a capacidade de visualizar o tráfego HTTPS.

Charles também suporta o protocolo Websocket e exibe mensagens no estilo do iMessage, parece conveniente.

O primeiro proxy desse tipo, Charles para iOS, merece menção especial - a versão móvel de Charles, o preço na App Store no momento em que este artigo foi escrito é de US $ 9. O aplicativo contém a funcionalidade básica da versão da área de trabalho: proxy do tráfego HTTP (S), exibição do conteúdo de solicitações / respostas e configuração automática conveniente das configurações de proxy para uma rede Wi-Fi.


O Burp Suite é uma faca suíça de criminosos e hackers, contendo uma quantidade indecente de ferramentas e funcionalidades. Um dos módulos do Burp Suite é um proxy, que usaremos para analisar o tráfego HTTP (S). Existem duas versões do aplicativo: Professional e Community Edition. A versão da comunidade é gratuita, não possui um scanner de vulnerabilidades e existe um limite no número de solicitações por unidade de tempo, mas, apesar disso, a versão gratuita do aplicativo é uma ferramenta de teste completa.
Após iniciar o aplicativo, você precisa adicionar e ativar o proxy acessando Proxy> Opções.

Em seguida, você precisa garantir que o interceptador de solicitação de interceptação esteja desativado; caso contrário, ele interceptará as solicitações e as manterá até você dizer o que fazer com essa solicitação - cancele ou encaminhe-o ao servidor. Portanto, desligue-o, agora não precisamos dele.

Em seguida, você precisa instalar o certificado Burp Suite no simulador / dispositivo; esse procedimento já deve ser familiar para nós após a instalação dos certificados Mitmproxy e Charles. Iniciamos o Burp Suite e não esquecemos de ativar o proxy nas configurações de rede do MacOS para o simulador ou no iOS para o dispositivo real (consulte a seção Mitmproxy para saber como fazer isso), especifique o endereço IP do computador que está executando o Burp Suite como servidor proxy, como a porta - 8080. Então vamos ao navegador no simulador e digite o endereço http: // burp . Em seguida, clique no botão no site "Certificado CA" e faça o download do certificado.

Em seguida, instale o certificado. Depois de instalar o certificado para iOS versão 10.3 e superior, você deve habilitar o acesso total ao certificado raiz do Burp Suite. Para fazer isso, vá para Configurações> Geral> Sobre> Configurações de confiança do certificado e ative o acesso total ao certificado Burp Suite.

Acessando a guia Proxy -> Histórico HTTP, é possível visualizar o tráfego HTTP (S) de um aplicativo móvel. Vale ressaltar que a desvantagem aqui é a falta de formatação JSON no corpo da solicitação / resposta.

O problema com a formatação JSON pode ser resolvido instalando o plug-in JSON Beautifier . Para instalar, vá para a guia Extender> BApp Store, localize o JSON Beautifier na lista de plug-ins e clique em instalar.

Agora há uma guia JSON Beautifier adicional com o lindo JSON.

O Burp Suite suporta o protocolo Websocket. As mensagens do Websocket podem ser encontradas na guia especial Proxy> Histórico do WebSockets.

OWASP ZAP

Owasp ZAP é uma criação da comunidade mundialmente famosa de segurança cibernética Owasp, além disso, o proxy é de código aberto. O Owasp ZAP é frequentemente comparado ao Burp Suite, mas o último é de popularidade inferior. O Owasp ZAP é totalmente gratuito, não há versões PRO em comparação com o Burp Suite.
Depois de iniciar o aplicativo, você precisa verificar as configurações de proxy Preferências> Proxies Locais, as configurações padrão devem ter esta aparência.

Em seguida, vá para Preferências> Certificados SSL dinâmicos para exportar o certificado SSL. Clique no botão Salvar e salve o certificado, por exemplo, na área de trabalho.

Em seguida, basta arrastar o arquivo de certificado para o simulador e uma janela é aberta, oferecendo a instalação do certificado, nós concordamos e instalamos. Depois de instalar o certificado para iOS versão 10.3 e superior, você deve habilitar o acesso total ao certificado raiz OWASP ZAP. Para fazer isso, vá para Configurações> Geral> Sobre> Configurações de confiança do certificado e ative o acesso total ao certificado ZAP OWASP.

Agora temos a capacidade de visualizar o tráfego HTTPS. O JSON, infelizmente, não possui uma formatação bonita aqui e, até o momento, não conseguimos corrigir essa situação; em casos extremos, você pode usar um formatador JSON de terceiros, por exemplo, este .

OWASP ZAP suporta o protocolo Websocket. As mensagens do Websocket podem ser encontradas em uma guia especial WebSockets, também é conveniente selecionar o "canal" para filtrar por domínio.

Fixação SSL
Se a pinagem de SSL estiver implementada em seu aplicativo, você não verá o tráfego de aplicativos em proxy, pois o proxy usa seu próprio certificado para SSL; nesse caso, existem 4 opções:
- Desative temporariamente a Fixação SSL ao depurar solicitações de rede usando um proxy.
- Adicione um certificado / chave pública de proxy aos certificados / chaves depurados para compilações de depuração.
- Use o certificado do servidor para o proxy em vez de seu próprio certificado gerado por ele.
- Em vez de usar um proxy externo, use uma estrutura de depuração (a lista de estruturas é indicada no início do artigo), que interceptará e mostrará solicitações e respostas diretamente no próprio aplicativo, mas isso requer integração no código-fonte do aplicativo existente, mais sobre essas ferramentas no próximo artigo.
Sumário
Vamos começar com Charles. Talvez o melhor proxy para quem deseja que tudo funcione imediatamente e seja o mais amigável possível, embora Charles possa surpreender o usuário em alguns momentos, a funcionalidade do proxy é muito extensa, mas também possui a interface mais bonita e nativa para o macOS descrita no artigo proxy. Se você não se importa em gastar US $ 50,00 por esse instrumento, a escolha é sua.
Vamos para o Burp Suite. A ferramenta mais poderosa, de acordo com uma certa funcionalidade e até com facilidade de uso, em alguns casos dá facilmente chances a Charles, além de haver um sistema para expandir a funcionalidade na forma de plug-ins. O Burp Suite há muito se estabeleceu como uma ferramenta muito confiável e precisa nas mãos certas. Se você não tiver a funcionalidade do seu proxy atual, recomendamos que você preste atenção a esta instância.
Agora é a vez do Mitmproxy - um proxy jovem e promissor, ganhando popularidade ativamente, que está sendo desenvolvido pela comunidade Open Source. O mais controverso dos proxies que vimos, mas ao mesmo tempo não menos interessante. O Mitmproxy se destaca de seus concorrentes por sua interface do usuário insanamente conveniente, simples e funcional. Também é possível usar a interface da web do Mitmweb, mas agora está em teste beta devido ao qual é possível ser raro, mas erros aparecem, não há parte da funcionalidade avançada do Mitmproxy (ela está sendo concluída gradualmente) e também é um pouco inferior em conveniência a concorrentes mais nativos. O suporte ao protocolo Websocket também foi decepcionante, por assim dizer, mas não há exibição na interface do usuário ou simplesmente não aprendemos como prepará-lo, porque não conseguimos que o Mitmproxy exibisse mensagens do Websocket, embora não tenhamos problemas com outros proxies.
E o último da lista, mas não menos interessante foi o Owasp ZAP. Das vantagens, existe um sistema de plug-in expansível (subjetivamente, seu número é menor que o do Burp Suite), mas infelizmente não conseguimos configurar uma bela exibição JSON no corpo da solicitação / resposta, que é um critério bastante crítico na escolha de um proxy para o desenvolvimento móvel. No entanto, o Owasp ZAP possui um sistema avançado para testar o tráfego do Websocket, bem como o grande nome dos desenvolvedores da comunidade Owasp atrás de mim, então eu não o descartaria e tinha em mente casos raros e complexos.
Abaixo está uma tabela de resumo subjetiva dos proxies que analisamos.
critério / proxy | Mitmproxy | Charles | Burpsuite (CE) | Owasp zap |
---|
Formatação JSON | + | + | + | - |
Editando e repetindo consultas | + | + | + | + |
Suporte para Websocket | - | + | + | + |
Software livre | + | - | + | + |
Terminaremos aqui, esperamos que o artigo seja útil, teremos o maior prazer em comentar e se você compartilhar sua experiência no campo de teste e monitoramento do tráfego de aplicativos móveis.