
Ratched est un proxy TLS transparent de type Man-in-the-Middle conçu pour les tests d'intrusion.
ratched est un proxy Man-in-the-Middle (MitM) qui intercepte spécifiquement les connexions TLS. Il est conçu pour être utilisé conjointement avec la cible REDIRECT d'iptables de Linux ; toutes les connexions qui doivent être interceptées peuvent être redirigées vers le port local de ratched. Grâce à l'option de socket SO_ORIGINAL_DST, ratched peut déterminer la destination prévue (avant le maquillage des paquets iptables) et tente d'établir une connexion avec la cible d'origine.
Ce qui le distingue des autres logiciels MitM est le suivant :
ratched n'intercepte pas le trafic de manière indiscriminée. En particulier, il attend d'abord que le client TLS envoie son ClientHello afin que ratched puisse le parser et décider, via l'extension TLS Server Name Indication (SNI), si la cible doit être interceptée ou non. Ceci est particulièrement utile lorsque vous avez de l'hébergement virtuel, mais que vous souhaitez uniquement intercepter les connexions vers un nom d'hôte spécifique.
ratched n'est pas destiné uniquement à sniffer des mots de passe, mais il déverse principalement le trafic dans un fichier PCAPNG. Le format de fichier PCAPNG a été choisi car il permet d'annoter les connexions avec des commentaires (en particulier, quel nom d'hôte a été indiqué dans l'extension SNI) et permet également d'intégrer des informations de résolution de noms dans le fichier de capture (là encore, pour mapper l'adresse IP cible au nom d'hôte de l'extension SNI).
ratched dispose d'une configuration individuelle pour chaque SNI intercepté, incluant les groupes pris en charge (anciennement appelés « courbes elliptiques prises en charge »), les suites de chiffrement et les versions TLS spécifiques côté client et serveur, et permet de spécifier des certificats/clés personnalisés pour différents hôtes interceptés.
ratched offre un support étendu pour les certificats clients et propose également un forgeage automatique des certificats clients (similaire aux certificats serveur forgés dans l'autre direction).
ratched prend en charge l'OCSP stapling et peut forger automatiquement des réponses OCSP positives lorsqu'un client envoie une extension TLS de demande de statut.
Une fois que ratched écoute sur la machine de routage (dans l'exemple, sur le port 9999), ajoutez simplement une entrée iptables qui spécifie le trafic que vous souhaitez capturer. Par exemple, pour intercepter tout ce qui vient de 192.168.1.7 et tente d'atteindre le port 443, utilisez :
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Pour intercepter tout ce qui va vers le port 443, faites simplement :
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Si vous agissez en tant que routeur et souhaitez intercepter le trafic entrant local, utilisez la cible DNAT au lieu de REDIRECT, par exemple :
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Ici, eth1 est l'interface sur laquelle vous interceptez le trafic et 192.168.123.1 est l'adresse IP de l'interface locale.
La page d'aide devrait être assez explicite :
usage: ratched [-c path] [-f hostname:port] [--single-shot] [--dump-certs]
[--keyspec keyspec] [--initial-read-timeout secs]
[--mark-forged-certificates] [--no-recalculate-keyids]
[--daemonize] [--logfile file] [--flush-logs] [--crl-uri uri]
[--ocsp-uri uri] [--write-memdumps-into-files]
[--use-ipv6-encapsulation] [-l hostname:port]
[-d key=value[,key=value,...]] [-i hostname[,key=value,...]]
[--pcap-comment comment] [-o filename] [-v]
ratched - TLS connection router that performs a man-in-the-middle attack