Я собираюсь провести исследование уязвимостей продуктов, работающих на различных устройствах, перехватывая их HTTPS-трафик, но я не хочу изменять устройства. помимо установки специального сертификата.
Похоже на то SSLsplit делает то, что я хочу, поскольку это позволяет "соединения [будут] прозрачно перехвачены через механизм трансляции сетевых адресов и перенаправлены на SSLsplit". Насколько я понимаю, эти правила NAT необязательно определять на устройстве, на котором выполняется приложение, редактируемое MITM, и я могу настроить iptables перенаправить трафик маршрутизатора через SSLsplit на устройстве, работающем Фруктовый Wi-Fi или OpenWRT.
Является SSLsplit с измененными правилами iptables, достаточными и разумным способом сделать это, или мне придется изменить и другие части сетевой системы Linux?
НОТА : Система, которую я пытаюсь построить, требует, чтобы на устройствах был установлен сертификат в доверенное корневое хранилище, чтобы «согласиться» на этот перехват. Я не пытаюсь создать систему для перехвата произвольного трафика с нежелательных устройств.
Короче говоря, да, это может быть правильный инструмент, но на самом деле это не имеет никакого значения, если вы используете SSLStrip, SSLSplit, митмпрокси или любой другой инструмент, который может сделать вашу работу, вам следует остерегаться только того, как он работает.
Как упоминал @Quantim, это невозможно без установки / наличия настраиваемого сертификата / CA на устройстве за маршрутизатором, поскольку ему требуется настраиваемый CA, чтобы действовать как человек-посередине для соединений SSL, и он должен иметь возможность генерировать и подписать сертификаты о том, что потерпевший трасты. Таким образом, жертва должна иметь сертификат корневого ЦС злоумышленника в своем хранилище доверенных сертификатов. Объяснение того, как работают центры сертификации и как вы можете достичь желаемого результата с помощью упомянутых инструментов, выходит за рамки этого ответа, но в зависимости от типа клиента - настольного браузера или мобильного телефона - вы должны отметить, что установка корневых сертификатов немного отличается.
SSLsplit работает очень похоже на другие инструменты прозрачного SSL-прокси, такие как mitmproxy, который имеет больше функций и является более сложным. Он действует как посредник между клиентом и реальным сервером. При условии, что трафик перенаправляется на сервер, на котором работает SSLsplit и его прослушивает изменение шлюза по умолчанию, Подмена ARP, подделка записей DNS или любым другим способом. Другими словами, как вы, возможно, догадались, SSLsplit выбирает SSL-соединения таким образом, чтобы притворяться фактическим сервером, к которому клиент подключается и с которым он желает общаться. Фактически, он динамически генерирует сертификат и подписывает его закрытым ключом сертификата CA, которому клиент должен доверять.
Итак, чтобы ответить на ваш вопрос "Подходит ли SSLsplit для перехвата и повторного шифрования трафика HTTPS на маршрутизаторе Wi-Fi?«Да, может быть, но достаточно ли у вас знаний для этого? Если да, то иди и сорви джекпот своим исследованием.
И ответить "Достаточно ли SSLsplit с измененными правилами iptables и разумно ли это сделать, или мне придется также изменить другие части сетевой системы Linux?", Я должен сказать, что если вы правильно настроили наборы правил IPTables и правила NAT / DNAT, и если ваши клиенты могут считать сертификат CA надежным, да, этого будет достаточно - с измененными наборами правил iptables и перенаправлением клиентский трафик на сервер, на котором вы собираетесь перехватывать клиентский трафик, как упоминалось ранее. Кстати, вы должны отметить, что слово "прозрачный"в вычислительных средствах" (процесса или интерфейса) функционируют без ведома пользователя о его присутствии.
Выдержка из оригинальной документации:
SSLsplit поддерживает соединения TCP, SSL, HTTP и HTTPS как по IPv4, так и по IPv6. Для соединений SSL и HTTPS, SSLsplit генерирует и подписывает поддельные сертификаты X509v3 на лету, на основе исходного DN субъекта сертификата сервера и subjectAltName расширение. SSLsplit полностью поддерживает указание имени сервера (SNI) и может работать с ключами RSA, DSA и ECDSA, а также с наборами шифров DHE и ECDHE. В зависимости от версии OpenSSL SSLsplit поддерживает SSL 3.0, TLS 1.0, TLS 1.1 и TLS 1.2, а также, необязательно, SSL 2.0. SSLsplit также может использовать существующие сертификаты, закрытый ключ которых доступен, вместо создания поддельных.. SSLsplit поддерживает сертификаты CN с нулевым префиксом и может отклонять запросы OCSP обычным способом. Для соединений HTTP и HTTPS, SSLsplit удаляет заголовки ответа для HPKP, чтобы предотвратить закрепление открытого ключа, для HSTS, чтобы пользователь мог принимать ненадежные сертификатыи альтернативные протоколы для предотвращения переключения на QUIC / SPDY. В качестве экспериментальной функции SSLsplit поддерживает механизмы STARTTLS в общем виде.
Поскольку OP должен знать, как перенаправлять запросы на SSLsplit, но не хочет настраивать прокси, как упоминалось в комментариях, я собираюсь дать краткое представление об этом, и я надеюсь, что это поможет:
Scenario 1 : If SSLsplit is on the OpenWRT which you are using - i.e. if SSLsplit is set on the GateWay which victims (clients) are connecting to :
|
VICTIMS | ATTACKER
|
+-------~+ | (GATEWAY) If SSLsplit is set on the Gateway users are gonna connect to, you only need to redirect some ports to those SSLsplit is listening on
| | | SSLsplit will be running on two ports: 8080 for non-SSL TCP connections and 8443 for SSL connections.
| | ---> |
| | | sysctl -w net.ipv4.ip_forward=1
+~~~~~~~~+ | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
| \ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443 (HTTPS)
+-------~+ | \ +~~~~~~~~+ iptables -t nat -A PREROUTING -p tcp --dport 636 -j REDIRECT --to-ports 8443 (LDAPS)
| | | \ | | iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443 (MSA) Encryption = StartTLS
| | ---> | ===➤ | | iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443 (SMTPS) Encryption = SSL
| | | / | | iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443 (IMAPS) Encryption = StartTLS
+~~~~~~~~+ | / +~~~~~~~~+ iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080 (XMPP)
| / ...
+-------~+ |
| | |
| | ---> |
| | |
+~~~~~~~~+ |
|
|
Scenario 2 : AND IF SSLsplit is not set on the GateWay whic clients are connecting to - You will be in need of setting DNAT as the following :
VICTIMS | GATEWAY
|
+-------~+ |
| | |
| | ---> | IPTables will be like this :
| | |
+~~~~~~~~+ | SSLsplit iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination z.z.z.z:8443
| \ iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination z.z.z.z:8443
+-------~+ | \ +~~~~~~~~+ +~~~~~~~~+ ...
| | | \ | | | |
| | ---> | ===➤ | | ---------> | | In this scenario, all packets arriving on the router with a destination of x.x.x.x/CIDR will
| | | / | | | | depart from the router with a destination of z.z.z.z
+~~~~~~~~+ | / +~~~~~~~~+ +~~~~~~~~+
| /
+-------~+ | Redirects desired connection from somewhere
| | | to somewhere else to desired ports.
| | ---> |
| | |
+~~~~~~~~+ |
|
|
Обратите внимание на установку значения net.ipv4.ip_forward
до 1. Команда, которую я использовал выше, используя sysctl -w
не является постоянным. Если вы хотите установить его навсегда, вам следует отредактировать файл /etc/sysctl.conf
где вы можете добавить строку, содержащую net.ipv4.ip_forward = 1
.
По умолчанию в большинстве дистрибутивов Linux переадресация IP отключена. И ИМХО, это хорошая идея, поскольку большинству людей она не понадобится, но, поскольку вы настраиваете маршрутизатор / шлюз Linux - полезный для VPN-сервера (pptp или ipsec) - вам необходимо включить пересылку. Это можно сделать несколькими способами, как я вам уже показал.
Здесь у вас есть две части: SSLsplit, который действует как клиенты веб-сервера, к которым подключаются, и NAT, который меняет адреса назначения в пакетах, чтобы перенаправить их на сервер SSLsplit.
NAT необходимо настроить на маршрутизаторе, который используют клиентские устройства, изменив адрес назначения пакетов с фактического сервера назначения на сервер SSLsplit.
Затем SSLsplit может выбрать соединение и выполнить свое дело: подключиться к внешнему хосту (доступно в рукопожатии TLS) и перенаправить ответ.
Итак, единственное, что с точки зрения сети - это то, что вам необходимо убедиться, что клиенты получают такие сетевые параметры, что их шлюз по умолчанию указывает на маршрутизатор, выполняющий NAT.
Это невозможно без установки специального сертификата / CA на устройстве за маршрутизатором. В противном случае вы сможете действовать как любой сетевой сервис. SSLsplit генерирует только собственный сертификат или использует тот, для которого вы предоставляете закрытый ключ
SSLsplit также может использовать существующие сертификаты, закрытый ключ которых доступен, вместо создания поддельных. SSLsplit поддерживает сертификаты CN с нулевым префиксом и может отклонять запросы OCSP обычным способом.
В обоих случаях клиент без вашего настраиваемого сертификата / CA получает неверную ошибку эмитента сертификата.
Прозрачный перехват означает, что вам не нужно указывать каждый хост, который вы хотите перехватить и который может перехватывать весь трафик, но это все еще атака MitM на SSL.