
Ratched è un proxy TLS Man-in-the-Middle trasparente progettato per il penetration testing.
ratched è un proxy Man-in-the-Middle (MitM) che intercetta specificamente le connessioni TLS. È progettato per essere usato insieme al target REDIRECT di Linux iptabes; tutte le connessioni che devono essere intercettate possono essere reindirizzate alla porta locale di ratched. Tramite l'opzione sockopt SO_ORIGINAL_DST, ratched può determinare la destinazione prevista (prima del packet mangling di iptables) e tenta di stabilire una connessione al target originale.
Ciò che lo distingue da altri software MitM è il seguente:
ratched non intercetta il traffico indiscriminatamente. In particolare, attende prima che il client TLS invii il suo ClientHello in modo che ratched possa analizzarlo e decidere tramite l'estensione Server Name Indication TLS (SNI) se il target deve essere intercettato o meno. Ciò è particolarmente utile quando si ha un hosting virtuale, ma si vogliono intercettare solo le connessioni a un nome host specifico.
ratched non è pensato solo per sniffare password, ma principalmente per scaricare il traffico in un file PCAPNG. Il formato file PCAPNG è stato scelto perché consente di annotare le connessioni con commenti (in particolare, quale nome host è stato indicato nell'estensione SNI) e permette anche di incorporare informazioni di risoluzione dei nomi nel file di cattura (ancora, per mappare l'indirizzo IP del target al nome host dell'estensione SNI).
ratched ha una configurazione individuale per ogni SNI intercettato, inclusi gruppi supportati (precedentemente noti come 'curve ellittiche supportate'), suite di cifratura e versioni TLS specifiche lato client e server, e consente di specificare certificati/chiavi personalizzati per diversi host intercettati.
ratched fornisce un supporto esteso per i certificati client e offre anche la falsificazione automatica per i certificati client (simile ai certificati server falsificati nell'altra direzione).
ratched supporta l'OCSP stapling e può automaticamente falsificare risposte OCSP positive quando un client invia un'estensione TLS di richiesta di stato.
Una volta che ratched è in ascolto sulla macchina di routing (nell'esempio, sulla porta 9999), aggiungi semplicemente una voce iptables che specifichi quale traffico vuoi catturare. Ad esempio, per intercettare tutto ciò che proviene da 192.168.1.7 e tenta di raggiungere la porta 443, usa:
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Per intercettare tutto ciò che va alla 443, basta fare:
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Se stai agendo come router e vuoi intercettare il traffico in entrata locale, usa il target DNAT invece di REDIRECT, come:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Qui, eth1 è l'interfaccia su cui stai intercettando il traffico e 192.168.123.1 è l'indirizzo IP dell'interfaccia locale.
La pagina di aiuto è abbastanza autoesplicativa:
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