Is SSLsplit the right tool to intercept and re-encrypt HTTPS traffic on a wifi router?

I'm looking to do a vulnerability research on products running on a variety of devices by intercepting their HTTPS traffic, but I don't want to modify the devices aside from installing a custom cert.

It seems SSLsplit does what I want, as it allows for "connections [to be] transparently intercepted through a network address translation engine and redirected to SSLsplit". From what I understand, these NAT rules don't have to be defined on the device that is running the application being MITM-ed, and I can customize iptables to redirect router traffic through SSLsplit on a device running Fruity Wifi or OpenWRT.

Is SSLsplit with modified iptables rules sufficient and a reasonable way to go about this, or would I have to modify other parts of the Linux networking system, as well?

NOTE : The system I am trying to build requires devices to have a cert installed to the trusted root store to "opt in" to this interception. I am not trying to build a system to intercept arbitrary traffic from unwilling devices.

7
задан 22 March 2017 в 16:16
3 ответа

У вас тут две части: SSLsplit, действующий в качестве веб-сервера, к которому подключаются клиенты, и NAT, который меняет адреса назначения в пакетах, чтобы перенаправить их на сервер SSLsplit.

NAT должна быть установлена на маршрутизаторе, который используют клиентские устройства, изменяя адрес назначения пакетов с фактического сервера назначения на сервер SSLsplit.

Тогда SSLsplit может принять соединение и сделать свое дело: подключиться к иностранному хосту (доступно при TLS рукопожатии) и перенаправить ответ.

Итак, единственное, что с точки зрения сети, это то, что вам нужно убедиться в том, что клиенты получают такие сетевые опции, что их основной шлюз указывает на маршрутизатор, выполняющий NAT.

.
2
ответ дан 2 December 2019 в 23:35

Это невозможно без установки пользовательского cert/CA на устройство за маршрутизатором. В другом случае вы сможете действовать как любая сетевая служба. SSLsplit генерирует только собственный сертификат или использует сертификат, для которого вы предоставляете закрытый ключ

SSLsplit также может использовать существующие сертификаты, для которых доступен закрытый ключ, вместо того, чтобы генерировать поддельные. SSLsplit поддерживает NULL-префиксные CN сертификаты и может отклонять запросы OCSP общим способом

Source

В обоих случаях, клиент без вашего пользовательского сертификата/CA получает ошибку недействительного эмитента сертификата

Прозрачный перехват означает, что вам не нужно указывать каждый узел, который вы хотите перехватить, и вы можете перехватить весь трафик, но это все равно MitM-атака на SSL

.
1
ответ дан 2 December 2019 в 23:35

Короче говоря, да, это может быть правильный инструмент, но на самом деле, если вы используете SSLStrip, SSLSplit, mitmproxy или любой другой инструмент, который может выполнять вашу работу, вы должны только остерегаться того, как он работает.

Как уже упоминал @Quantim, Это невозможно без установки/владения пользовательским сертификатом/ЦА в устройстве за маршрутизатором, поскольку ему нужен пользовательский ЦС, который будет действовать как человек в середине SSL-соединения, и он должен иметь возможность генерировать и подписывать сертификаты, которым жертва доверяет . Таким образом, жертва должна иметь сертификат корневого ЦС злоумышленника в своем хранилище трастов. Объяснение того, как ЦС работает и как вы можете достичь желаемого результата с помощью вышеупомянутых инструментов, выходит за рамки этого ответа, но в зависимости от типа клиента - браузер рабочего стола или мобильный телефон - вы должны заметить, что установка корневых сертификатов немного отличается.

SSLsplit работает довольно похоже на другие прозрачные инструменты SSL proxy - такие как mitmproxy, который имеет больше возможностей и сложнее. Он действует как "человек в середине" между клиентом и реальным сервером. При условии, что трафик перенаправляется на сервер, на котором запущен SSLsplit, и прослушивается , изменяя шлюз по умолчанию , ARP-спуфинг , подделка DNS-записей или любым другим способом. Другими словами, как вы, возможно, догадались, SSLsplit подхватывает SSL соединения таким образом, что выдает себя за действительный сервер, к которому подключается клиент и с которым он готов взаимодействовать. На самом деле, он динамически генерирует сертификат и подписывает его закрытым ключом сертификата ЦС, которому клиент должен - собирается - доверять.

Итак, чтобы ответить на ваш вопрос "Является ли SSLsplit правильным инструментом для перехвата и повторной зашифровки HTTPS трафика на беспроводном маршрутизаторе?", да, может быть, но достаточно ли вы знаете, чтобы сделать это? Если да, то идите и джекпот с вашими исследованиями

И отвечайте "Достаточно ли SSLsplit с измененными правилами iptables и разумный ли способ сделать это, или мне пришлось бы изменять и другие части сетевой системы Linux? ", должен сказать, что если вы правильно настроили наборы правил IPTables и правила NAT/DNAT, и если ваши клиенты могут считать CA cert доверенным, то да, этого будет достаточно - с измененными наборами правил iptables и перенаправлением клиентского трафика на сервер, на котором вы собираетесь перехватывать клиентский трафик, как уже упоминалось ранее. Кстати, следует отметить, что слово "transparent" в вычислительных средствах (процессе или интерфейсе) функционирует без ведома пользователя.

Выдержка из оригинальной документации :

SSLsplit поддерживает обычные TCP, обычные SSL, HTTP и HTTPS соединения. как по IPv4, так и по IPv6. Для соединений SSL и HTTPS, SSLsplit генерирует и подписывает поддельные сертификаты X509v3 "на лету" , на основе субъект сертификата оригинального сервера DN и subjectAltName. Расширение. SSLsplit полностью поддерживает указание имени сервера (Server Name Indication - 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 NULL-префиксные CN-сертификаты и могут отклонять OCSP-запросы в общих Путь. Для HTTP и HTTPS соединений, SSLsplit удаляет заголовки ответа для HPKP, чтобы предотвратить пинкирование открытого ключа, для HSTS, чтобы позволить пользователю принимать недоверенные сертификаты , и Альтернативные протоколы для предотвращения переключения на QUIC/SPDY. В качестве экспериментальной функции, SSLsplit поддерживает механизмы STARTTLS в общем виде.


Переадресация

Поскольку оператору необходимо знать, как перенаправлять запросы на 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-переадресация. И IMHO это хорошая идея, так как большинству людей она не понадобится, но так как вы настраиваете маршрутизатор/шлюз Linux - полезный и для VPN сервера (pptp или ipsec) - вам нужно включить переадресацию. Это можно сделать несколькими способами, как я вам уже показывал

.
5
ответ дан 2 December 2019 в 23:35

Теги

Похожие вопросы