寻求对 Wireshark SSL/TLS 解密过程中出现的问题的解释

寻求对 Wireshark SSL/TLS 解密过程中出现的问题的解释

目前正在使用:

  • 操作系统:官方 Kali Linux 2019.4

  • 浏览器:Chromium 版本 76.0.3809.100(开发者版本),基于 Debian bullseye/sid 构建,在 Debian kali-rolling(64 位)上运行

  • Wireshark 2.6.10(Git v2.6.10 打包为 2.6.10-1)

  • 会话密钥和捕获:https://anonfile.com/J6n7we57n6/keys_and_cap_tar

大约两天前,我决定开始学习像 Wireshark 这样的工具,这是一个漫长而艰巨的过程。我的主要兴趣是使用 Wireshark 查看我的计算机和网站之间的流量,我很快就第一次遇到了 SSL/TLS 加密。从我的谷歌搜索中,我发现有两种常见的解密方法:使用服务器 RSA 密钥和使用 SSLKEYLOGFILE 方法。当然,我选择了后者。

我偶然发现了这个 Youtube 教程,关于如何设置逐会话捕获和解密:https://www.youtube.com/watch?v=X4aT63h_fjk。我设置了一个终端实例环境变量,打开Wireshark后通过该终端实例打开了Chromium,访问了5个站点:

  • Wireshark.org
  • Youtube.com
  • Deviantart.com
  • Pizzahut.com
  • Bitstamp.net

(不一定按此顺序)

只不过是访问他们的主页而已。然后我停止了 Wireshark,保存了捕获,配置了首选项,以便它可以使用会话生成的 SSLKEYLOGFILE,重新打开捕获,并设置以下显示过滤器:

  • ip.src==10.0.2.29 且(http 包含“GET”或 http2)

我期望看到我加载的每个网站主页的 GET,但在 HTTP1.1 中只发现一个(Bitstamp),在 HTTP2 中只发现两个(Pizzahut 和 Youtube)。因此我重复了该过程,但这次只是为了访问 Wireshark.org 的主页。我期望看到以某种方式逃脱第一次捕获的 HTTP2 GET,但我没有找到。我认为如果我对 Deviantart.com 重复该过程第三次,情况会类似。此外,Wireshark 似乎只解密 HTTP2 标头;数据仍然到达 TLS 记录层(对于完成的两次捕获)。

因此我再次使用 Google 搜索并在 SU 上找到了这篇帖子。

根据我的发现,我有几个问题:

  1. 在没有服务器 RSA 的情况下,真的没有办法使用 Wireshark 解密 SSL/TLS 吗?
  2. 为什么 Wireshark 能够使用 SSLKEYLOGFILE 解密标头,但不能解密其余数据?
  3. [与 Wireshark 有点不相关,但是:] 为什么 Wireshark 可以接收对 Bitstamp 的 HTTP GET 请求以及对 Youtube 和 Pizzahut 的 HTTP2 GET 请求,但却没有接收对 Wireshark(.org) 和 Deviantart 的请求?

同时,我已经下载了 Fiddler 来查看 HTTPS 流量,以防有人打算提出建议,但我非常感谢您的想法以及任何帮助!

答案1

从浏览器导出 SSLKEYLOGFILE 的另一种方法是通过 TLS 代理运行 HTTPS 流量,例如极地代理,生成包含解密流量的 PCAP 文件。

您可以配置 iptables 将 uid 为 1000 的用户的所有流量转发到本地 PolarProxy 服务,如下所示:

sudo iptables -t nat -A OUTPUT -m owner --uid 1000 -p tcp --dport 443 -j REDIRECT --to 10443 

这将允许您分析 Wireshark 中解密的 HTTPS 流量,就好像它是在 TCP 端口 80 上运行的未加密的 http 或 http/2。

您甚至可以使用 Wireshark 通过将解密的 TLS 流量的 PCAP 直接传输到 Wireshark 来实时分析流量,如下所示:

./PolarProxy -p 10443,80,443 --certhttp 10080 -w - | wireshark -k -i - 

最后,PolarProxy 是我开发的。所以如果您对该工具有任何疑问,请随时告诉我。

相关内容