Capture de paquets en un clic

La fonctionnalité de capture de paquets Man-in-the-Middle en un clic permet d'activer automatiquement une interception globale sur l'appareil. Sa différence par rapport aux outils que vous utilisez habituellement réside dans le fait que vous n'avez pas à vous soucier de l'installation de certificats ou de la configuration du proxy, ni des différences de méthodes de capture entre les différentes versions du système. Elle s'applique de manière transparente à Android 6.0 - 14. Nous avons tout géré pour vous, vous n'avez qu'à vous concentrer sur vos tâches spécifiques. De plus, elle prend en charge la modification et l'interception de paquets en temps réel, ce qui la rend plus adaptée à une utilisation professionnelle concrète que les programmes GUI habituels, qui se limitent souvent à "jeter un œil aux paquets".

En outre, nous pouvons vous garantir qu'aucun paquet ne sera manqué (à l'exception du certificate pinning), et le taux de réussite de la capture est plus élevé que celui des méthodes logicielles conventionnelles. Vous pouvez intercepter le trafic HTTP/S des applications. Elle peut appliquer et révoquer automatiquement l'interception Man-in-the-Middle. Après avoir quitté le script, l'appareil et le réseau retrouveront leur état d'origine, vous n'avez aucune autre configuration à faire. Le script prend également en charge la capture de paquets MITM internationale (via un proxy en amont), vous permettant d'intercepter facilement le trafic des logiciels étrangers.

Attention

Quel que soit votre système d'exploitation, avant de commencer la capture, veuillez désactiver temporairement et complètement votre **pare-feu réseau** pour garantir une exécution correcte du premier coup.

Prérequis

Assurez-vous d'abord que votre ordinateur et l'appareil sont sur le même sous-réseau, ou connectés via USB. Nous supposerons par la suite que 192.168.0.2 est l'adresse IP de l'appareil mobile exécutant FIRERPA. Ensuite, assurez-vous d'avoir correctement cloné le code du projet et installé les dépendances nécessaires. Vérifiez que mitmproxy est installé avec succès en ligne de commande (vous pouvez le vérifier en tapant mitmdump dans la ligne de commande).

Si vous n'avez pas Python et n'êtes pas familier avec le clonage et les dépendances, vous pouvez télécharger startmitm.exe depuis notre page de publications (releases). Il s'agit d'une version packagée de startmitm.py, vous pouvez exécuter la capture de paquets sans installer Python. C'est une application en console, et ses paramètres de commande sont identiques à ceux de startmitm.py (ce fichier peut être signalé comme un virus, veuillez décider vous-même de l'utiliser ou non).

Capture de base

Astuce

L'application que vous souhaitez intercepter peut utiliser le SSL PINNING (épinglage de certificat) ou le protocole QUIC, ces deux cas peuvent affecter les résultats de la capture. Nous forçons automatiquement la dégradation de QUIC, mais en raison d'un possible temps de repli (fallback), l'application peut sembler avoir un réseau très lent, veuillez patienter un instant. Les applications avec épinglage de certificat ne peuvent pas être interceptées directement. Vous devrez utiliser la rétro-ingénierie pour écrire un script Frida afin de contourner la logique de SSL PINNING.

Vous pouvez rapidement commencer la capture avec la commande suivante, c'est la méthode d'utilisation la plus simple.

python3 -u startmitm.py 192.168.0.2

Important

**N'oubliez pas, après avoir exécuté la commande startmitm, de fermer complètement l'application à intercepter et de la rouvrir. Fermer l'application depuis la barre des tâches n'est pas une méthode fiable. Veuillez utiliser l'API pour la fermer ou utiliser la commande `kill -9` sur tous les PID liés à l'application, sinon la capture ne fonctionnera pas correctement.**

Appuyez une fois sur la combinaison de touches CONTROL + C pour quitter la capture, veuillez ne pas appuyer plusieurs fois de suite.

Capture partagée

Si vous souhaitez analyser les paquets avec des collègues sur le même réseau local, exécutez la commande suivante, puis demandez à vos collègues d'ouvrir http://votre_adresse_ip:7890 dans leur navigateur pour voir la même page de capture que vous. Vous pourrez ainsi analyser les données ensemble.

python3 -u startmitm.py 192.168.0.2 --web-port 7890 --web-host 0.0.0.0

Application spécifique

Si vous avez besoin d'intercepter le trafic d'une application spécifique, plutôt que le trafic de l'ensemble du système, vous pouvez ajouter :nom_du_package après l'adresse IP pour capturer les données de trafic de cette application. L'exemple suivant n'interceptera que le trafic de com.some.package.

python3 -u startmitm.py 192.168.0.2:com.some.package

Modification en temps réel

Vous pouvez modifier les données de requête et de réponse de l'application en temps réel. Cette fonctionnalité est basée sur les hooks d'événements de mitmproxy. Vous devez écrire vous-même un script de hook en vous basant sur l'API de mitmproxy. Pour savoir comment écrire des scripts de hook, veuillez vous référer à la documentation officielle de mitmproxy docs.mitmproxy.org/stable/addons-examples ainsi qu'aux exemples de code mitmproxy/examples/contrib.

Supposons que votre script de hook s'appelle http_flow_hook.py, utilisez la commande suivante pour l'appliquer.

python3 -u startmitm.py 192.168.0.2 -s http_flow_hook.py

Réseaux différents

Si votre téléphone et votre ordinateur ne sont pas sur le même réseau, mais que vous avez un accès physique à l'appareil, vous pouvez également effectuer la capture via USB ADB. Assurez-vous que l'appareil est connecté à l'ordinateur via USB ADB et qu'il a été correctement autorisé.

Si un seul appareil ADB est connecté à l'ordinateur, utilisez la commande suivante pour la capture. localhost représente l'utilisation de l'appareil ADB.

python3 -u startmitm.py localhost

Si plusieurs appareils ADB sont connectés à l'ordinateur, vous devez spécifier le numéro de série adb, que vous pouvez trouver dans la sortie de la commande adb devices.

python3 -u startmitm.py localhost --serial bfde362

Si votre environnement est plus contraignant, par exemple, si le téléphone et l'ordinateur ne sont ni sur le même réseau, ni physiquement accessibles, mais que vous pouvez accéder au port de FIRERPA, vous pouvez toujours effectuer l'interception. C'est généralement le cas si vous avez utilisé le service frp intégré pour transférer FIRERPA vers un serveur distant, ou si vous avez transféré le port 65000 de FIRERPA quelque part par vos propres moyens. Dans ce cas, vous ne pouvez communiquer avec FIRERPA que via ce port unique, les autres ports étant inaccessibles. Dans cette situation, le téléphone ne peut accéder à aucun port de votre machine, et votre machine ne peut accéder qu'au port FIRERPA du téléphone (ou le téléphone a une IP publique, mais votre machine est sur un réseau interne). Il faut alors procéder de la manière suivante. (Un réseau OpenVPN où les machines communiquent entre elles ne correspond pas à ce cas de figure).

Dans ce cas, il faut utiliser la combinaison de commandes suivante. D'abord, utilisez adb_pubkey.py ou appelez l'interface vous-même pour installer votre clé publique ADB sur l'appareil. Une fois l'installation terminée, continuez avec les étapes suivantes, où x.x.x.x est l'adresse IP ou 127.0.0.1 qui peut se connecter au port 65000, à modifier selon votre situation.

adb connect x.x.x.x:65000

Enfin, procédez de la même manière que ci-dessus pour la capture via USB.

python3 -u startmitm.py localhost

Ou comme ceci, où le serial est l'adresse de adb connect et non le numéro de série hexadécimal.

python3 -u startmitm.py localhost --serial x.x.x.x:65000

Proxy en amont / Capture internationale

startmitm lance lui-même mitmproxy en tant que service proxy. Par défaut, le trafic est envoyé par mitmproxy depuis la carte réseau locale. Si vous avez besoin que le trafic passe par un proxy en amont plutôt que par votre machine locale, vous pouvez spécifier un proxy en amont de la manière suivante. Seuls les proxys utilisant le protocole HTTP sont pris en charge comme proxy en amont. Vous devez également spécifier un DNS en amont qui prend en charge les requêtes TCP pour éviter la pollution DNS.

Conseil

Le mode proxy en amont nécessite que la version de mitmproxy soit >= 9.0.0 (et Python >= 3.9).
python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --proxy-dns 8.8.8.8

Si le proxy HTTP en amont nécessite une authentification, veuillez utiliser la commande suivante et remplacer USER:PASSWORD.

python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --proxy-dns 8.8.8.8

Toutes les commandes ci-dessus enverront le trafic de l'appareil via le proxy en amont (upstream), et enverront toutes les requêtes DNS de la machine locale à 8.8.8.8 via le proxy.