
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.