Nous y voilà ! Comment sniffer l’HTTPS ? Et bien c’est possible… et voici comment !
0. Préambule
Sniffer le trafic HTTPS est plus compliqué : soit vous décryptez les trames SSL (ça peut prendre du temps…), soit vous vous faîtes passer pour le serveur. HTTPS chiffre toute la connexion, par conséquent il n’est pas possible de récupérer les URLs, ni même le nom de domaine vers lequel les requêtes sont envoyées, vous n’aurez que l’adresse IP, ce qui est bien mais insuffisant !
Alors comment récupérer les données qui passent à travers le SSL ? En redirigeant tout le trafic vers un serveur sur notre machine, déchiffrer, puis jouer le rôle d’un proxy pour finalement renvoyer les données au vrai serveur.
Dans cet article, on va essayer de lire ce qui se passe avec www.paypal.com
1. Sniffer le trafic du mobile
Vous pouvez vous référer à l’article précédent Sniffer le trafic d’un iPhone/Android avec Linux.
2. Quel domaine ?
Comme je l’ai dit, on ne peut pas retrouver quel domaine est interrogé par un webservice en lisant la trame SSL. Mais on peut regarder de quelle IP notre mobile a besoin !
Pour récupérer le nom de domaine, il suffit donc de regarder quelles sont les requêtes DNS qui passent, et de regrouper les adresses IPs données avec l’IP du trafic SSL.
En l’occurence, il s’agira de www.paypal.com.
3. Déchiffrer : stunnel
On va utiliser le fabuleux programme stunnel pour lire le trafic SSL.
stunnel est un programme qui permet en gros d’utiliser SSL pour les clients et les serveurs qui ne le supporte pas. On va donc déchiffrer / rechiffrer le trafic pour le lire en clair.
3.1 Stunnel 1 : accéder en clair à un serveur https
Iil faut configurer stunnel :
pid = /var/run/stunnel-client.pid client = yes [www.paypal.com] accept = 127.0.0.1:50000 connect = www.paypal.com:443
Si vous allez sur http://127.0.0.1:50000/ et que vous acceptez le certificat, vous devriez avoir une page HTML en résultat, signe qu’on a bien été connecté avec paypal.
3.2 Rediriger le trafic SSL vers un serveur sans SSL
Il nous faudra un certificat autosigné, puis créez un fichier mondomaine.pem qui contient la clé et le certificat :
cat mondomaine.key mondomaine.crt > mondomaine.key
Ensuite, il faudra bien configurer stunnel :
pid = /var/run/stunnel-server.pid client = no cert = /path/to/www.paypal.com.pem key = /path/to/www.paypal.com.pem [www.paypal.com] accept = 0.0.0.0:50001 connect = 127.0.0.1:50000
Lancez stunnel avec ce fichier de conf : vous devriez pouvoir vous connecter sur https://127.0.0.1:50001/ en acceptant le certificat.
4. Rediriger le trafic provenant du mobile
Pour rediriger le trafic provenant du mobile vers notre serveur, il faut utiliser iptables :
$ iptables -t nat -A PREROUTING -d www.paypal.com -p tcp --dport 443 -j REDIRECT --to-ports 50001
Si vous allez depuis votre mobile sur https://www.paypal.com/, vous devriez avoir une alerte de certificat. Acceptez cette alerte : vous devriez avoir paypal.com, mais en passant par votre serveur.
5. Mais je ne vois toujours rien en clair…
Le trafic en clair passe sur votre localhost : utilisez donc wireshark sur cette interface…
6. C’est pour débugger une app et ça marche pas…
… parce que votre certificat n’a pas été validé par une autorité, et ne le sera jamais ! Envoyez le certificat .crt sur votre mobile (par email ?) et installez-le sur votre mobile 🙂