在 Wireshark 中过滤 TLS 1.3 流量

Filter TLS 1.3 traffic in Wireshark

有没有一种简单的方法可以在 Wireshark 中过滤 TLS 1.3 数据包?

tls.record.version 将不起作用,因为它通常包含 0x0303 (TLS 1.2) 的值。

我假设 Wireshark 通过查看 ServerHello 消息中的 SupportedVersions 扩展来识别 TLS 1.3,如果版本是 0x0304 (TLS 1.3),它可能会将协议应用于整个 TLS 流。

TLSv1.3 显示在“协议”列中,但我不确定要应用哪个显示过滤器来过滤这些数据包。

鉴于 TLSv1.3 出于兼容性原因试图伪装成 TLSv1.2,因此没有针对 TLSv1.3 的简单过滤器

截至 2020 年 10 月 5 日的当前版本(Wireshark 可能会在某个时候添加此内容)

Wireshark

在 Wireshark 中,您可以通过右键单击流中的数据包然后添加 && tls 来跟踪此 TLSv1.3 流,以仅查看流中的 TLSv1.3 数据包(tcp 数据包将显示在流)。总之,这应该类似于 tcp stream eq 0 && tls.

tshark

您可以使用此 bash 脚本轻松找到此显示过滤器:

#!/bin/bash
filename=YOUR_PCAP.pcap
tcp_streams="$(tshark -r $filename -T fields -e tcp.stream \
  -Y 'tls.handshake.extensions.supported_version == 0x0304' | sort | uniq)"

display_filter="tls && ("
first_stream="true"
for s in $tcp_streams; do
  if [ $first_stream == "true" ]; then
    first_stream="false"
  else
    display_filter+=" || "
  fi
  display_filter+="tcp.stream eq $s"
done

display_filter+=")"
printf "Display filter for TLSv1.3:\n$display_filter\n"

在这里,我们

  • 获取 TLSv1.3 流编号的排序列表
  • 迭代这些流,使显示过滤器看起来像
    tls && ($stream1 || $stream 2 || ...)

使用 Lua

创建您自己的显示过滤器

根据 same question asked on Wireshark forums, there is a lua script 将执行与此 bash 脚本相同的跑腿工作。这是 Wireshark 文档的一部分,作为示例代码提供,您可以根据需要进行修改。