
Ratched es un proxy TLS transparente de tipo Man-in-the-Middle diseñado para pruebas de penetración.
ratched es un proxy de tipo Man-in-the-Middle (MitM) que intercepta específicamente conexiones TLS. Está diseñado para utilizarse junto con el objetivo REDIRECT de iptables de Linux; todas las conexiones que deban interceptarse pueden redirigirse al puerto local de ratched. A través de la opción de socket SO_ORIGINAL_DST, ratched puede determinar el destino previsto (antes de la manipulación de paquetes de iptables) e intenta establecer una conexión con el destino original.
Lo que diferencia a ratched de otro software MitM es lo siguiente:
ratched no intercepta el tráfico indiscriminadamente. En particular, primero espera a que el cliente TLS envíe su ClientHello para que ratched pueda analizarlo y decidir, mediante la extensión de Indicación del Nombre del Servidor (SNI) de TLS, si se debe interceptar el destino o no. Esto es especialmente útil cuando se tiene alojamiento virtual, pero solo se desea interceptar conexiones a un nombre de host específico.
ratched no está diseñado únicamente para espiar contraseñas, sino que principalmente vuelca el tráfico en un archivo PCAPNG. Se eligió el formato de archivo PCAPNG porque permite anotar las conexiones con comentarios (en particular, qué nombre de host se indicó en la extensión SNI) y también permite incrustar información de resolución de nombres en el archivo de captura (nuevamente, para mapear la dirección IP de destino al nombre de host de la extensión SNI).
ratched tiene configuración individual para cada SNI interceptado, incluyendo grupos soportados (anteriormente conocidos como 'curvas elípticas soportadas'), suites de cifrado y versiones TLS específicas en el lado del cliente y del servidor, y permite especificar certificados/llaves personalizados para diferentes hosts interceptados.
ratched proporciona soporte extenso para certificados de cliente y también ofrece falsificación automática de certificados de cliente (similar a los certificados de servidor falsificados en la otra dirección).
ratched soporta el anillado OCSP (OCSP stapling) y puede falsificar automáticamente respuestas OCSP positivas cuando un cliente envía una extensión de solicitud de estado TLS.
Una vez que ratched está escuchando en la máquina de enrutamiento (en el ejemplo, en el puerto 9999), simplemente agregue una entrada de iptables que especifique qué tráfico desea capturar. Por ejemplo, para interceptar todo desde 192.168.1.7 que intente llegar al puerto 443, use:
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Para interceptar todo lo que vaya al puerto 443, simplemente haga:
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Si actúa como enrutador y desea interceptar tráfico entrante local, use el objetivo DNAT en lugar de REDIRECT, como:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Aquí, eth1 es la interfaz en la que está interceptando tráfico y 192.168.123.1 es la dirección IP de la interfaz local.
La página de ayuda debería 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