介绍
在这个实验(Lab)中,你将学习如何在 Wireshark 中利用“追踪 TCP 流 (Follow TCP Stream)”功能进行 TCP 流量分析。此功能使你能够提取和查看特定 TCP 会话的数据负载(data payload)。它在多种网络安全场景中非常有用,例如调查可疑的网络流量和分析应用层协议(application protocols)。
在本实验(Lab)结束时,你将掌握如何使用这个强大的工具来深入了解网络通信。这将显著增强你的网络分析能力。
在这个实验(Lab)中,你将学习如何在 Wireshark 中利用“追踪 TCP 流 (Follow TCP Stream)”功能进行 TCP 流量分析。此功能使你能够提取和查看特定 TCP 会话的数据负载(data payload)。它在多种网络安全场景中非常有用,例如调查可疑的网络流量和分析应用层协议(application protocols)。
在本实验(Lab)结束时,你将掌握如何使用这个强大的工具来深入了解网络通信。这将显著增强你的网络分析能力。
在这一步中,我们将首先了解 TCP(传输控制协议 (Transmission Control Protocol)),它是网络通信的基础组成部分。然后,我们将使用一个名为 Wireshark 的强大工具来捕获网络流量。理解 TCP 和能够捕获网络流量是网络安全领域的基本技能,因为它们使你能够了解网络上发生的事情,并分析它是否存在潜在问题。
TCP,即传输控制协议 (Transmission Control Protocol),是互联网协议族 (Internet Protocol suite) 中最重要的协议之一。互联网协议族是一组规则,用于管理数据在互联网上的传输方式。TCP 提供了一种可靠的方式,用于在通过 IP 网络进行通信的不同主机上运行的应用程序之间发送数据。
可靠性意味着 TCP 确保从一个应用程序发送到另一个应用程序的所有数据包都正确且按正确的顺序到达。这与 UDP(用户数据报协议 (User Datagram Protocol))不同,UDP 是一种无连接协议。UDP 在发送数据之前不建立连接,并且不保证所有数据包都会到达或按顺序到达。另一方面,TCP 是面向连接的。它首先在发送方和接收方之间建立连接,然后发送数据。此过程有助于维护正在传输的数据的完整性。
要开始捕获网络流量,我们需要启动 Wireshark。你可以这样做:
首先,打开一个终端窗口。你可以通过单击 Dock 中的终端图标或按 Ctrl+Alt+T
来执行此操作。终端是一个基于文本的界面,允许你通过键入命令与计算机的操作系统进行交互。
打开终端后,你需要键入一个命令来启动 Wireshark。键入以下命令,然后按 Enter:
wireshark
此命令告诉操作系统启动 Wireshark 应用程序。
现在 Wireshark 已经打开,我们准备开始捕获网络流量。步骤如下:
在网络接口列表中,单击 eth1
接口。这通常是你的虚拟机 (virtual machine) 的主网络接口。虚拟机就像你计算机中的一台计算机,而 eth1
接口是它连接到网络的方式。
选择 eth1
接口后,单击“开始捕获数据包 (Start capturing packets)”按钮,该按钮由工具栏中的蓝色鲨鱼鳍图标表示。此操作告诉 Wireshark 开始监视所选的网络接口,并捕获通过它的所有网络数据包。
当 Wireshark 开始捕获时,你将看到数据包出现在 Wireshark 主窗口中。这些数据包是网络流量的构建块。每个数据包都包含少量数据以及一些关于它来自哪里和去往哪里的信息。
为了生成一些我们可以分析的 TCP 流量,我们将使用 curl
命令。打开一个新的终端窗口并键入以下命令:
curl https://labex.io
curl
命令用于从服务器传输数据或将数据传输到服务器。在本例中,它从 https://labex.io
获取网页内容。此操作将生成 TCP 流量,因为对网页的 HTTP 请求使用 TCP 协议。
运行 curl
命令后,你将在终端中看到显示的网页内容。同时,Wireshark 将捕获与此 HTTP 请求相关的所有 TCP 数据包。这些数据包包含有关你的计算机和 Web 服务器之间的请求和响应的信息。
捕获大约 10 - 15 秒后,这通常足以获得良好的流量样本,返回到 Wireshark 并单击“停止捕获数据包 (Stop capturing packets)”按钮,该按钮由工具栏中的红色方形图标表示。这将停止 Wireshark 捕获任何更多的数据包。
Ctrl+S
。导航到 /home/labex/project/
目录,将你的文件命名为 capture.pcapng
,然后单击“保存 (Save)”。.pcapng
文件格式是用于存储网络数据包捕获的标准格式,它允许你稍后打开和分析捕获的流量。现在,你已成功捕获了一些包含 TCP 会话的网络流量。在接下来的步骤中,我们将分析此捕获的流量,以了解有关 TCP 的更多信息。
在这一步中,我们将分析在上一步中捕获的 labex.io 流量。我们将学习如何过滤网络流量以隔离特定的 TCP 会话,并探索 Wireshark 强大的“追踪 TCP 流 (Follow TCP Stream)”功能。此功能就像网络通信的放大镜,允许你查看两个端点之间的完整会话。
首先,让我们过滤流量,专门关注我们的 labex.io 通信:
tcp
,然后按 Enter 或单击箭头按钮以应用过滤器。tcp contains "labex"
并应用它。这将仅显示内容中包含“labex”的 TCP 数据包,从而帮助我们找到相关的流量。在我们开始追踪 TCP 流之前,重要的是要了解什么是 TCP 会话。TCP 会话包括在 TCP 会话期间在两个端点(IP 地址和端口组合)之间交换的所有数据包。每个 TCP 会话都有几个关键组件:
在我们的捕获中,我们应该看到你的机器和 labex.io 服务器之间的 TCP 会话。
现在让我们分析 labex.io 请求的 TCP 流:
labex.io
的数据包。你应该看到目标端口为 443
(HTTPS) 的数据包,该端口用于安全 Web 流量。追踪 (Follow)
> TCP 流 (TCP Stream)
。labex.io
服务器之间的整个 TCP 会话。在此窗口中:
由于我们通过 HTTPS 访问 labex.io,因此你将在流中主要看到加密数据。这是正常且预期的,因为 HTTPS 会加密数据以在传输过程中保护它。你或许能够识别通信开始时的 TLS 握手,但实际的 HTTP 请求和响应将被加密。
通过使用“显示和保存数据为 (Show and save data as)”下拉菜单来浏览不同的查看选项:
ASCII
:将数据以文本形式显示(用于读取任何未加密的部分)Hex Dump
:同时显示十六进制和 ASCII 表示形式(适用于检查加密数据)C Arrays
:将数据格式化为 C 编程语言数组Raw
:仅显示原始二进制数据为了记录此分析,请单击“打印 (Print)”按钮。将打印输出另存为 /home/labex/project/
目录中的名为 print.pdf
的 PDF 文件。
通过追踪 TCP 流,你可以看到你的机器和 labex.io 服务器之间的完整通信,而无需手动从单个数据包中拼凑数据。在下一步中,我们将学习如何更详细地保存和分析此数据。
在这一步中,我们将保存我们在上一步中检查的 labex.io TCP 流数据,以供离线分析。我们还将学习如何解释这些已保存的信息,以从加密的 HTTPS 通信中提取有价值的见解。
让我们保存来自我们的 labex.io 连接的 TCP 流数据:
你应该仍然打开着上一步中的 TCP 流窗口,显示你的机器和 labex.io 之间的通信。如果你不小心关闭了它,只需重复步骤来追踪其中一个 labex.io 数据包的 TCP 流。
在 TCP 流窗口的底部,找到“另存为 (Save As)”按钮。
单击“另存为 (Save As)”按钮,这将打开一个保存对话框。
导航到 /home/labex/project/
目录,然后输入文件名 tcp_stream_data.txt
。
单击“保存 (Save)”按钮。这会将整个 labex.io TCP 流保存到具有指定名称的文本文件中。
内容将以在“显示和保存数据为 (Show and save data as)”下拉菜单中选择的格式保存。如果你想以不同的格式保存它(例如,十六进制转储 (Hex Dump) 而不是 ASCII),你可以在保存之前更改下拉菜单中的格式。
现在我们已经保存了来自我们的 labex.io 连接的 TCP 流,让我们检查它的内容:
head /home/labex/project/tcp_stream_data.txt
或者你可以使用 cat
查看整个文件:
cat /home/labex/project/tcp_stream_data.txt
检查文件内容。由于我们到 labex.io 的流量是通过 HTTPS 传输的,因此大部分数据将被加密并显示为不可读的字符。但是,你仍然可以观察到几个重要的元素:
labex.io
服务器在此处协商加密参数请注意,数据的组织方式与它在 TCP 流窗口中显示的方式相同,客户端数据(从你的机器到 labex.io)与服务器数据(从 labex.io 到你的机器)分开。
你正在开发的 TCP 流分析技能在许多网络安全场景中都很有价值。让我们将这些与我们在 labex.io 流量中观察到的内容联系起来:
通过保存 TCP 流,就像我们对 labex.io 连接所做的那样,你将创建一个永久记录,该记录可以:
这种提取、保存和分析实际网络通信数据的能力使 TCP 流分析成为网络安全专业人员的强大技术。
在最后一步中,我们将探索一些高级技术来分析捕获中的 TCP 流,重点关注我们的 labex.io 流量和可能存在的任何其他 TCP 会话。这些高级技能将帮助你在处理复杂的网络流量捕获时更加高效。
让我们学习如何浏览和过滤捕获中的所有 TCP 会话,而不仅仅是 labex.io 流量:
统计 (Statistics)
> 会话 (Conversations)
。TCP
选项卡以过滤视图,仅显示 TCP 会话。此视图显示有关捕获中所有 TCP 会话的详细信息,包括:
查找与我们的 labex.io 连接相对应的会话。它应该涉及你在步骤 2 中观察到的相同 IP 地址。你可能还会看到在捕获期间发生的其他 TCP 会话。
选择 labex.io 会话,然后单击底部的“追踪流 (Follow Stream)”按钮。这提供了另一种访问我们之前分析的相同 TCP 流的方法。
捕获中的每个 TCP 流都有一个唯一的标识符,称为“tcp.stream”编号。这提供了一种精确的方式来过滤和分析特定流:
打开 Wireshark 主窗口,查看你之前识别的其中一个 labex.io 数据包的数据包详细信息。展开中间窗格中的“传输控制协议 (Transmission Control Protocol)”部分,然后查找名为“流索引 (Stream index)”或类似的字段。此数字是 labex.io TCP 流的唯一标识符。
要过滤属于此特定流的数据包,请使用如下所示的显示过滤器:
tcp.stream eq N
将 N
替换为你找到的流索引号。例如,如果 labex.io 流的索引为 2,你将使用:
tcp.stream eq 2
在显示过滤器框中应用此过滤器。Wireshark 现在将仅显示属于 labex.io TCP 流的数据包,从而提供更清晰的仅此会话的视图。
当你的捕获中有很多 TCP 会话并且想要专注于特定会话而无需每次都查找并右键单击数据包时,此过滤器特别有用。
通过掌握这些高级 TCP 流分析技术,你已大大增强了你的网络流量分析能力。你现在可以有效地隔离、检查和记录复杂网络捕获中的 TCP 会话,这对于网络安全专业人员来说是一项宝贵的技能。
在这个实验中,你已经学习了如何使用 Wireshark 的“追踪 TCP 流 (Follow TCP Stream)”功能进行深入的网络流量分析。你已经获得了捕获网络流量、过滤 TCP 会话、以各种格式解释数据、保存流数据以供离线使用以及应用高级分析技术的实践经验。
这些技能对于网络管理员、安全分析师和 IT 专业人员至关重要。它们使你能够排除网络问题、调查安全事件并了解应用程序行为。随着你的进步,请记住 Wireshark 还有许多其他功能,而 TCP 流分析只是你的网络安全武器库中的一种有价值的工具。