Wireshark与TShark入门指南:网络流量分析实战技巧

本文详细介绍了Wireshark和TShark的基本设置、显示格式、捕获选项、显示过滤器、流分析及对象提取等实用技术,帮助初学者掌握网络流量分析的核心方法,并提供了命令行操作的高级技巧。

Welcome to Shark Week: A Guide for Getting Started with Wireshark and TShark

Troy Wojewoda //

为致敬鲨鱼周¹,我决定撰写这篇博客,展示我在使用Wireshark及其命令行工具TShark分析网络流量时发现的各种实用技巧。多年来,Wireshark一直是分析捕获网络流量的事实标准工具。它具有强大的解封装(分解)网络流量各层的能力,支持分析两台主机之间的网络通信。应用场景从排查网络连接问题到揭示环境中的恶意威胁,不胜枚举。

回想起我第一次打开数据包捕获文件进行分析的情景……感觉有点像《回到未来II》中Marty McFly遇到巨型大白鲨全息影像时的样子。

好吧,也许没那么戏剧化,但至少可以说令人望而生畏。我记得当时盯着屏幕想:“我甚至不知道自己在看什么……从哪里开始?邪恶在哪里?这一切意味着什么!?”如果你刚接触Wireshark,这篇博客不会解决所有遇到的困难——就像掌握任何新事物的秘诀一样,这需要大量时间、耐心、练习和更多的练习。类似于有人问我“如何开始事件响应?”时我的回答:“开始做事件响应。”

然而,在我们开始分析数据包之前,有几个值得提及的准备工作。

首先,确保你使用的是最新版本的Wireshark。尤其是在分析来自不可信来源和/或存在点(即原始互联网流量)的网络流量时。在事件响应调查期间,最不希望发生的事就是你的分析机器成为额外的受害者。

尽管Wireshark确实经常出现漏洞和错误,但它仍然是该领域最常用的网络协议分析器之一,尽管这些问题不时出现,但支持该工具的社区会迅速解决它们。以下wiki文章提供了有关此主题的更多详细信息:https://wiki.wireshark.org/Security

简而言之,保持工具最新,并考虑在虚拟环境中使用Wireshark,特别是在对从不可信区域捕获的网络流量进行数据包分析时。

显示格式和设置

在本节中,我将介绍Wireshark中常见的一些显示格式和设置。

时间显示格式

时间是任何调查中最关键的组成部分之一,因此我们从这里开始是合理的。Wireshark支持多种显示给定数据包时间戳的选项。要查看或更改时间显示格式,请从主工具栏导航至:View -> Time Display Format。

Wireshark – 时间显示格式

我偏好使用UTC日期和时间(1970-01-01 01:02:03.123456)选项。关于数据包捕获中的时间戳的一个重要注意事项是——时间戳是在捕获时由实用程序(很可能是系统时间)记录的。这可能与你的分析机器是完全不同的系统,因此请确保在整个环境中实施适当的时间同步并定期审核。关于此主题的一个好资源是CISA关于管理环境中时间设置的指南²。此外,NIST维护了一个互联网时间服务器³列表,可用于通过NTP(网络时间协议)同步时间。

名称解析

Wireshark可以在三个区域执行自动名称解析。这些设置可从主工具栏访问:View -> Name Resolution。在最新安装(版本4.0.7)中,默认唯一启用的设置是解析物理地址。

Wireshark – 名称解析

根据场景,这些自动解析可能对分析师有帮助;然而,它们有可能阻碍分析甚至导致OPSEC失败……让我详细解释一下这些设置的作用。

  • 解析物理地址(MAC OUI解析) – Wireshark将MAC地址的前三个八位字节(也称为OUI或组织唯一标识符)转换为分配的供应商名称。
  • 解析网络地址(反向DNS解析) – Wireshark对源/目标IP地址执行反向DNS查找。
  • 解析传输地址(TCP/UDP端口关联) – Wireshark将TCP/UDP端口与其分配的应用协议关联(即TCP/80 – HTTP,UDP/53 – DNS)。

解析物理地址

选择解析物理地址后,Wireshark会将OUI(MAC地址中的前三个八位字节)转换为其分配的供应商。如下面数据包的数据包详细信息部分所示,八位字节00:50:56和00:0c:29都被归因于VMware。这与事实一致,因为我使用虚拟主机生成测试数据包并从虚拟网络适配器执行捕获。

Wireshark数据包详细信息 – 解析的物理地址

解析网络地址

选择解析网络地址后,Wireshark将对捕获中的所有源和目标IP地址执行反向DNS查找。尽管此设置可能看起来方便,但从OPSEC的角度来看,它有可能“暴露你的手”,特别是如果你正在执行包含公共可路由IP地址的数据包捕获分析。

出于演示目的,我在虚拟机中启用了此设置,其中客户系统配置为NAT模式。然后,在打开数据包捕获文件时,我捕获了进出客户操作系统的流量——结果:观察到反向DNS查找离开客户系统。以下屏幕截图显示Wireshark(从客户操作系统内部)正在为IP 137.184.39.243发起反向DNS查询,发送到公共DNS解析器(未在捕获中显示)。

Wireshark数据包列表 – 解析的网络地址

解析传输地址

选择解析传输地址后,Wireshark将分别标记每个TCP和UDP端口及其通常关联的网络协议。例如,NTP(或网络时间协议)通常与TCP/123和UDP/123都关联。

Wireshark数据包详细信息 – 解析的传输地址

在上面的屏幕截图中,我们可以在数据包详细信息部分看到Wireshark将目标端口标记为“ntp”;然而,如果我们使用Follow TCP Stream功能窥视此对话,我们可以看到这不是NTP流量,而是HTTP。

Wireshark – Follow TCP Streams

在我看来,解析物理地址是对分析[潜在]危害最小的设置。在某些情况下,MAC地址分析是调查的一部分,供应商查找是有帮助的。Wireshark社区还维护了一个网站⁴来执行批量OUI查找,我发现这有时非常有用。

解析传输地址可能具有误导性,特别是如果你刚接触网络分析……我对任何考虑此功能的人的建议是将其视为信息性的,并意识到任何对系统具有完全控制权的人都可以使用他们喜欢的任何TCP/UDP端口。我在测试客户端的出口控制时一直这样做,而且令我惊讶的是,仅基于TCP/UDP端口号允许出站流量的组织数量从未停止。

分析师在解析网络地址选项时应谨慎行事。也许在某些用例中此功能是有价值的;然而,我认为风险不值得回报,因此我不推荐它。

显示窗口

Wireshark使用三个窗口来显示数据包信息——这些窗口是:

  • 数据包列表 – 最顶部的显示窗格,显示每个数据包的高级摘要。默认情况下,Wireshark显示:数据包编号、数据包时间戳、源/目标地址、协议和每个数据包的描述。列标题可以重新排序(向右或向左)和/或单击以排序(升序/降序)。
  • 数据包详细信息 – 左下窗格(在旧版本中是中间窗格)显示所选数据包的详细信息。Wireshark根据所选数据包的TCP/IP层以分层结构显示各种字段。
  • 数据包字节 – 右下窗格(在旧版本中是最低窗格)显示所选数据包的字节,以十六进制转储形式表示,带有ASCII字符和偏移列,也以十六进制表示。

下面的屏幕截图显示了打开数据包捕获文件时每个显示的示例。

Wireshark – 显示窗口

捕获选项

如果你从未体验过用Wireshark处理巨大的PCAP文件,那么 consider yourself lucky……当我说巨大时,我指的是500MB+。Wireshark是一个极其强大的网络协议分析器,但在处理大型数据包捕获时通常很痛苦。下一节将介绍一些有助于缓解这些痛点的技术。

当使用Wireshark捕获网络流量时,我们可以从输入和输出角度应用各种捕获选项。这有助于限制获取数据的大小,从而帮助我们更快速地分析流量。要访问捕获选项,请从主工具栏导航至Capture -> Options…。

输入:将捕获限制到目标主机

要将捕获限制到目标主机,我们可以使用以下过滤器语法:

1
host <目标主机的IP地址>

在下面的示例中,我正在过滤IP地址192.168.232.130。这告诉Wireshark捕获此IP作为源或目标地址的流量。

Wireshark捕获选项 – 捕获过滤器

你还可以通过从主工具栏选择Capture -> Capture Filters…来查看一些预构建的捕获过滤器。Filter Expression列包含应用每个相应过滤器的示例语法。

Wireshark捕获选项 – 保存的捕获过滤器

输出:限制捕获输出

如果捕获过程要运行很长时间或无限期运行,最好让Wireshark根据某些提供的条件“滚动”输出到新文件。Output部分/选项卡在这里为我们提供了几个选项。我们可以告诉Wireshark在收集到x个数据包或字节或某个定义的时间导数后保存新文件。下面显示了一个示例,其中Wireshark配置为每次捕获的数据达到100MB时写入一个新的PCAP文件。

Wireshark捕获选项 – 输出多个文件

显示过滤器 != 捕获过滤器

一旦数据包捕获文件被打开或以其他方式由Wireshark生成,就可以应用显示过滤器以辅助分析。

显示过滤器与捕获过滤器不同,因为:

  • 捕获过滤器仅在捕获实时网络流量时应用。
  • 显示过滤器可以在捕获过程中或分析保存的PCAP文件时使用。
  • 在实时捕获期间,Wireshark将继续捕获流量,无论应用了任何显示过滤器——显示过滤器将限制正在查看的数据包,但Wireshark将继续在后台捕获流量,如Capture Options – Input选项卡中所定义。

许多支持的Wireshark显示过滤器使用以点表示法表示的分层语法。例如,如果我们想应用基于HTTP的显示过滤器,但希望在选择中更细化,我们可以键入:“http”后直接跟“.”。然后Wireshark将列出所有支持的HTTP显示过滤器。

Wireshark – HTTP过滤器选项

如果你好奇所有内置支持的显示过滤器,只需导航至:View -> Internals -> Supported Protocols并查看所需过滤器语法的过滤器列。下面显示的是支持的HTTP显示过滤器的一部分。

Wireshark – 支持的协议[部分HTTP列表]

Wireshark目前支持来自近3k协议的超过218k个显示过滤器!

跟随流

查看数据包内容是网络流量分析中最强大的功能之一。我们拥有的上下文越多,分析时就越了解情况。但在每数据包级别查看捕获的网络流量时,这可能说起来容易做起来难。当然,我们可以选择每个数据包并在Wireshark中查看数据包详细信息

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计