简介
想象一下,试图实时清点繁忙高速公路上经过的所有红色汽车。这不仅压力巨大,而且极易出错。现在,想象一下录制一段高速公路的视频,把录像带回家,通过暂停、倒带和快进,完美地清点出车辆。
在网络安全和数字取证领域,专业人员很少在流量飞速流过时进行实时分析。相反,他们会「录制视频」。他们捕获原始流量并将其保存为一种称为数据包捕获(Packet Capture,简称 PCAP)的标准格式。这种方法提供了一份永久且未经篡改的网络事件记录,允许在事件发生很久之后进行深入、无压力的分析。
这种记录思维至关重要,因为许多安全事件都是转瞬即逝的。一个可疑连接可能只持续几秒钟。一个恶意软件请求可能只发生一次且永不重复。如果你没有在事件发生时保存流量,你可能会失去事后重构事件的机会。因此,PCAP 文件在网络活动中的作用,就如同磁盘镜像和日志归档在其他取证调查中的作用一样。
在本实验中,你将学习使用 tcpdump 管理 PCAP 文件的核心艺术。你将练习将实时网络流量静默写入文件,将其读回终端进行离线审查,应用精确的过滤器来调查旧流量,并巧妙地提取较小的数据片段以供分享。
将流量写入 PCAP 文件
离线分析的第一步是记录数据。与其让 tcpdump 用快速滚动的文本填满你的屏幕,不如指示它将所有内容直接静默写入存储文件。这可以通过使用 -w(write,写入)标志来实现。
请注意屏幕捕获与 PCAP 捕获在目的上的区别。当打印到终端时,tcpdump 已经在为人类阅读总结数据包了。而当写入 PCAP 文件时,它会以其他分析工具稍后可以解析的形式保存数据包数据。这就是为什么当你认为可能需要重新查看证据时,写入文件通常是更好的选择。
当你使用 -w 标志后跟文件名时,tcpdump 将完全停止向你的屏幕输出信息。它会直接从网络接口获取原始数据包数据,并将其安全地打包成标准的 PCAP 格式。
首先,确保你位于主项目目录中,以便安全地保存文件:
cd ~/project
现在,开始捕获。为了防止程序无休止地记录并填满你的硬盘,我们将使用 -c(count,计数)标志来告诉它在捕获 50 个数据包后立即停止。我们还将引入 -i any 标志,它告诉程序撒下一张大网,同时捕获所有可用网络接口上的流量。
运行以下命令以抓取 50 个数据包并将其打包到名为 capture.pcap 的文件中:
sudo tcpdump -i any -c 50 -w capture.pcap
由于基于浏览器的终端会不断产生少量后台网络流量以保持连接,捕获过程通常会非常快地完成。你将看到如下简短的摘要输出:
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
50 packets captured
52 packets received by filter
0 packets dropped by kernel
请注意这里的关键区别:绝对没有打印出任何具体的数据包细节。所有敏感数据都被悄悄地存入了文件中。
你可以使用标准的 Linux 列表命令来验证你的新录制文件是否存在,并检查其物理大小:
ls -lh capture.pcap
看到 capture.pcap 文件及其文件大小列出,确认了原始网络流量已成功保存并准备好进行分析。
从 PCAP 文件读取流量
现在你已经安全地保存了证据,你需要一种方法来查看它。这个过程通常被称为离线分析。
离线分析有一个重要的实际优势:它将收集与解读分离开来。在实时事件中,防御者往往还不知道哪些数据包是重要的。他们的首要任务是尽可能多地保留相关证据。只有在事后,当情况稳定下来时,他们才会开始对保存的数据进行更缓慢、更有针对性的提问。
要打开并读取 PCAP 文件,你可以通过使用 -r(read,读取)标志后跟文件名,将开关从写入切换到读取。这个命令的妙处在于,tcpdump 处理保存文件的过程,与数据包此刻正在实时网络上飞驰的情况完全一致。
运行以下命令,将你刚刚创建的 capture.pcap 文件中的数据包重新输出到屏幕上:
tcpdump -r capture.pcap
注意:捕获实时流量需要深层的系统访问权限,这就是我们使用 sudo 的原因。但是,读取你自己拥有的普通文件则不需要。你可以安全地运行读取命令,而无需特殊的管理员权限。
突然间,你之前静默捕获的 50 个数据包将倾泻到你的终端屏幕上,看起来与实时捕获完全一样:
reading from file capture.pcap, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144
10:25:31.123456 IP 10.0.2.100.22 > 10.0.2.2.54321: Flags [P.], seq 1:100, ack 1, win 500, length 99
10:25:31.123500 IP 10.0.2.2.54321 > 10.0.2.100.22: Flags [.], ack 100, win 500, length 0
...
从静态文件读取对分析师来说是一种巨大的解脱。因为数据被冻结在时间中,你可以一遍又一遍地运行 -r 命令,花上你需要的所有时间,而永远不会改变原始证据。
为了简化分析,你可以将 -r 标志与其他显示选项叠加使用。例如,使用 -n 标志可以命令 tcpdump 跳过将 IP 地址转换为计算机名称的过程。这可以防止工具进行额外的后台查找,从而实现更快的显示速度和更简洁、更具技术性的输出:
tcpdump -n -r capture.pcap
对现有 PCAP 应用过滤器
记录大量的流量通常会导致巨大的文件,其中充斥着无关的杂音。当你进行调查时,你几乎从不想逐行阅读每一个数据包。
这就是为什么好的证据收集通常是广泛的,而好的证据分析通常是狭窄的。在收集过程中,你通常希望尽可能少地遗漏信息。在分析过程中,你会积极缩小范围,以便专注于回答当前问题的数据包。在保存的 PCAP 上使用过滤器,让你无需重复原始捕获过程即可实现这两点。
tcpdump 的真正魔力在于,你在实时网络上使用的所有强大的伯克利数据包过滤器(Berkeley Packet Filters,简称 BPF)在保存的文件上也能以同样的方式工作。tcpdump 会在后台快速读取整个 PCAP 文件,但只会打印出与你选择的过滤器匹配的特定数据包。
让我们通过过滤 capture.pcap 文件来测试这一点,使其仅显示 TCP 流量,忽略其他所有内容。运行以下命令:
tcpdump -n -r capture.pcap tcp
输出将明显变短,仅显示被识别为 TCP 协议的数据包。
你可以根据需要进行精确过滤。例如,如果你怀疑安全外壳协议(Secure Shell,即 SSH,在你的终端环境后台端口 22 上大量运行)存在问题,你可以回溯应用端口过滤器。
运行此命令:
tcpdump -n -r capture.pcap port 22
屏幕上的输出将严格显示源端口或目标端口匹配 22 的数据包:
reading from file capture.pcap, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144
10:25:31.123456 IP 10.0.2.100.22 > 10.0.2.2.54321: Flags [P.], seq 1:100, ack 1, win 500, length 99
...
这种事后应用过滤器的能力可以说是数字取证中最关键的技能。在现实世界的危机中,防御者会撒下一张大网,并使用 -w 不加选择地记录网络上的所有内容。尘埃落定后,他们会使用 -r 和复杂的 BPF 过滤器从容地筛选堆积如山的证据,定位攻击者入侵系统的确切时刻。
将特定流量提取到新的 PCAP
有时,你会发现捕获文件太大,难以传输到另一台计算机,或者你可能需要隔离几个高度可疑的数据包发送给专门的安全团队。
这种做法在实际调查中很常见,因为证据通常需要在团队之间流转。一线分析师可能会捕获一个巨大的文件,然后仅为恶意软件分析师、事件响应人员或开发人员提取可疑流量。较小且集中的 PCAP 文件更容易共享,检查速度更快,并且不太可能暴露其他团队不需要的无关背景数据。
通过将读取(-r)、过滤和写入(-w)功能巧妙地组合到一个命令中,你可以切分出相关的数据包,并将其永久保存为一个全新的、高度集中的 PCAP 文件。
让我们扮演取证分析师的角色,仅从我们原始的 capture.pcap 证据文件中提取 TCP 数据包。我们将把这些特定的数据包汇集到一个名为 tcp_only.pcap 的新文件中。
运行以下命令:
tcpdump -r capture.pcap tcp -w tcp_only.pcap
当你执行此操作时,你的终端将再次保持完全静默。tcpdump 读取原始文件,静默应用 tcp 过滤器,并将批准的数据包安全地直接写入新的 tcp_only.pcap 文件中,而不会在屏幕上显示任何内容。
你可以通过列出文件来验证你的新证据文件是否已成功创建:
ls -lh capture.pcap tcp_only.pcap
你将看到两个文件并排存在。根据你初始捕获期间发生的后台流量情况,tcp_only.pcap 可能比主 capture.pcap 文件小一些,因为它成功剔除了任何无关的非 TCP 噪声。
为了确保你的新文件仅包含预期的数据,你可以简单地将其读回:
tcpdump -n -r tcp_only.pcap
这种简单的提取技术对于整理混乱的数据以及安全地仅共享调查中必要的部分非常有价值。
总结
恭喜你!你已经成功掌握了 PCAP 文件管理的基础知识。
在本实验中,你学习了如何将网络流量视为已记录的证据。你练习了使用 -w 标志将实时网络事件安全地捕获到存储文件中。你转换到了离线分析的思维模式,使用 -r 标志将保存的数据包读回终端。你演示了如何对现有的捕获文件回溯应用 BPF 过滤器以快速消除噪声,最后,你学习了如何将高度特定的数据提取到新的 PCAP 文件中,以便进行简洁、有针对性的调查。
这些文件管理技术是数字取证、事件响应和高级网络故障排除的绝对标准操作程序。你现在已经具备了正确捕获和分析驱动现代世界的隐形数据流的核心技能。

