在研究 SSL/TLS 握手和加密时,我发现了一种方法,该方法描述了如何将 SSL/TLS 会话密钥从 Firefox 导出到浏览器外部的用户或环境变量,然后使用 Wireshark 解密 TLS 数据包(方法描述于: https ://isc.sans.edu/forums/diary/Psst+Your+Browser+Knows+All+Your+Secrets/16415)。这种方法很容易做到——我能够解密与 HTTPS 站点的通信,包括登录凭据。
根据上面的链接和我自己的测试,这种方法只适用于 Firefox 和 Chrome;不是 Internet Explorer 或其他非浏览器 SSL 流量(有关 MSDN 建议,请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/aa387409%28v=vs.85%29.aspx,但它们本质上默认情况下不要以明文形式保存会话密钥)。该方法也在 Mozilla 开发网络 (MDN) 站点上进行了描述:https : //developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format以及信息安全交换,例如: 解密使用 DHE_RSA 密码套件时 Wireshark 中的 TLS)。
该方法确实需要访问系统设置来配置必要的环境变量,但仅此而已。Firefox 和 Chrome 都会自动查找该变量,如果找到,则开始将密钥记录到该位置。浏览器不会提醒用户或请求许可,Firefox 的 about:config 中似乎也没有办法关闭此日志记录。我意识到完全访问系统以设置变量可能会假定系统已经受到威胁,但保护级别似乎远低于其他安全信息。例如,系统访问不允许轻松访问 SAM 或 TPM 安全模块(当然还有其他方法可以访问,但不是点击即可)。
这种方法似乎允许第三方非常隐蔽地导出 SSL / TLS 会话密钥(它们每个只有 128 或 256 位),第三方可以从密钥导出中单独捕获网络流量,然后在闲暇时解密。尽管使用了任何“完美的前向保密”非对称密钥,这种解密仍可能发生,并且可以在事后很久重建浏览会话。任何其他有权访问您的 Windows 文件夹结构的程序也可以过滤密钥,而您永远不会知道。
为什么 Firefox 和 Chrome 允许这些会话密钥如此容易泄漏?我读到了一些猜测,认为这是一个调试功能,但为什么默认情况下它是打开的?请注意,其他浏览器不会泄露会话密钥。我应该担心这个吗?