在Wireshark中过滤TLS 1.3流量 Wireshark tshark 使用Lua创建自己的显示过滤器

问题描述

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

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

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

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

enter image description here

解决方法

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

截至2020-10-05的最新信息(Wireshark可能会在某些时候添加)

Wireshark

在Wireshark中,您可以通过以下方式跟踪此TLSv1.3流:右键单击流中的数据包,然后添加&& tls以仅查看流中的TLSv1.3数据包(tcp数据包将显示在流中)。在一起,应该像tcp stream eq 0 && tls

Following stream

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创建自己的显示过滤器

根据Wireshark论坛上的same question要求,有一个lua script会与此bash脚本进行相同的工作。这是Wireshark文档的一部分,并作为示例代码提供,您可以根据需要进行修改。