我刚刚意识到 SSL 中间人攻击比我想象的要普遍得多,尤其是在企业环境中。我听说并看到自己有几家拥有透明 SSL 代理服务器的企业。所有客户端都配置为信任此代理的证书。这基本上意味着雇主理论上可以拦截 SSL 加密的流量,而浏览器中不会弹出任何警告。如上所述,客户端带有受信任的证书。这只能通过手动验证正在使用的证书来揭示。
在我看来,雇主似乎利用其优越地位来监视员工的 SSL 流量。对我来说,这使得 SSL 的整个概念变得不可信。我自己使用 mitmproxy 成功测试了类似的设置,并且能够读取客户端和我的电子银行服务器之间的通信。这是不应该向任何人透露的信息。
因此,我的问题很简单:如何在服务器端验证信任链?我想确保客户端使用我服务器的证书和只有一个信任链。我想知道这是否可以通过Apache的SSL配置来实现?这将很方便,因为它可以轻松应用于许多应用程序。如果这是不可能的,有没有人知道在 PHP 中执行此操作的方法?或者您有其他建议吗?
我希望通过拦截 HTTPS 流量对在各种设备上运行的产品进行漏洞研究,但除了安装自定义 cert 之外,我不想修改设备。
似乎SSLsplit做了我想要的,因为它允许“通过网络地址转换引擎透明地拦截连接并重定向到 SSLsplit ”。据我了解,这些 NAT 规则不必在运行 MITM-ed 应用程序的设备上定义,我可以自定义iptables以在运行Fruity Wifi或OpenWRT的设备上通过SSLsplit重定向路由器流量。
带有修改过的 iptables 规则的SSLsplit是否足够并且是解决此问题的合理方法,或者我是否还必须修改 Linux 网络系统的其他部分?
注意:我正在尝试构建的系统要求设备将证书安装到受信任的根存储中,以“选择加入”此拦截。我并不是要构建一个系统来拦截来自不情愿设备的任意流量。
我已经设置了一个网桥,并希望将穿过它的 HTTP/HTTPS 流量重定向到本地端口 (8080),以便我可以使用 mitmproxy 进一步处理它。
到目前为止,我使用的是 ebtables 和 iptables 规则的组合。不幸的是,我不得不知道 eatables 不再支持表 'brute',我应该使用nftables代替。
使用的软件:
我如何创建这座桥:
root@kali:~# ip link add name br0 type bridge
root@kali:~# ip link set dev br0 up
root@kali:~# ip link set dev eth0 master br0
root@kali:~# ip link set dev eth2 master br0
Run Code Online (Sandbox Code Playgroud)
我的界面:
root@kali:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.178.67 netmask 255.255.255.0 broadcast 192.168.178.255
ether 00:01:c0:1b:4b:31 txqueuelen 1000 (Ethernet)
root@kali:~# ifconfig eth2
eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu …
Run Code Online (Sandbox Code Playgroud)