Como detectar o tráfego HTTPS de um dispositivo iOS



Olá, meu nome é Andrey Batutin, sou desenvolvedor sênior de iOS na DataArt e hoje detectamos o tráfego HTTPS do seu iPhone.

Sniffer e com o que é consumido


Veja, por exemplo, o aplicativo iOS simples, FoodSniffer . Dependendo da hora do dia, ele mostra ao usuário o que comer.



O aplicativo recebe do servidor JSON do formulário:

[ { "name" : "soup", "consumePeriod" : "morning" }, … ] 

O servidor nesse caso é o Dropbox, e o JSON pode ser visualizado aqui .

Problema número 1


Ocorreu um erro: em vez de dois itens na lista de alimentos permitidos pela manhã, o aplicativo mostra apenas um.

Uma maneira de verificar o que deu errado é ver o JSON que o servidor retorna para você.

Como cheirar o tráfego?


Suponha que o seu computador MacOS e o dispositivo iOS estejam na mesma rede local, com a seguinte aparência:



O tráfego passa de um dispositivo iOS através de um roteador para um servidor, independentemente do tráfego do computador.

Para ler o tráfego de um dispositivo iOS, precisamos fazê-lo passar pelo nosso Mac. Algo assim:



Além disso, precisaremos de um servidor proxy HTTP / S, com o qual assistiríamos / modificaríamos o tráfego de passagem do dispositivo iOS.

Outra tarefa muito importante é conseguir detectar o tráfego HTTPS . O problema é que o protocolo HTTPS foi criado para que, exceto o cliente e o servidor, ninguém pudesse ler o que é transmitido nas solicitações HTTPS. Portanto, o proxy HTTPS também deve entregar com ele um certificado SSL , necessário para trabalhar com o tráfego HTTPS.

Em outras palavras, precisamos implementar o ataque de M an-in-the-Middle em nossa própria rede.



Aplicativo de proxy de depuração da Web Charles


Como você pode ver, capturar o tráfego HTTPS é uma tarefa de vários estágios; portanto, para simplificar minha vida o máximo possível, eu uso o Charles Proxy .

Vamos começar com os contras:

  • É pago, mas a única limitação que existe na versão de teste é que Charles trabalha por mais de 30 minutos e deve ser reiniciado. Ainda existem atrasos de cinco segundos na inicialização. É chato, mas você pode viver.
  • Se você precisa de uma ferramenta hacker genuína para trabalhar em um servidor remoto 24/7, e mesmo com uma CLI normal, Charles não é para você.
  • Se você estiver trabalhando no Windows, é melhor tomar o Fiddler , que também é gratuito.
  • Se você precisar de um servidor proxy para um grande número de dispositivos (mais de dois ou três), Charles não é para você.
  • Se você precisar trabalhar com pacotes TCP / IP em forma pura, use o Wireshark .

Agora os profissionais:

  • Interface de usuário amigável. Charles não requer nenhum conhecimento especial para instalar, configurar ou usar. Aplicativo de janela MacOs normal.
  • HTTPS para iOS - Charles possui um conjunto de ferramentas que tornam o HTTPS sniffing do seu dispositivo iOS o mais simples possível.
  • Funcionalidade - Charles pode farejar, modificar o tráfego que passa por ele, simular uma Internet lenta, coletar estatísticas, importar / exportar tráfego em vários formatos.
  • Disponível para Windows e Linux.

Para mim, esta é a melhor solução para a proporção de funcionalidade e facilidade de uso ao trabalhar com dispositivos iOS.

Charles e configuração do dispositivo iOS


A seguir, será descrito o procedimento de configuração inicial para um dispositivo iOS funcionar com Charles Proxy.

1. Inicie o Charles no computador:



2. Instale o certificado Charles Root no seu dispositivo iOS:

No menu, selecione Ajuda -> Proxing SSL -> Instalar o certificado raiz Charles no dispositivo móvel ou no Navegador remoto.



A seguinte janela aparecerá:



3. Nas configurações de rede do dispositivo iOS, especifique o IP e a porta do Charles Proxy:



Dependendo da arquitetura da sua rede, o endereço IP em que Charles está executando pode variar.

4. Abra o navegador no dispositivo iOS e siga o link - http://chls.pro/ssl .



5. Instale o certificado SSL Charles no dispositivo:



6. Indicamos nas configurações do dispositivo que confiamos totalmente neste certificado:



O sexto estágio é necessário para dispositivos com iOS 10 e superior.

Nos estágios 5–6, instalamos um certificado SSL no dispositivo Charles e indicamos que confiamos nele. Ou seja, agora todo o tráfego HTTPS assinado com este certificado não será bloqueado pelo ATS .

Como assistir ao tráfego do dispositivo iOS


Abra o aplicativo FoodSniffer . Se a configuração do proxy foi feita corretamente, você deverá ver uma tela como esta:



No Charles Proxy, vá para Ferramentas -> Sem cache.

E desative completamente o cache no servidor proxy.



O aplicativo implementa o Pull-to-refresh, após atualizar a lista de produtos, você deve ver https://www.dropbox.com na lista do lado esquerdo em Charles. Clique com o botão direito do mouse e selecione Ativar proxy SSL .



Depois disso, atualize a lista de produtos no aplicativo novamente. Agora você deve ver algo assim:



Agora podemos ler livremente o tráfego HTTPS que vem do aplicativo no Dropbox para nosso JSON.

Mas isso não é tudo!

O Dropbox não fornece JSON diretamente do host dropbox.com. Em vez disso, ele retorna 302 respostas e redireciona para outro host do qual os dados estão sendo baixados.

Você pode encontrá-lo olhando a resposta bruta da seguinte consulta:



Nesse caso, é -
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com .

Você provavelmente terá um host um pouco diferente.

Em seguida, ative o proxy SSL: ativado para ele.

Estamos atualizando o FoodSniffer novamente.

E agora podemos finalmente ver o JSON real, que o aplicativo mostra!



Vemos que temos apenas um tipo de comida à noite - uísque, escreva sobre isso para o líder da nossa equipe e vá tomar café, o problema não está do nosso lado.

* O projeto usa o JSON já corrigido, com dois tipos de comida para a noite: cerveja e uísque.
* Se você não encontrar o host http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com ou similar na lista no lado esquerdo da janela, tente atualizar a lista de produtos no aplicativo várias vezes.

Problema nº 2 ou Como alterar o tráfego HTTPS de um dispositivo iOS


A equipe de back-end fixou o menu para a noite e agora o JSON é formado corretamente. Mas e se for de manhã e não tiver vontade de esperar até a noite para verificar a correção?

Uma opção é usar Charles para alterar o JSON que vem do Dropbox para você.

Nesse caso, precisamos alterar o consumo de Período de tarde para manhã .

Para fazer isso, selecione Ferramentas -> Reescrever no menu.

Na janela Rewrite Settings que aparece, adicione uma nova categoria para substituição - dropbox .



Adicione o host especificando a porta https no menu Editar local :



Depois disso, adicionamos regras de reescrita no menu Regra de Reescrita da seguinte maneira:



Ou seja, agora em cada Corpo da resposta do nosso servidor, a palavra noite será substituída pela palavra manhã .

Se necessário, podemos alterar qualquer parte da solicitação / resposta HTTP, além de usar uma expressão regex para substituir o texto.

Agora, atualizando a lista, devemos ver quatro tipos de produtos:



Conclusão


Charles é bastante simples, shareware, possui rica funcionalidade de proxy HTTPS. Do meu ponto de vista, funciona melhor ao trabalhar com dispositivos MacOS e iOS.

Esta está longe de ser a única maneira de detectar o tráfego. Para tráfego HTTP / S, o Fiddler também é amplamente utilizado. Se você precisar ir mais fundo na pilha TCP / IP, existe o Wireshark .

Além disso, há um problema de fixação de certificado . Se ele estiver implementado no seu aplicativo, você precisará adicionar o certificado SSL Charles à lista de certificados permitidos ou usar ferramentas como o Frida para desativar a fixação de certificados já no nível do aplicativo. Espero falar mais sobre isso no próximo artigo.

Ficaria feliz se você compartilhar sua experiência no monitoramento de tráfego, incluindo HTTP / S, dicas e lifehacks.

Nota Use esta técnica apenas para suas aplicações, por favor. Seja hackers coelho branco!

Nota 2. Recentemente, a história sobre isso foi publicada em ucraniano , mas em russo eu a publico pela primeira vez.

Source: https://habr.com/ru/post/pt419677/


All Articles