SSLsplit是一个正确的工具,可以拦截和重新encryption无线路由器上的HTTPSstream量吗?

我希望通过拦截他们的HTTPSstream量来对运行在各种设备上的产品进行漏洞研究,但是我不想修改设备, 除了安装自定义的证书

看起来SSLsplit是我想要的,因为它允许“ 通过networking地址转换引擎透明地截取连接并redirect到SSLsplit ”。 据我所知,这些NAT规则不必定义在正在运行中间人应用程序的设备上,我可以定制iptables来通过运行Fruity WifiOpenWRT的设备上的SSLsplitredirect路由器stream量。

SSLsplit修改后的iptables规则是否足够,还有一个合理的方法可以解决这个问题,还是我还需要修改Linuxnetworking系统的其他部分呢?

注:我正在尝试构build的系统要求设备将证书安装到受信任的根存储中以“join”此截取。 我不是想要build立一个系统来拦截不愿意的设备的任意stream量。

这里有两个部分:用作Web服务器客户端的SSLsplit正在连接到NAT,NAT将数据包中的目标地址交换出来以将其redirect到SSLsplit服务器。

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

然后SSLsplit可以拿起连接并做它的事情:连接到外部主机(在TLS握手中可用)并转发响应。

所以,从networking的angular度来看,唯一需要确保客户端能够获得这样的networking选项,以使其默认网关指向执行NAT的路由器。

总之,是的,它可以是正确的工具,但实际上,如果您使用SSLStripSSLSplitmitmproxy或任何其他可以执行您的工作的工具,则不会出现任何问题,您只能小心它的工作方式。

正如@Quantim所提到的,这是不可能的,因为它需要自定义CA充当SSL连接的中间人,并且需要能够生成和签署受害者信任的证书。 因此,受害者必须在其信任存储中拥有攻击者的根CA证书。 解释CA如何工作以及如何使用所提到的工具获得理想的结果不在本答案的范围内,但根据客户端types(桌面浏览器或移动电话)的不同,您应该注意安装根证书有点不同。

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

所以要回答你的问题:“ SSLsplit是一个正确的工具,可以拦截和重新encryption无线路由器上的HTTPSstream量? ”,是的,可以,但是你知道吗? 如果是这样,去你的研究打大奖。

而且要回答“ SSLsplit修改了iptables规则是否足够,还有一个合理的方法来解决这个问题,或者我还需要修改Linuxnetworking系统的其他部分, ”我应该说,如果你已经正确configuration了IPTables规则集和NAT / DNAT规则,如果你的客户可以认为CA证书是可信的,那么这样就足够了 – 通过修改iptables规则集并将客户端的stream量redirect到你要截取客户端的服务器就像前面提到的那样。 顺便说一下,您需要注意的是,计算方式(过程或界面)中的“ 透明 ”一词在用户没有意识到其存在的情况下运行。

摘自原文档:

SSLsplit支持IPv4和IPv6上的纯TCP,纯SSL,HTTP和HTTPS连接。 对于SSL和HTTPS连接, SSLsplit 基于原始服务器证书主题DN和subjectAltName扩展名即时生成并签署伪造的X509v3证书 。 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的备用协议。 作为一个实验性function,SSLsplit以通用的方式支持STARTTLS机制。


redirect

由于OP需要知道如何将请求redirect到SSLsplit,但不想build立一个代理 – 正如评论中所提到的那样 – 我将快速了解如何做到这一点,我希望这将有助于:

Scenario 1 : If SSLsplit is on the OpenWRT which you are using - ie 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 xxxx/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination zzzz:8443 | \ iptables -t nat -A PREROUTING -d xxxx/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination zzzz:8443 +-------~+ | \ +~~~~~~~~+ +~~~~~~~~+ ... | | | \ | | | | | | ---> | ===➤ | | ---------> | | In this scenario, all packets arriving on the router with a destination of xxxx/CIDR will | | | / | | | | depart from the router with a destination of zzzz +~~~~~~~~+ | / +~~~~~~~~+ +~~~~~~~~+ | / +-------~+ | 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转发。 恕我直言,这是一个好主意,因为大多数人不需要使用它,但是由于你正在build立一个Linux路由器/网关 – 对VPN服务器(pptp或ipsec)有用 – 你需要启用转发。 这可以通过几种方式来完成,正如我已经向您展示的那样。

没有在路由器后面的设备上安装自定义的证书/ CA,这是不可能的。 在其他情况下,您将可以作为任何networking服务。 SSLsplit只生成自己的证书或使用您提供私钥的证书

SSLsplit还可以使用私钥可用的现有证书,而不是生成伪造的证书。 SSLsplit支持NULL前缀CN证书,并可以通用的方式拒绝OCSP请求

资源

在这两种情况下,没有您的自定义证书/ CA的客户端都会收到无效的证书颁发者错

透明的拦截手段,你不需要指定每个你想拦截的主机,并且可以拦截所有的stream量,但是这仍然是MitM对SSL的攻击