Indahax - Pierre Noguès

Twitter Facebook Linkedin email

Sniffer les sessions SSL/TLS brutes

Il existe pas mal de proxies pour sniffer les sessions SSL, le problème est que la plupart d’entre eux supportent uniquement le protocole https. Dans mon cas de figure, j’avais besoin de voir le contenu d’une connexion SSL sortante qui n’avait rien à voir avec HTTP.

Ici on est plus dans une optique de débogage/pentest applicatif rapide que du MITM agressif (ettercap). Par exemple une appli flash qui joue avec les sockets.

J’ai trouvé une solution simple et rapide avec socat. On peut configurer socat pour qu’il écoute sur un socket SSL et relaie le trafic vers le destinataire d’origine, tout en affichant le contenu déchiffré. Voici comment faire :

# Génere un certificat
openssl genrsa -out /tmp/cert.key 1024 
openssl req -new -key /tmp/cert.key -x509 -days 3653 -out /tmp/cert.crt 
cat /tmp/cert.key /tmp/cert.crt  >/tmp/cert.pem 

# -v pour afficher au format texte, mettre -x pour hexadecimal
socat -v OPENSSL-LISTEN:9001,reuseaddr,cert=cert.pem,verify=0,fork OPENSSL:google.com:443,verify=0

Ici on attend les connexions SSL sur le port 9001 et on les relaie vers le destinataire d’origine (ici google.com port 443).

Maintenant il faut encore rediriger le trafic. La règle iptable suivante redirige tout le trafic vers le port 443 (peu importe la destination) vers notre proxy.

# Utiliser cette règle si l'application sniffé est en local
iptables -t nat -A OUTPUT -p tcp -o eth0 --dport 443 -j REDIRECT --to-ports 9001

# Celle-ci si l'application est sur un pc distant et que l'on est en mode gateway
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 9001

Si on est en local, on peut également rediriger le trafic en modifiant /etc/hosts.

Une autre alternative est de détourner/hooker les fonctions réseaux avec LD_PRELOAD à la proxychains, mais là on n’est pas forcément sur une solution rapide :)

J’ai également découvert ce proxy tcp qui permet de faire la même chose mais aussi d’interagir facilement avec quelques scripts. Son avantage est qu’il n’est pas limité au protocole HTTP. Je n’ai pas eu l’occasion d’essayer mais ça à l’air pas mal.