SSLsplit 是拦截和重新加密 wifi 路由器上的 HTTPS 流量的正确工具吗?

And*_*rov 7 https openwrt mitmproxy

我希望通过拦截 HTTPS 流量对在各种设备上运行的产品进行漏洞研究,但除了安装自定义 cert 之外,我不想修改设备。

似乎SSLsplit做了我想要的,因为它允许“通过网络地址转换引擎透明地拦截连接并重定向到 SSLsplit ”。据我了解,这些 NAT 规则不必在运行 MITM-ed 应用程序的设备上定义,我可以自定义iptables以在运行Fruity WifiOpenWRT的设备上通过SSLsplit重定向路由器流量。

带有修改过的 iptables 规则的SSLsplit是否足够并且是解决此问题的合理方法,或者我是否还必须修改 Linux 网络系统的其他部分?

注意:我正在尝试构建的系统要求设备将证书安装到受信任的根存储中,以“选择加入”此拦截。我并不是要构建一个系统来拦截来自不情愿设备的任意流量。

小智 5

简而言之,是的,它可以是正确的工具,但实际上,如果您使用SSLStripSSLSplitmitmproxy或任何其他可以完成您的工作的工具,您应该只注意它的工作方式。

正如@Quantim 提到的,如果不在路由器后面的设备中安装/拥有自定义证书/CA,这是不可能的,因为它需要自定义 CA 作为 SSL 连接的中间人,并且它需要能够生成和签署受害者信任的证书。因此,受害者必须在其信任库中拥有攻击者的根 CA 证书。解释 CA 如何工作以及如何使用上述工具实现理想结果超出了本答案的范围,但根据客户端的类型 - 桌面浏览器或移动电话 - 您应该注意安装根证书略有不同。

SSLsplit 的工作方式与其他透明 SSL 代理工具非常相似——例如 mitmproxy,它具有更多功能且更复杂。它充当客户端和实际服务器之间的中间人。假设通过更改默认网关ARP 欺骗伪造 DNS 条目或任何其他方式将流量重定向到 SSLsplit 正在运行和侦听的服务器。换句话说,正如您可能已经猜到的那样,SSLsplit 以一种伪装成客户端正在连接并愿意与之通信的实际服务器的方式获取 SSL 连接。事实上,它动态生成一个证书,并使用客户端必须——将要——信任的 CA 证书的私钥对其进行签名。

因此,要回答您的问题“ SSLsplit 是在 wifi 路由器上拦截和重新加密 HTTPS 流量的正确工具吗? ”,是的,它可以,但您知道这样做吗?如果是这样,那就去通过你的研究中大奖吧。

并回答“使用修改过的 iptables 规则的 SSLsplit 是否足够并且是解决此问题的合理方法,或者我是否还必须修改 Linux 网络系统的其他部分? ”,我应该说,如果您正确配置了 IPTables规则集和 NAT/DNAT 规则,如果您的客户端可以将 CA 证书视为可信,是的,这就足够了 - 使用修改后的 iptables 规则集并将客户端的流量重定向到服务器,您将拦截客户端' 交通,如前所述。顺便说一下,您需要注意计算中的“透明”一词意味着(进程或界面的)在用户不知道其存在的情况下运行。

摘自原始文档:

SSLsplit 支持通过 IPv4 和 IPv6 的普通 TCP、普通 SSL、HTTP 和 HTTPS 连接。对于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 支持 NULL 前缀 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.
        |        | ---> |
        |        |      |
        +~~~~~~~~+      |
                        |
                        |
Run Code Online (Sandbox Code Playgroud)

注意设置net.ipv4.ip_forward为1的值。我上面使用的命令sysctl -w是不是永久的。如果你想永久设置它,你应该编辑文件/etc/sysctl.conf,你可以在其中添加一行包含net.ipv4.ip_forward = 1.

默认情况下,大多数 Linux 发行版都会禁用 IP 转发。恕我直言,这是一个好主意,因为大多数人不需要使用它,但是由于您正在设置 Linux 路由器/网关 - 对 VPN 服务器(pptp 或 ipsec)也很有用 - 您需要启用转发。这可以通过多种方式完成,正如我向您展示的那样。

  • 客户端应忽略该错误并接受通过您的自签名证书进行访问的风险,否则您将需要具有物理访问权限来安装 CA 证书。如果您可以拥有所有这些,则可以在客户端和实际服务器之间进行操作,不需要其他任何东西。 (2认同)

Ter*_*nen 2

这里有两个部分:SSLsplit 充当客户端连接的 Web 服务器,NAT 交换数据包中的目标地址以将它们重定向到 SSLsplit 服务器。

需要在客户端设备使用的路由器上设置 NAT,将数据包的目标地址从实际目标服务器更改为 SSLsplit 服务器。

然后 SSLsplit 可以获取连接并执行其操作:连接到外部主机(在 TLS 握手中可用)并转发响应。

因此,从网络角度来看,唯一的事情是您需要确保客户端获得这样的网络选项,使其默认网关指向执行 NAT 的路由器。