假设我要将 Wireshark 跟踪上传到可公开访问的网站。比如说,有了它,SSL 密钥日志、证书信息等就可用了。如果有人知道这个踪迹的链接,会有什么危险?
显然,给定跟踪会话的内容和信息对每个人都是可见的,那么过去或将来发生的会话呢?与其他客户端或其他服务器发生的会话呢?我是否会面临重放攻击或中间人攻击之类的危险?
假设我要将 Wireshark 跟踪上传到可公开访问的网站。比如说,有了它,SSL 密钥日志、证书信息等就可用了。如果有人知道这个踪迹的链接,会有什么危险?
显然,给定跟踪会话的内容和信息对每个人都是可见的,那么过去或将来发生的会话呢?与其他客户端或其他服务器发生的会话呢?我是否会面临重放攻击或中间人攻击之类的危险?
如果wireshark 跟踪是从被动窃听者的角度进行的,那么跟踪中没有任何内容可用于篡改未来的SSL/TLS 连接。
请记住,有许多实体可以进行与您所做的相同的跟踪,包括无线热点运营商、ISP、骨干运营商、数据中心等。如果有可能使用以下方式篡改未来的 SSL/TLS 连接你所做的跟踪,那么这些实体中的任何一个都可以做同样的事情。SSL/TLS 专门设计用于抵抗这种类型的篡改。
即使您在客户端运行跟踪,并将会话信息记录到 SSLKEYLOGFILE,此文件中的信息也不会用于篡改未来的 SSL/TLS 连接,因为此文件仅包含临时密钥和仅用于进行跟踪时的会话。
如果某人只能访问数据包捕获,而没有其他密钥材料,那么他们显然能够看到未加密的数据,例如 TLS 1.2 中的服务器名称 (SNI) 和服务器证书,但看不到加密数据。TLS 旨在防止第三方篡改会话并防止重放攻击。
SSLKEYLOGFILE 环境变量生成的文件通常存储每个会话的机密,并由端点(客户端或服务器)写入。它的格式记录在https://developer.mozilla.org/NSS_Key_Log_Format
对于TLS 1.3,记录的秘密将仅可用于该特定会话。这些秘密不能用于解密任何其他会话。这包括以前的会话、未来的会话以及与其他客户端或服务器的会话。原因是这些秘密来自完整的握手消息记录。握手中的任何更改(例如,不同的客户端随机或不同的服务器名称)都将导致不同的秘密。
对于TLS 1.2及更早版本,情况几乎相同。但是,有两个例外会破坏未来会话的安全性。
第二个问题很微妙,但非常重要。它已在 TLS 1.3 中得到解决,其中每个会话始终包含一个完整的密钥交换,从而使“恢复秘密”独立于将用于加密握手和应用程序数据的实际秘密。
说明 TLS 1.2 会话恢复问题的示例:
这里的问题是第 5 步最终可能会使用 TLS 1.2 会话恢复。看到您的网络流量(例如,在咖啡店的公共 Wi-Fi 网络中)的被动攻击者 (MitM) 将能够使用步骤 7 中的秘密来解密您在步骤 6 中的活动。他们可能会了解您的密码,并用它做可怕的事情。
故事的寓意:是的,与 SSLKEYLOGFILE 共享数据包捕获是安全的,但请确保它仅包含您不关心的会话的密钥。如果要创建共享跟踪,请使用虚拟机或使用单独的浏览配置文件。后者的示例可以在我关于使用 Wireshark 执行 TLS 解密的幻灯片的幻灯片 8 中找到: https ://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19eu.pdf
如果您不想启动新的浏览配置文件,您至少可以尝试清除缓存。这应该确保下一个新连接使用新的密钥。
尽管您在问题中提到了它,但为了完整起见,我将再次重复一遍:解密的跟踪可能会显示 cookie、URL、图片、网页内容以及您在捕获会话期间共享的任何其他详细信息。即使您停止本地捕获,其他人也可能会窃听并捕获现有连接中的所有内容。一旦您发布了这些秘密,他们就可以解密该连接中的所有内容。