Analyse du trafic réseau d'une application mobile sur iOS. Partie 1 - Procurations


Il existe des situations où, lors du développement ou du test d'une application mobile, il devient nécessaire de visualiser le trafic réseau de l'application. Vous visualisez toujours le trafic des applications mobiles en l'affichant dans la console de votre IDE? Il existe des outils plus efficaces pour cette tâche, par exemple des procurations. Dans cet article, nous analyserons les proxys HTTP (S) les plus populaires, apprendrons à les utiliser dans le développement iOS et les comparerons en fonction de différents critères.


Plus loin, nous parlerons de l'utilisation de procurations dans le développement iOS, mais beaucoup de choses sont également applicables dans le développement Android.


Attention, sous la coupe beaucoup de photos.


Les outils pour analyser le trafic réseau d'une application mobile peuvent être divisés en:


  1. Ne nécessitant pas d'intégration dans le code source de l'application testée - proxy:
  2. Nécessite une intégration dans le code source de l'application testée. Il s'agit principalement de débogage des frameworks:

Il s'agit de la première partie de l'article dans laquelle nous considérerons l'utilisation de procurations et les comparerons selon différents critères. Dans la deuxième partie de l'article, nous allons parcourir en détail les cadres de débogage.


Mitmproxy



Mitmproxy est un proxy HTTP (S) gratuit et open source (~ 12 000 étoiles sur github), qui se compose de Mitmproxy lui-même, un utilitaire de console pour le trafic proxy, mitmdump, un utilitaire de console supplémentaire qui présente des fonctionnalités similaires à tcpdump, mais pour HTTP (S) trafic, ainsi que mitmweb, l'interface Web de Mitmproxy.


Vous pouvez installer Mitmproxy en utilisant Homebrew:


brew install mitmproxy


Ou téléchargez la version souhaitée sur la page de sortie du site officiel .


Après une installation réussie, pour analyser le trafic HTTP à partir d'un simulateur ou d'un appareil, vous devez spécifier un proxy dans les paramètres réseau.


Pour le simulateur, vous devez activer les proxys HTTP et HTTPS dans les paramètres réseau de Mac OS (Préférences système -> Réseau -> Avancé -> Proxys):



Un petit script bash pour une activation / désactivation rapide d'un proxy dans les paramètres réseau du Wi-Fi sur Mac. (Une fois que nous avons enregistré l'IP et le port proxy dans les paramètres, puis utilisez la commande proxy on ou proxy off depuis la console).


Pour intercepter le trafic provenant d'un appareil réel, vous devez spécifier le proxy dans les paramètres du réseau iOS, tandis que l'adresse IP de l'ordinateur exécutant Mitmproxy est définie comme adresse IP proxy et le port 8080. (L'adresse IP de l'ordinateur peut être affichée dans Paramètres> Réseau)



À ce stade, nous pouvons déjà intercepter le trafic HTTP, mais pour intercepter le trafic HTTPS, vous devez installer des certificats Mitmproxy sur le simulateur / périphérique.
Pour ce faire, sur le simulateur, procédez comme suit (pour un appareil réel, les étapes sont similaires):


  • Assurez-vous que Mitmproxy est en cours d'exécution et que le proxy est activé et enregistré dans les paramètres réseau (pour le simulateur - paramètres macOS, pour l'appareil - paramètres iOS), comme décrit ci-dessus. Maintenant, allez dans le navigateur à mitm.it et cliquez sur l'icône Apple pour télécharger le certificat Mitmproxy. Une alerte apparaîtra avec un message indiquant que ce site Web tente d'ouvrir les paramètres iOS: cliquez sur Autoriser.


  • Installez ensuite le certificat Mitmproxy.


  • Et la dernière touche - pour iOS version 10.3 et supérieure, vous devez activer l'accès complet au certificat racine Mitmproxy. Pour ce faire, accédez à Paramètres> Général> À propos> Paramètres d'approbation de certificat et activez l'accès complet pour le certificat Mitmproxy.


Nous pouvons maintenant analyser le trafic HTTPS à partir du simulateur. Il reste à ajouter une petite précision: le certificat est installé pour un simulateur spécifique, c'est-à-dire que si nous ne l'avons fait que pour le simulateur iPhone X, alors sur le simulateur iPhone 8, nous devons faire de même pour que le proxy intercepte le trafic HTTPS. Pour intercepter le trafic HTTPS d'un appareil réel, toutes les étapes sont similaires, l'essentiel est qu'il est connecté au même réseau local qu'un ordinateur avec Mitmproxy.


Après cela, vous pouvez exécuter mitmproxy à partir de la console et se sentir comme un pirate ou client Web mitmweb.


Le client de la console nous rencontre avec une interface de tube (pour les amateurs de GUI il y a même le support de la souris), où toutes les requêtes interceptées sont affichées.



Vous pouvez afficher des informations détaillées pour chaque demande (paramètres de demande, en-têtes, réponse, etc.)



Mitmproxy dispose d'un puissant système de filtrage des requêtes avec prise en charge des expressions régulières. Vous pouvez filtrer les demandes par code, corps de demande / réponse, en-têtes, domaine, etc. Appelez l'aide sur les raccourcis disponibles et les expressions de filtre en cliquant sur ? . Par exemple, pour effacer la liste des requêtes pour la session en cours, vous pouvez simplement appuyer sur z , et pour filtrer la liste des requêtes par URL dans laquelle se trouve le mot "pomme", vous devez appuyer sur f et écrire une expression de filtrage par URL ~u apple , qui prend une expression régulière.



Les fans de Vim seront également ravis du support hjkl. Nous avons presque oublié un raccourci très important q - il fonctionne comme un bouton "retour" lors du déplacement entre les écrans, et sur l'écran principal avec une liste de requêtes lorsque vous cliquez sur ce raccourci, Mitmproxy vous proposera de quitter le programme.
Malgré l'interface de la console, l'utilisation de Mitmproxy est un plaisir grâce à des raccourcis pratiques et à des commandes intuitives simples. Voici un petit tableau avec les raccourcis principaux.


RaccourciLa description
?Aide
zEffacer la liste des sessions en cours
fFiltrage de session
qRetour (quitter sur l'écran principal)
dSupprimer la demande de la liste des sessions
rRépéter la demande
eEnregistrer la demande dans un fichier
gListe des meilleures sessions
GÀ la fin de la liste des sessions

Si vous êtes toujours un ardent adversaire de la console et que vous ne reconnaissez que les applications GUI, alors mitmweb est pressé de nous aider, nous le lancerons pour le moment également à partir de la console, plus tard, nous pourrons créer un raccourci vers le bureau.



Le client Web est toujours en test bêta et il ne contient que la fonctionnalité de base mitmproxy (suffisante pour 95% des tâches), qui est progressivement complétée par de nouvelles fonctionnalités à chaque nouvelle version, mais malgré cela, elle peut maintenant être utilisée et c'est très pratique. Certains raccourcis de la version console fonctionnent également ici, par exemple, pour effacer la liste des demandes pour la session en cours, appuyez simplement sur z . Vous pouvez également filtrer les requêtes interceptées via le champ "Rechercher", comme nous l'avons fait dans l'application console lorsque nous avons appliqué le filtre ~u apple .



Mitmproxy revendique la prise en charge de la norme Websocket, mais malheureusement l'affichage des cadres Websocket dans l'interface utilisateur n'a pas encore été implémenté et, selon les développeurs, la fonctionnalité Websocket n'est disponible que pour l'utilitaire mitmdump.


Charles



Charles est peut-être le proxy HTTP (S) le plus populaire pour MacOS, son seul inconvénient est qu'il est payé, au moment de la rédaction, la licence coûte 50 $. Cependant, il existe une version d'essai - elle fonctionne pendant 30 minutes, puis l'application doit être redémarrée et l'historique complet des requêtes est perdu. Il existe également des retards de démarrage de cinq secondes.


Après l'installation et le premier démarrage, Charles vous demandera d'autoriser la configuration automatique du proxy système, de sélectionner «Accorder des privilèges privés» ou de modifier les paramètres du proxy système à chaque fois manuellement. Ainsi, Charles modifiera et activera lui-même les paramètres de proxy du système lorsqu'il est en cours d'exécution - cela est pratique lors du débogage sur le simulateur, mais sur un appareil réel, vous devrez définir manuellement les paramètres du serveur proxy pour le réseau, car le serveur proxy spécifie l'adresse IP de l'ordinateur exécutant Charles, comme port - 8888.


À ce stade, nous ne pouvons afficher que le trafic HTTP, pour analyser le trafic HTTPS à partir d'un simulateur ou d'un appareil réel, nous devons y installer un certificat Charles, la procédure est similaire à l'installation d'un certificat Mitmproxy. Assurez-vous que le proxy est en cours d'exécution et activé dans les paramètres réseau iOS (pour un appareil réel) ou dans les paramètres réseau macOS (pour un simulateur). Ensuite, nous irons au simulateur / appareil dans le navigateur à chls.pro/ssl , une alerte apparaîtra avec un message indiquant que ce site Web tente d'ouvrir les paramètres iOS: sélectionnez Autoriser. Ensuite, sélectionnez Installer pour installer le certificat. Après avoir installé le certificat pour iOS version 10.3 et supérieure, vous devez activer l'accès complet au certificat racine Charles. Pour ce faire, accédez à Paramètres> Général> À propos> Paramètres d'approbation de certificat et activez l'accès complet pour le certificat Charles.



Enfin, vous devez configurer le proxy SSL dans Charles, par défaut, il ne déchiffre pas le trafic HTTPS, même si vous avez installé tous les certificats nécessaires. Pour activer le proxy SSL, accédez à Proxy> Paramètres de proxy SSL et activez le proxy SSL, s'il est désactivé, nous avons deux options: activer le proxy SSL pour tous les domaines ou uniquement pour certains. Pour activer le proxy SSL pour tous les domaines, vous devez ajouter un emplacement générique: cliquez sur le bouton Ajouter et spécifiez * dans tous les champs, de sorte que les paramètres SSL doivent ressembler à ceci.



Pour activer le proxy SSl uniquement pour des domaines spécifiques, vous devez les ajouter à la liste et vous assurer que l'emplacement générique est désactivé. Dans ce cas, Charles interceptera toujours tout le trafic, mais les demandes HTTPS pour les domaines qui ne figurent pas dans la liste ne seront pas déchiffrées.


Lorsque vous utilisez Charles, il est pratique d'utiliser des filtres d'interception du trafic, qui peuvent être configurés dans le menu Proxy> Paramètres d'enregistrement: vous pouvez spécifier le protocole, l'URL et le port.



Nous avons maintenant la possibilité de visualiser le trafic HTTPS.



Charles prend également en charge le protocole Websocket et affiche des messages dans le style d'iMessage, cela semble pratique.



Le premier du genre proxy Charles pour iOS mérite une mention spéciale - la version mobile de Charles, l'étiquette de prix dans l'App Store au moment de la rédaction est de 9 $. L'application contient les fonctionnalités de base de la version de bureau: proxy du trafic HTTP (S), affichage du contenu des demandes / réponses et paramétrage automatique pratique des paramètres proxy pour un réseau Wi-Fi.



Burp Suite (Community Edition)



Burp Suite est un couteau suisse de pentesters et de pirates, contenant une quantité indécente d'outils et de fonctionnalités. L'un des modules de Burp Suite est un proxy, que nous utiliserons pour analyser le trafic HTTP (S). Il existe deux versions de l'application: Professional et Community Edition. La version communautaire est gratuite, elle n'a pas de scanner de vulnérabilités et le nombre de requêtes par unité de temps est limité, mais malgré cela, la version gratuite de l'application est un outil de test à part entière.


Après avoir démarré l'application, vous devez ajouter et activer le proxy en accédant à Proxy> Options.



Ensuite, vous devez vous assurer que l'intercepteur de demande d'interception est désactivé, sinon il interceptera les demandes et les maintiendra jusqu'à ce que vous lui disiez quoi faire avec cette demande - annulez ou transférez-la au serveur. Par conséquent, désactivez-le, nous n'en avons plus besoin.



Ensuite, vous devez installer le certificat Burp Suite sur le simulateur / appareil, cette procédure devrait déjà nous être douloureusement familière après l'installation des certificats Mitmproxy et Charles. Nous lançons Burp Suite, et n'oubliez pas d'activer le proxy dans les paramètres réseau MacOS pour le simulateur ou dans iOS pour le vrai appareil (voir la section Mitmproxy pour savoir comment faire), spécifiez l'adresse IP de l'ordinateur exécutant Burp Suite comme serveur proxy, comme le port - 8080. Ensuite, nous allons dans le navigateur sur le simulateur et entrez l'adresse http: // burp . Ensuite, cliquez sur le bouton du site "Certificat CA" et téléchargez le certificat.



Installez ensuite le certificat. Après avoir installé le certificat pour iOS version 10.3 et supérieure, vous devez activer l'accès complet au certificat racine Burp Suite. Pour ce faire, accédez à Paramètres> Général> À propos> Paramètres d'approbation de certificat et activez l'accès complet pour le certificat Burp Suite.



En accédant à l'onglet Proxy -> Historique HTTP, vous pouvez afficher le trafic HTTP (S) à partir d'une application mobile. Il convient de noter que l'inconvénient ici est le manque de formatage JSON dans le corps de la demande / réponse.



Le problème avec le formatage JSON peut être résolu en installant le plugin JSON Beautifier . Pour l'installer, allez dans l'onglet Extender> BApp Store, recherchez le JSON Beautifier dans la liste des plugins et cliquez sur installer.



Il y a maintenant un onglet JSON Beautifier supplémentaire avec un beau JSON.



Burp Suite prend en charge le protocole Websocket. Les messages Websocket se trouvent dans l'onglet spécial Proxy> Historique WebSockets.



OWASP ZAP



Owasp ZAP est une idée originale de la communauté de cybersécurité de renommée mondiale Owasp, en plus, le proxy est open source. Owasp ZAP est souvent comparé à Burp Suite, mais cette dernière est de popularité inférieure. Owasp ZAP est entièrement gratuit, il n'y a pas de versions PRO par rapport à Burp Suite.


Après avoir démarré l'application, vous devez vérifier les paramètres de proxy Préférences> Proxy locaux, les paramètres par défaut devraient ressembler à ceci.



Ensuite, allez dans Préférences> Certificats SSL dynamiques pour exporter le certificat SSL. Cliquez sur le bouton Enregistrer et enregistrez le certificat, par exemple, sur le bureau.



Ensuite, faites simplement glisser le fichier de certificat dans le simulateur et une fenêtre s'ouvre vous proposant d'installer le certificat, nous acceptons et installons. Après avoir installé le certificat pour iOS version 10.3 et supérieure, vous devez activer un accès complet au certificat racine OWASP ZAP. Pour ce faire, accédez à Paramètres> Général> À propos> Paramètres d'approbation de certificat et activez l'accès complet pour le certificat OWASP ZAP.



Nous avons maintenant la possibilité de visualiser le trafic HTTPS. JSON, malheureusement, n'a pas un beau formatage ici et jusqu'à présent, nous n'avons pas pu résoudre cette situation, dans des cas extrêmes, vous pouvez utiliser un formateur JSON tiers, par exemple celui-ci .



OWASP ZAP prend en charge le protocole Websocket. Les messages Websocket peuvent être trouvés dans un onglet spécial WebSockets, il est également pratique de sélectionner le "canal" pour le filtrage par domaine.



Épinglage SSL


Si l'épinglage SSL est implémenté dans votre application, vous ne verrez pas le trafic d'application proxy, car le proxy utilise son propre certificat pour SSL, dans ce cas, il existe 4 options:


  1. Désactivez temporairement l'épinglage SSL lors du débogage des demandes réseau à l'aide d'un proxy.
  2. Ajoutez un certificat / clé publique proxy aux certificats / clés débogués pour les versions de débogage.
  3. Utilisez votre certificat de serveur pour le proxy au lieu de son propre certificat généré par celui-ci.
  4. Au lieu d'utiliser un proxy externe, utilisez un framework de débogage (la liste des frameworks est indiquée au tout début de l'article), qui interceptera et affichera les requêtes et réponses directement dans l'application elle-même, mais cela nécessite une intégration dans le code source de l'application existante, plus d'informations sur ces outils dans l'article suivant.

Résumé


Commençons par Charles. Peut-être le meilleur proxy pour ceux qui veulent que tout fonctionne hors de la boîte et soit aussi convivial que possible, bien que Charles puisse surprendre l'utilisateur à certains moments, la fonctionnalité de proxy est très étendue, elle a également l'interface la plus belle et native pour macOS décrite dans l'article proxy. Si cela ne vous dérange pas de mettre 50 $ pour un tel instrument, alors c'est votre choix.


Passons à Burp Suite. L'outil le plus puissant, selon une certaine fonctionnalité et même une facilité d'utilisation, donne dans certains cas facilement des cotes à Charles, en plus il existe un système d'extension des fonctionnalités sous forme de plug-ins. Burp Suite s'est depuis longtemps imposé comme un outil très fiable et précis entre de bonnes mains. Si vous ne disposez pas des fonctionnalités de votre proxy actuel, je vous conseille de faire attention à cette instance.


C'est maintenant le tour de Mitmproxy - un proxy jeune et prometteur, qui gagne activement en popularité, développé par la communauté Open Source. Le plus controversé des procurations que nous avons vues, mais en même temps pas moins intéressant. Mitmproxy se démarque de ses concurrents par son interface utilisateur de console incroyablement pratique, simple et fonctionnelle. Il est également possible d'utiliser l'interface Web Mitmweb, mais elle est maintenant en test bêta, c'est pourquoi elle est rare, mais des bugs apparaissent, il n'y a aucune partie de la fonctionnalité avancée Mitmproxy (elle est progressivement complétée), et elle est également légèrement inférieure en termes de commodité à des concurrents plus natifs. La prise en charge du protocole Websocket était également décevante, pour ainsi dire, mais il n'y a pas d'affichage dans l'interface utilisateur ou nous n'avons tout simplement pas appris à le préparer, car nous n'avons pas pu obtenir Mitmproxy pour afficher les messages Websocket, bien que nous n'ayons pas eu de tels problèmes avec d'autres proxys.


Et le dernier sur la liste, mais non moins intéressant était Owasp ZAP. Parmi les avantages, il existe un système de plug-in extensible (subjectivement, leur nombre est inférieur à celui de Burp Suite), mais malheureusement nous n'avons pas pu configurer un bel affichage JSON dans le corps de la demande / réponse, ce qui est un critère plutôt critique lors du choix d'un proxy pour le développement mobile. Cependant, Owasp ZAP a un système avancé pour tester le trafic Websocket, ainsi que le grand nom des développeurs de la communauté Owasp derrière moi, donc je ne l'escompterais pas et pensais aux cas rares et complexes.


Vous trouverez ci-dessous un tableau récapitulatif subjectif des procurations que nous avons analysées.


critère / proxyMitmproxyCharlesBurpsuite (CE)Owasp zap
Formatage JSON+++-
Modification et répétition de requêtes++++
Prise en charge de Websocket-+++
Logiciel gratuit+-++

Nous terminerons ici, nous espérons que l'article vous sera utile, nous serons également heureux de commenter et si vous partagez votre expérience dans le domaine des tests et du suivi du trafic des applications mobiles.

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


All Articles