Une application CLI qui prépare automatiquement les fichiers APK Android pour l'inspection HTTPS
L'inspection du trafic HTTPS d'une application mobile à l'aide d'un proxy est probablement le moyen le plus simple de comprendre son fonctionnement. Cependant, avec la configuration de sécurité réseau introduite dans Android 7 et les développeurs d'applications qui tentent d'empêcher les attaques MITM à l'aide de l'épinglage de certificat, faire fonctionner une application avec un proxy HTTPS est devenu assez fastidieux.
apk-mitm
automatise l'ensemble du processus. Tout ce que vous avez à faire est de lui donner un fichier APK et apk-mitm
:
Vous pouvez également utiliser apk-mitm
pour patcher des applications à l'aide d'Android App Bundle et le root de votre téléphone n'est pas requis.
La modification du comportement habituel d'une application pour contourner les fonctionnalités de sécurité telles que l'épinglage de certificat nécessite soit de modifier le code source de l'application avant de l'exécuter, soit de "connecter" l'application pendant son exécution pour intercepter les appels de fonction.
apk-mitm
adopte actuellement l'ancienne approche consistant à modifier le code de l'application en "désassemblant" d'abord l'application à l'aide d'Apktool, en apportant des modifications à plusieurs fichiers, puis en la réassemblant (à nouveau en utilisant Apktool).
Cette approche présente l’avantage de ne pas nécessiter de périphérique rooté, mais présente également plusieurs inconvénients. Le plus gros problème est que les applications ne sont pas vraiment destinées à être démontées. Apktool essaie quand même d’y parvenir, mais, surtout avec des applications volumineuses et complexes, il rencontre souvent des problèmes.
Un autre problème avec cette approche est que certaines méthodes d'épinglage de certificat, comme les vérifications effectuées dans les binaires natifs (comme c'est le cas pour des frameworks comme Flutter), sont soit très difficiles, soit impossibles à contourner. Pour cette raison, il peut être avantageux d’essayer d’autres approches pour les applications plus délicates.
Plus précisément, j'aimerais souligner le projet android-unpinner
de mitmproxy et les scripts frida-interception-and-unpinning
sous-jacents par HTTP Toolkit. Leur approche applique des correctifs au moment de l'exécution en utilisant Frida, ce qui est beaucoup plus puissant mais signifie également qu'il ne peut pas être utilisé ou qu'il est plus difficile à utiliser sans un périphérique rooté.
Si vous disposez d'une version à jour de Node.js (14+) et Java (8+), vous pouvez installer apk-mitm
en exécutant :
npm install -g apk-mitm
Une fois installée, vous pouvez exécuter cette commande pour patcher une application :
apk-mitm < path-to-apk >
Patcher un fichier APK appelé example.apk
pourrait ressembler à ceci :
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
Vous pouvez maintenant installer le fichier example-patched.apk
sur votre appareil Android et utiliser un proxy comme Charles ou mitmproxy pour consulter le trafic de l'application.
Vous pouvez également patcher des applications à l'aide d'Android App Bundle avec apk-mitm
en lui fournissant un fichier *.xapk
(par exemple depuis APKPure) ou un fichier *.apks
(que vous pouvez exporter vous-même à l'aide de SAI). Si vous faites cela sous Linux, assurez-vous que zip
et unzip
sont installés.
Parfois, vous devrez apporter des modifications manuelles à une application pour qu'elle fonctionne. Dans ces cas, l'option --wait
est ce dont vous avez besoin. L'activer fera attendre apk-mitm
avant de ré-encoder l'application, vous permettant d'apporter des modifications aux fichiers dans le répertoire temporaire.
Si vous souhaitez expérimenter différentes modifications sur un APK, alors utiliser --wait
n'est probablement pas l'option la plus pratique car elle vous oblige à repartir de zéro à chaque fois que vous l'utilisez. Dans ce cas, vous voudrez peut-être jeter un œil à APKLab. Il s'agit d'un atelier d'ingénierie inverse Android construit sur VS Code qui prend en charge apk-mitm
et devrait vous permettre d'itérer beaucoup plus rapidement.
Sur certains appareils (comme les téléviseurs Android), vous ne pourrez peut-être pas ajouter un nouveau certificat aux certificats racine du système. Dans ces cas, vous pouvez toujours ajouter le certificat de votre proxy directement à la configuration de sécurité réseau de l'application, car cela fonctionnera sur n'importe quel appareil. Vous pouvez y parvenir en exécutant apk-mitm
avec l'indicateur --certificate
défini sur le chemin du certificat (fichier .pem
ou .der
) utilisé par votre proxy.
Si l'application utilise Google Maps et que la carte est cassée après l'application du correctif, la clé API de l'application est probablement limitée au certificat du développeur. Vous devrez créer votre propre clé API sans restrictions et exécuter apk-mitm
avec l'option --wait
pour pouvoir remplacer la valeur com.google.android.geo.API_KEY
dans le fichier AndroidManifest.xml
de l'application.
Si apk-mitm
plante lors du décodage ou de l'encodage, le problème est probablement lié à Apktool. Vérifiez leurs problèmes sur GitHub pour trouver des solutions de contournement possibles. Si vous trouvez une version d'Apktool qui n'est pas affectée par le problème, vous pouvez demander apk-mitm
de l'utiliser en spécifiant le chemin de son fichier JAR via l'option --apktool
.
MIT © Niklas Higi