
Ratched — это прозрачный TLS-прокси типа «человек посередине» (Man-in-the-Middle), предназначенный для тестирования на проникновение.
ratched — это прокси-сервер «человек посередине» (MitM), который специально перехватывает TLS-соединения. Он предназначен для использования совместно с целью REDIRECT в iptables Linux; все соединения, которые должны быть перехвачены, можно перенаправить на локальный порт ratched. Используя сокет SO_ORIGINAL_DST, ratched может определить реальный пункт назначения (до манипуляции пакетами iptables) и пытается установить соединение с исходным адресатом.
Отличие от другого MitM-программного обеспечения заключается в следующем:
ratched не перехватывает трафик без разбора. В частности, он сначала ждет, пока TLS-клиент отправит свой ClientHello, чтобы ratched мог его проанализировать и на основе расширения TLS Server Name Indication (SNI) решить, следует ли перехватывать адресата. Это особенно полезно при виртуальном хостинге, когда нужно перехватывать соединения только к определённому имени хоста.
ratched предназначен не только для перехвата паролей, но в первую очередь для сохранения трафика в файл PCAPNG. Формат PCAPNG был выбран потому, что позволяет аннотировать соединения комментариями (в частности, какое имя хоста было указано в расширении SNI), а также встраивать информацию о разрешении имён в файл захвата (опять же, для сопоставления IP-адреса назначения с именем хоста из расширения SNI).
ratched имеет отдельную конфигурацию для каждого перехваченного SNI, включая поддерживаемые группы (ранее известные как «поддерживаемые эллиптические кривые»), наборы шифров и конкретные версии TLS на стороне клиента и сервера, и позволяет задавать пользовательские сертификаты/ключи для разных перехваченных хостов.
ratched предоставляет расширенную поддержку клиентских сертификатов, а также предлагает автоматическую подделку клиентских сертификатов (аналогично поддельным сертификатам сервера в обратном направлении).
ratched поддерживает OCSP-скрепление (stapling) и может автоматически подделывать положительные OCSP-ответы, когда клиент отправляет расширение запроса статуса TLS.
После того как ratched прослушивает порт на маршрутизирующем устройстве (в примере — порт 9999), просто добавьте запись iptables, указывающую, какой трафик вы хотите захватывать. Например, чтобы перехватывать всё с 192.168.1.7, что пытается достичь порта 443, используйте:
# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.7 --dport 443 -j REDIRECT --to-ports 9999
Для перехвата всего, что направляется на порт 443, просто выполните:
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9999
Если вы действуете как маршрутизатор и хотите перехватывать локально входящий трафик, используйте цель DNAT вместо REDIRECT, например:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to 192.168.123.1:9999
Здесь eth1 — это интерфейс, на котором вы перехватываете трафик, а 192.168.123.1 — локальный IP-адрес интерфейса.
Справка должна быть достаточно понятной:
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