Comment renifler le trafic HTTPS d'un appareil iOS



Bonjour, je m'appelle Andrey Batutin, je suis développeur iOS senior dans DataArt, et aujourd'hui nous allons flairer le trafic HTTPS de votre iPhone.

FoodSniffer et avec quoi il est mangé


Prenez, par exemple, la très simple application iOS FoodSniffer . En fonction de l'heure de la journée, il indique à l'utilisateur ce qu'il doit manger.



L'application reçoit du serveur JSON du formulaire:

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

Dans ce cas, le serveur est Dropbox et JSON peut être consulté ici .

Problème numéro 1


Un bug est venu qu'au lieu de deux éléments dans la liste des aliments autorisés le matin, l'application n'en affiche qu'un seul.

Une façon de vérifier ce qui n'a pas fonctionné est de voir le JSON que le serveur vous renvoie.

Comment flairer le trafic?


Supposons que votre ordinateur MacOS et votre appareil iOS soient sur le même réseau local, qui ressemble à ceci:



Le trafic passe d'un appareil iOS via un routeur à un serveur, quel que soit le trafic informatique.

Pour lire le trafic d'un appareil iOS, nous devons le faire passer par notre Mac. Quelque chose comme ça:



De plus, nous aurons besoin d'un serveur proxy HTTP / S, avec lequel nous surveillerions / modifierions le trafic passant de l'appareil iOS.

Une autre tâche très importante est de pouvoir renifler le trafic HTTPS . Le hic est que le protocole HTTPS a été créé de sorte que, à l'exception du client et du serveur, personne ne puisse lire ce qui est transmis dans les requêtes HTTPS. Par conséquent, le proxy HTTPS doit également fournir avec lui un certificat SSL , qui est nécessaire pour travailler avec le trafic HTTPS.

En d'autres termes, nous devons mettre en œuvre l'attaque M an-in-the-Middle sur notre propre réseau.



Application proxy de débogage Web Charles


Comme vous pouvez le voir, renifler du trafic HTTPS est une tâche en plusieurs étapes.Par conséquent, pour simplifier au maximum ma vie, j'utilise Charles Proxy .

Commençons par les inconvénients:

  • Il est payé, mais la seule limitation qui se trouve dans la version d'essai est que Charles ne fonctionne pas plus de 30 minutes, puis il doit être redémarré. Il y a encore cinq secondes de retard au démarrage. C'est ennuyeux, mais vous pouvez vivre.
  • Si vous avez besoin d'un véritable outil de piratage pour travailler sur un serveur distant 24/7, et même avec une CLI normale, Charles n'est pas pour vous.
  • Si vous travaillez sur Windows, vous feriez mieux de prendre Fiddler , qui est également gratuit.
  • Si vous avez besoin d'un serveur proxy pour un grand nombre d'appareils (plus de deux ou trois), Charles n'est pas pour vous.
  • Si vous devez travailler avec des paquets TCP / IP sous forme pure, prenez Wireshark .

Maintenant les pros:

  • Interface utilisateur conviviale. Charles n'a pas besoin de connaissances particulières pour installer, configurer ou utiliser. Application de fenêtre MacOs normale.
  • HTTPS pour iOS - Charles possède un ensemble d'outils qui rendent le HTTPS reniflant à partir de votre appareil iOS aussi simple que possible.
  • Fonctionnalité - Charles peut flairer, modifier le trafic qui le traverse, simuler un Internet lent, collecter des statistiques, importer / exporter du trafic dans différents formats.
  • Disponible pour Windows et Linux.

Pour moi, c'est la meilleure solution pour le ratio de fonctionnalités et la facilité d'utilisation lorsque vous travaillez avec des appareils iOS.

Configuration des appareils Charles et iOS


Ce qui suit décrira la procédure de configuration initiale pour qu'un appareil iOS fonctionne avec Charles Proxy.

1. Lancez Charles sur l'ordinateur:



2. Installez Charles Root Certificate sur votre appareil iOS:

Dans le menu, sélectionnez Aide -> Proxation SSL -> Installer le certificat racine Charles sur un appareil mobile ou un navigateur distant.



La fenêtre suivante apparaîtra:



3. Dans les paramètres réseau de l'appareil iOS, spécifiez l'IP et le port de Charles Proxy:



Selon l'architecture de votre réseau, l'adresse IP sur laquelle Charles s'exécute peut varier.

4. Ouvrez le navigateur sur l'appareil iOS et suivez le lien - http://chls.pro/ssl .



5. Installez le certificat SSL Charles sur l'appareil:



6. Nous indiquons dans les paramètres de l'appareil que nous faisons entièrement confiance à ce certificat:



La sixième étape est nécessaire pour les appareils avec iOS 10 et supérieur.

Aux étapes 5 à 6, nous avons installé un certificat SSL sur l'appareil Charles et indiqué que nous lui faisons confiance. En d'autres termes, tout le trafic HTTPS signé avec ce certificat ne sera plus bloqué par ATS .

Comment regarder le trafic des appareils iOS


Ouvrez l'application FoodSniffer . Si la configuration du proxy a été effectuée correctement, vous devriez voir un écran comme celui-ci:



Dans Charles Proxy, accédez à Tools -> No Caching.

Et désactivez complètement la mise en cache sur le serveur proxy.



L'application implémente Pull-to-refresh, après avoir mis à jour la liste des produits, vous devriez voir https://www.dropbox.com dans la liste sur le côté gauche de Charles. Faites un clic droit dessus et sélectionnez Activer le proxy SSL .



Ensuite, mettez à jour la liste des produits dans l'application. Maintenant, vous devriez voir quelque chose comme ça:



Nous pouvons maintenant lire librement le trafic HTTPS qui provient de l'application sur Dropbox pour notre JSON.

Mais ce n’est pas tout!

Dropbox ne donne pas directement JSON de l'hôte dropbox.com. Au lieu de cela, il renvoie 302 réponses et redirige vers un autre hôte à partir duquel les données sont téléchargées.

Vous pouvez le trouver en consultant la réponse brute de la requête suivante:



Dans ce cas, c'est -
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com .

Vous aurez très probablement un hôte légèrement différent.

Activez ensuite SSL Proxing: activé pour cela.

Nous mettons à jour FoodSniffer à nouveau.

Et maintenant, nous pouvons enfin voir le vrai JSON, que l'application montre!



Nous voyons que nous n'avons qu'un seul type de nourriture le soir - du whisky, écrivez-en à notre chef d'équipe et allez boire un café, le problème n'est pas de notre côté.

* Le projet utilise du JSON déjà corrigé, avec deux types d'aliments pour la soirée: la bière et le whisky.
* Si vous ne voyez pas l'hôte http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com ou similaire dans la liste sur le côté gauche de la fenêtre, essayez de mettre à jour la liste des produits dans l'application plusieurs fois.

Problème n ° 2, ou comment modifier le trafic HTTPS d'un appareil iOS


L'équipe backend a fixé le menu de la soirée, et maintenant le JSON est correctement formé. Mais que se passe-t-il si c'est le matin et que je n'ai pas envie d'attendre le soir pour vérifier le correctif?

Une option consiste à utiliser Charles pour modifier le JSON qui vous vient de Dropbox.

Dans ce cas, nous devons changer consumePeriod du soir au matin .

Pour ce faire, sélectionnez Outils -> Réécrire dans le menu.

Dans la fenêtre Paramètres de réécriture qui apparaît, ajoutez une nouvelle catégorie pour le remplacement - dropbox .



Ajoutez l'hôte en spécifiant le port https dans le menu Modifier l'emplacement :



Après cela, nous ajoutons les règles de réécriture dans le menu Règle de réécriture comme suit:



Autrement dit, maintenant dans chaque corps de la réponse de notre serveur, le mot soir sera remplacé par le mot matin .

Si nécessaire, nous pouvons modifier n'importe quelle partie de la demande / réponse HTTP, plus utiliser une expression régulière pour remplacer le texte.

Maintenant, après avoir mis à jour la liste, nous devrions voir quatre types de produits:



Conclusion


Charles est assez simple, shareware, a une riche fonctionnalité de proxy HTTPS. De mon point de vue, cela fonctionne mieux lorsque vous travaillez avec des appareils MacOS et iOS.

C'est loin d'être le seul moyen de renifler le trafic. Pour le trafic HTTP / S, Fiddler est également largement utilisé. Si vous devez approfondir la pile TCP / IP, il y a Wireshark .

De plus, il existe un problème d' épinglage de certificat . S'il est implémenté dans votre application, vous devez soit ajouter le certificat SSL Charles à la liste des certificats autorisés, soit utiliser des outils tels que Frida pour désactiver l'épinglage de certificat déjà au niveau de l'application. J'espère en parler davantage dans le prochain article.

Je serais heureux si vous partagez votre expérience dans la surveillance du trafic, y compris HTTP / S, des conseils et des lifehacks.

Remarque Utilisez cette technique uniquement pour vos applications, s'il vous plaît. Soyez des pirates de lapin blanc!

Note 2. Récemment, l'histoire à ce sujet a été publiée en ukrainien , mais en russe, je la publie pour la première fois.

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


All Articles