
Ratched ist ein transparenter Man-in-the-Middle-TLS-Proxy, der für Penetrationstests vorgesehen ist.
ratched ist ein Man-in-the-Middle (MitM)-Proxy, der speziell TLS-Verbindungen abfängt. Es ist dafür gedacht, in Verbindung mit dem Linux iptables REDIRECT-Ziel verwendet zu werden; alle Verbindungen, die abgefangen werden sollen, können an den lokalen ratched-Port umgeleitet werden. Über den SO_ORIGINAL_DST sockopt kann ratched das ursprüngliche Ziel (vor der iptables-Paketmanipulation) ermitteln und versucht, eine Verbindung zum Originalziel aufzubauen.
Was es von anderer MitM-Software unterscheidet, ist Folgendes:
ratched fängt Datenverkehr nicht wahllos ab. Insbesondere wartet es zunächst darauf, dass der TLS-Client sein ClientHello sendet, damit ratched es parsen und anhand der Server Name Indication TLS-Erweiterung (SNI) entscheiden kann, ob das Ziel abgefangen werden soll oder nicht. Dies ist besonders nützlich, wenn Sie virtuelles Hosting haben, aber nur Verbindungen zu einem bestimmten Hostnamen abfangen möchten.
ratched ist nicht nur dazu gedacht, Passwörter zu schnüffeln, sondern exportiert den Datenverkehr hauptsächlich in eine PCAPNG-Datei. Das PCAPNG-Dateiformat wurde gewählt, weil es die Annotation von Verbindungen mit Kommentaren ermöglicht (insbesondere, welcher Hostname in der SNI-Erweiterung angegeben wurde) und auch die Einbettung von Namensauflösungsinformationen in die Capturedatei erlaubt (wiederum, um die Ziel-IP-Adresse dem Hostnamen der SNI-Erweiterung zuzuordnen).
ratched hat eine individuelle Konfiguration für jedes abgefangene SNI, einschließlich unterstützter Gruppen (früher bekannt als „unterstützte elliptische Kurven“), Cipher Suites und spezifischer TLS-Versionen auf Client- und Server-Seite, und erlaubt die Angabe benutzerdefinierter Zertifikate/Schlüssel für verschiedene abgefangene Hosts.
ratched bietet umfangreiche Unterstützung für Client-Zertifikate und ermöglicht auch das automatische Fälschen von Client-Zertifikaten (ähnlich wie gefälschte Server-Zertifikate in der anderen Richtung).
ratched unterstützt OCSP-Stapling und kann automatisch positive OCSP-Antworten fälschen, wenn ein Client eine Statusanfrage-TLS-Erweiterung sendet.
Sobald ratched auf dem Routing-Rechner lauscht (im Beispiel auf Port 9999), fügen Sie einfach einen iptables-Eintrag hinzu, der angibt, welchen Datenverkehr Sie erfassen möchten. Um zum Beispiel alles von 192.168.1.7 abzufangen, das Port 443 erreichen möchte, verwenden Sie:
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Um alles abzufangen, das an Port 443 geht, einfach:
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Wenn Sie als Router fungieren und lokal eingehenden Datenverkehr abfangen möchten, verwenden Sie das DNAT-Ziel anstelle von REDIRECT, z. B.:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Hier ist eth1 die Schnittstelle, an der Sie den Datenverkehr abfangen, und 192.168.123.1 ist die lokale Schnittstellen-IP-Adresse.
Die Hilfeseite sollte weitgehend selbsterklärend sein:
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