我希望通过拦截其 HTTPS 流量来对在各种设备上运行的产品进行漏洞研究,但除了安装自定义证书之外,我不想修改这些设备。
似乎SSLsplit做了我想要的,因为它允许“通过网络地址转换引擎透明地拦截连接并重定向到 SSLsplit ”。据我了解,这些 NAT 规则不必在运行 MITM-ed 应用程序的设备上定义,我可以自定义iptables以通过运行Fruity Wifi或OpenWRT的设备上的SSLsplit重定向路由器流量。
SSLsplit与修改后的 iptables 规则是否足够和合理的方式来解决这个问题,或者我是否也必须修改 Linux 网络系统的其他部分?
注意:我正在尝试构建的系统要求设备将证书安装到受信任的根存储以“选择加入”此拦截。我不是想建立一个系统来拦截来自不情愿的设备的任意流量。
简而言之,是的,它可以是正确的工具,但事实上,如果您使用SSLStrip、SSLSplit、mitmproxy或任何其他可以完成您工作的工具,您应该只注意它的工作方式。
正如@Quantim 提到的,如果不在路由器后面的设备中安装/拥有自定义证书/CA,这是不可能的,因为它需要自定义 CA 充当 SSL 连接的中间人,并且它需要能够生成和签署受害者信任的证书。因此,受害者必须在其信任库中拥有攻击者的根 CA 证书。解释 CA 的工作原理以及如何使用上述工具实现所需的结果超出了此答案的范围,但取决于客户端的类型 - 桌面浏览器或手机 - 您应该注意安装根证书会有所不同。
SSLsplit 的工作方式与其他透明 SSL 代理工具非常相似 - 例如 mitmproxy,它具有更多功能且更复杂。它充当客户端和实际服务器之间的中间人。前提是流量被重定向到运行 SSLsplit 的服务器并通过更改默认网关、ARP 欺骗、伪造 DNS 条目或任何其他方式进行侦听。换句话说,正如您可能已经猜到的那样,SSLsplit 以一种伪装成客户端正在连接并愿意与之通信的实际服务器的方式获取 SSL 连接。事实上,它动态生成一个证书,并使用客户端必须 - 将要 - 信任的 CA 证书的私钥对其进行签名。
因此,要回答您的问题“ SSLsplit 是拦截和重新加密 wifi 路由器上的 HTTPS 流量的正确工具吗? ”,是的,可以,但您是否足够了解这样做?如果是这样,请通过您的研究去赢得大奖。
并回答“带有修改的 iptables 规则的 SSLsplit 是否足够且合理的方式来解决这个问题,或者我是否也必须修改 Linux 网络系统的其他部分? ”,我应该说,如果你已经正确配置了你的 IPTables规则集和 NAT/DNAT 规则,如果您的客户端可以将 CA 证书视为受信任的,是的,这就足够了 - 使用修改后的 iptables 规则集并将客户端的流量重定向到您要拦截客户端的服务器' 交通,如前所述。顺便说一句,您需要注意计算中的“透明”一词意味着(进程或接口)在用户不知道其存在的情况下运行。
原始文档的摘录:
重定向
由于 OP 需要知道如何将请求重定向到 SSLsplit 但不想设置代理 - 如评论中所述 - 我将快速了解这样做,我希望它会有所帮助:
注意将 的值设置
net.ipv4.ip_forward
为 1。我上面使用的命令 usingsysctl -w
不是永久的。如果你想永久设置它,你应该编辑文件/etc/sysctl.conf
,你可以在其中添加一行包含net.ipv4.ip_forward = 1
.默认情况下,大多数 Linux 发行版都将禁用 IP 转发。恕我直言,这是一个好主意,因为大多数人不需要使用它,但是由于您正在设置 Linux 路由器/网关 - 对 VPN 服务器(pptp 或 ipsec)也很有用 - 您需要启用转发。正如我向您展示的那样,这可以通过多种方式完成。
如果不在路由器后面的设备上安装自定义证书/CA,这是不可能的。在其他情况下,您将能够充当任何网络服务。SSLsplit 仅生成自己的证书或使用您提供私钥的证书
资源
在这两种情况下,没有您的自定义证书/CA 的客户端都会收到无效的证书颁发者错误
透明拦截意味着,您不需要指定要拦截的每个主机并且可以拦截所有流量,但这仍然是 SSL 上的 MitM 攻击
这里有两个部分:作为客户端连接的 Web 服务器的 SSLsplit,以及交换数据包中的目标地址以将它们重定向到 SSLsplit 服务器的 NAT。
需要在客户端设备使用的路由器上设置 NAT,将数据包的目标地址从实际目标服务器更改为 SSLsplit 服务器。
然后 SSLsplit 可以获取连接并做它的事情:连接到外部主机(在 TLS 握手中可用)并转发响应。
因此,从网络角度来看,唯一的事情是您需要确保客户端获得这样的网络选项,即它们的默认网关指向执行 NAT 的路由器。