Intercepter le trafic SSL avec mitmproxy en local

Voici comment il est possible de faire du reverse engineering d’une application qui communique via HTTPS.

Dans mon cas j’essaye de comprendre le comportement d’une application Android (libre bien sûr !) en écoutant ses requêtes réseau avec l’émulateur du android-sdk.

Pour réaliser ma configuration sous Arch Linux j’ai créé un utilisateur “proxy” sur ma machine.

Cet utilisateur sera l’exécutant de mitmproxy.

# useradd -m -g users -G wheel -s /bin/bash proxy
# passwd proxy
(...)
# su - proxy

Ensuite il faut créer un environnement virtuel python avec l’interpréteur python2:

virtualenv -p python2 mitmproxy
cd mitmproxy
source bin/activate
pip install mitmproxy

Il faut maintenant rediriger toutes les connections http et https vers mitmproxy. Avec iptables, en root:

iptables -t nat -F
iptables -t nat -A OUTPUT -m tcp -p tcp --dport 80 -m owner --uid-owner proxy -j RETURN
iptables -t nat -A OUTPUT -m tcp -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -m tcp -p tcp --dport 443 -m owner --uid-owner proxy -j RETURN
iptables -t nat -A OUTPUT -m tcp -p tcp --dport 443 -j REDIRECT --to-ports 8080

Explication: les requêtes qui proviennent de l’utilisateur proxy, ne sont pas traitées, c’est normal, elles doivent pouvoir aller sur Internet. Les autres sont toutes redirigées vers le proxy.

Ensuite il suffit de lancer mitmproxy avec l’utilisateur proxy comme expliqué dans la doc:

mitmproxy -T --host

Bien sûr vous allez avoir une alerte de sécurité, vous signalant que le certificat n’est pas valide.

Pour ne plus l’avoir il faut installer le certificat de mitmproxy sur votre client.

Tout est très bien documenté sur le site du projet ou pour aller plus vite, rendez-vous sur l’url magique: mitm.it, une webapp vous proposera d’installer le faux certificat.

Voilà vous avez la possibilité de voir le contenu du trafic HTTPS de vos applications, à utiliser dans un cadre légal évidemment !