part1
点击上方蓝字关注我们
往期推荐
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
1.摘要
TLS(传输层安全)协议通过加密数据来保护互联网通信的安全。然而,在某些条件下,TLS流量仍然可以被解密, 例如:攻击者拥有了服务器私钥或会话密钥或者攻击者成功执行了中间人攻击或泄漏了浏览器、客户端的记录会话密钥或错误配置和使用了不安全的协议版本等。一旦TLS流量被解密, 攻击者可以在Wireshark中分析解密的TLS流量, 防御者可以利用Suricata、Snort或Zeek等IDS来检测潜在的恶意TLS加密流量的应用层数据。以下探讨的三种场景包括:RSA私钥、TLS密钥日志和TLS代理。
2.RSA私钥
利用RSA私钥一直以来都是检查SSL和TLS流量的首选方法。这种方法允许任何有权访问服务器的RSA私钥的人解密流量并检查应用层通信。
RSA密钥交换的最大缺点是缺乏前向保密性。前向保密性意味着即使攻击者获得了服务器的私钥,也无法解密之前的会话。然而,使用RSA密钥交换时,如果攻击者获取了服务器的私钥,他们可以解密过去的所有捕获流量,只要这些流量使用了相同的私钥。
只有满足以下所有条件时, 才能执行RSA私钥解密:
-
协议版本为SSL 3.0、TLS 1.0、TLS 1.1或TLS 1.2(TLS 1.3中删除了RSA)。
-
服务器已选择使用RSA密钥交换的密码套件,如TLS_RSA_B_AES_256_GCM_SHA384、TLS_RSA_B_AES_128_GCM_SHA256、TLS_RSA_B_AES_256_CBC_SHA256、TLS_RSA_B_AES_128_CBC_SHA256、TLS_RSA_B_AES_256_CBC_SHA或TLS_RSA_B_AES_128_CBC_SHA
-
私钥与服务器证书匹配(无法使用客户端证书或中间证书或根证书解密通信)。
-
会话尚未恢复(握手必须包含客户端密钥交换消息)。
在Wireshark中的筛选器中可以检查服务器是否选择了RSA密码,如图:
可以使用以下命令来检查客户端密钥交换信息,如图:
通过单击“编辑”、“首选项”和“RSA密钥”,可以将RSA私有密钥加载到Wireshark中。另一种方法是使用命令行工具tshark的-ouat:rsa_keys开关, 如图:
3.TLS密钥日志
如果提供了用于建立加密连接的预主密钥(可参考:https://wiki.wireshark.org/TLS#using-the-pre-master-secret), Wireshark可以解密捕获的网络流量中的TLS层。这些秘密或加密密钥信息可以从SSLKEYLOGFILE加载到Wireshark中,方法是单击编辑->首选项->协议->TLS,并将(Pre)-Master-Secret日志文件名设置为SSLKEYLOGFILE的路径。如图:
另一种方法是将关键信息编码为pcap-ng文件中的元数据,并使用editcap, 如图:
TLS密钥日志解密方法的主要缺点是: 只有Wireshark和tshark可以用于分析解密的TLS流量。另一个问题是,只有来自导出密钥日志的应用程序的流量才能被解密。如果计划分析来自恶意软件的流量,特别是如果想将解密的流量发送到IDS或网络安全监控工具进行分析,TLS密钥日志方法将不适用。另一方面,如果你想在Wireshark中分析来自你自己的Firefox或Chrome浏览器的网络流量,那么TLS密钥日志方法可能是最好的解决方案。
4.TLS流量检查代理
TLS检查代理可以充当中间人,拦截和解密TLS流量,然后重新加密流量并将其转发到预期目的地。
使用TLS检查代理的一个主要优点是,即使应用程序使用具有前向保密性的现代密码并且不支持TLS密钥的日志记录,也可以从应用程序中分析解密的TLS流量。但是,缺点是客户端必须信任代理使用的根CA证书。
TLS检查代理通常在如何将解密的流量提供给外部工具方面有所不同。事实上,许多TLS检查代理和下一代防火墙仅将解密的有效负载提供给内部应用程序或设备。这种方法阻止了使用外部工具(如Wireshark、Snort、Suricata、Zeek或NetworkMiner)分析解密的流量。
另一种方法,例如像mitmproxy这样的代理使用,是为所有代理流量保存TLS密钥日志。这种方法允许使用Wireshark解密和检查往返于代理的捕获的TLS流量,但不能使用不支持使用密钥日志进行TLS解密的其他工具来检查应用层流量。
第三种也是最有利于集成的方法是以明文形式保存解密的流量,这样其他应用程序就可以检查未加密的流量,而不必解密TLS。一些TLS代理,如PolarProxy和SSLsplit,甚至可以将解密的流量保存到PCAP文件中。PCAP格式的解密TLS流量可以很容易地被其他工具捕获,或者被重放到网络接口,以供外部安全设备检查。
5.最佳方案总结
-
检查自己的浏览器流量方案: 使用TLS密钥日志检查来自Firefox、Chrome和curl的流量。对其他浏览器使用TLS检查代理。
-
检查自己的HTTPS网站的流量方案:如果可以接受使用较旧的TLS版本和安全性较低的密码,使用RSA私钥检查。如果Web服务器可以配置为导出TLS密钥日志,则使用TLS密钥日志。如果想用Wireshark以外的东西来检查流量,则使用TLS检查代理。
-
使用IDS或安全设备检查潜在的恶意TLS流量方案:使用TLS检查代理。
-
检查自己的操作系统流量: 使用TLS检查代理。
-
检查自己的手机、智能设备或其它嵌入式设备流量方案: 使用TLS检查代理。
-
检查来自游戏、应用程序或服务的流量方案:使用TLS检查代理。
参考地址:
https://www.netresec.com/?page=Blog&month=2024-08&post=How-to-Inspect-TLS-Encrypted-Traffic
往期推荐
点个在看你最好看
原文始发于微信公众号(二进制空间安全):三种不同场景解密TLS流量的方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论