使用 Wireshark 解密您自己的 HTTPS 流量

原文链接:https://www.trickster.dev/post/decrypting-your-own-https-traffic-with-wireshark/

在后斯诺登时代,HTTP 消息通常不会以明文形式发送。相反,TLS 协议用于提供通信安全,防止基于 HTTP 协议的通信被篡改和监视。TLS 本身是相当复杂的协议,由几个子协议组成,但让我们将其视为 TCP 连接之上的加密和身份验证层,它还通过公钥加密进行一些服务器(以及可选的客户端)验证。

在这篇博客中,我们之前讨论过设置 mitmproxy 来拦截移动应用程序与其后端系统之间的 HTTPS 通信。但是,我们可能还想看看桌面应用程序在交流什么。此外,我们可能希望更深入地对 Web 应用程序的私有 API 进行逆向工程,并希望超越 Chrome DevTools 的限制。这就是我们求助于Wireshark的地方——一个用于数据包嗅探和分析的 GUI 工具。我们可以使用此工具深入了解应用程序在网络上的具体操作。

但是,如果我们在没有任何准备的情况下尝试嗅探 HTTPS,我们将无法走得更远,因为 TLS 协议正在做的工作是防止对手通过嗅探网络来读取通信内容。

但是,如果我们控制其中一个端点(即带有 Web 浏览器的桌面系统),我们可以将 SSLKEYLOGFILE环境变量设置为我们可以访问的文本文件的路径。实现 TLS 的软件通常(尽管并非总是)会将密钥和其他 TLS 机密写入此文件。这适用于 curl、Chrome、Firefox 和许多使用 NSS/OpenSSL 库的桌面应用程序。如果配置正确,Wireshark 将能够读取此文件并解密截获的 TLS 数据包。这是会话密钥的客户端捕获。

我们究竟如何设置环境变量?这取决于操作系统以及我们是否要涵盖所有已安装的应用程序。在使用 Bash 的 Linux/Unix 上,我们可以简单地将以下行放入 ~/.bashrc 或 ~/.bash_profile 文件中:

但是,这仅涵盖直接从 shell 启动的程序。在 Linux 上,我们可以编辑 /etc/environment(或 /etc/profile)并重新启动以全局设置环境变量。

在 macOS 上,它有点复杂。首先,我们需要检查 ~/Library/LaunchAgents 目录是否存在,如果不存在,则在我们的普通用户下创建它。然后我们创建一个包含以下内容的属性列表文件(例如 tlskeylogger.plist):

要在下次重新启动时加载它,我们运行以下命令:

在 Windows 上,您可以SSLKEYLOGFILE通过 GUI 设置环境变量,方法是在 Windows 菜单中找到“Edit environment variables for your account”并为当前用户创建一个新的环境变量。

完成后,我们应该重新启动浏览器和/或其他通过 HTTPS 通信的软件。如果一切正常,文件应该开始填充类似于以下内容的行:

我们现在准备好配置 Wireshark。这相当简单。我们所要做的就是转到(编辑->)首选项-> 协议-> TLS 并将值SSLKEYLOGFILE放入“(预)主秘密日志文件名”。您还应该勾选有关重新组装 TLS 记录和应用程序数据的复选框。

这是一种方式。另一种方法是开始嗅探,右键单击 TLS 数据包,然后选择“Protocol Preferences -> Transport Layer Security -> (Pre-)Master Secret Log filename”并单击它。Wireshark 将在顶部打开一个文本字段,让您输入需要读取以进行解密的文件的路径。

现在我们可以看到 HTTPS 消息被解密了。这包括谷歌浏览器在打电话回母舰时进行的一些 API 调用,以及桌面 Discord 客户端对 Discord 后端的请求。

这不仅为更深入地对 Web 应用程序私有 API 进行逆向工程提供了可能性,而且还可以对桌面应用程序进行相同类型的研究,以实现数据抓取、自动化、漏洞研究和隐私分析等目的。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部