
Ratched é um proxy TLS transparente Man-in-the-Middle destinado a testes de penetração.
ratched é um proxy Man-in-the-Middle (MitM) que intercepta especificamente conexões TLS. Destina-se a ser usado em conjunto com o alvo REDIRECT do iptables do Linux; todas as conexões que devem ser interceptadas podem ser redirecionadas para a porta local do ratched. Através do sockopt SO_ORIGINAL_DST, o ratched pode determinar o destino pretendido (antes da manipulação de pacotes do iptables) e tenta estabelecer uma conexão com o destino original.
O que o diferencia de outros softwares MitM é o seguinte:
O ratched não intercepta tráfego indiscriminadamente. Em particular, ele primeiro aguarda o cliente TLS enviar seu ClientHello para que o ratched possa analisá-lo e decidir pela extensão TLS Server Name Indication (SNI) se o destino deve ser interceptado ou não. Isso é particularmente útil quando você tem hospedagem virtual, mas só deseja interceptar conexões para um hostname específico.
O ratched não se destina apenas a capturar senhas, mas principalmente a despejar o tráfego em um arquivo PCAPNG. O formato de arquivo PCAPNG foi escolhido porque permite a anotação de conexões com comentários (em particular, qual hostname foi indicado na extensão SNI) e também permite que informações de resolução de nomes sejam incorporadas no arquivo de captura (novamente, para mapear o endereço IP de destino para o hostname da extensão SNI)
O ratched tem configuração individual para cada SNI interceptado, incluindo grupos suportados (anteriormente conhecidos como "curvas elípticas suportadas"), conjuntos de cifras e versões TLS específicas no lado do cliente e servidor, e permite especificar certificados/chaves personalizados para diferentes hosts interceptados.
O ratched fornece suporte extensivo para certificados de cliente e também oferece forjamento automático para certificados de cliente (semelhante a certificados de servidor forjados na outra direção).
O ratched suporta OCSP stapling e pode forjar automaticamente respostas OCSP positivas quando um cliente envia uma extensão TLS de solicitação de status.
Uma vez que o ratched esteja ouvindo na máquina de roteamento (no exemplo, na porta 9999), basta adicionar uma entrada no iptables que especifique qual tráfego você deseja capturar. Por exemplo, para interceptar tudo de 192.168.1.7 que tenta alcançar a porta 443, use:
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Para interceptar tudo que vai para a porta 443, simplesmente faça:
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Se você está atuando como roteador e deseja interceptar tráfego local de entrada, use o alvo DNAT em vez de REDIRECT, como:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Aqui, eth1 é a interface onde você está interceptando o tráfego e 192.168.123.1 é o endereço IP da interface local.
A página de ajuda deve ser bastante autoexplicativa:
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