欢迎大家来到IT世界,在知识的湖畔探索吧!
有时也会在网络故障排除期间发生,但对于有关网络取证的分析作业也很常见:处理大量数据包,有时是数百万个或更多。两种典型的情况可能会让您摸不着头脑:要么您有一个同时包含所有数据包的大文件,要么您需要查看大量小文件。因此,让我们看看我们如何仍然可以同时解决这两个问题。
捕获文件大小的问题
首先,让我们看一下只有一个大文件要处理,在我的例子中,它的大小大约在 256MB 以上。我经常将捕获的文件大小设置为 128 或 256MBytes,因为它们在 Wireshark 中打开时仍然“还可以”——加载和过滤它们需要一些时间,但还不错。但是当我最终得到比这更大的文件时——有时大小超过 10GB——那就不再起作用了。这并不是说Wireshark不能加载文件 – 因为它经常可以加载,至少是最新版本。开发人员努力改进这一点,您现在可以打开几年前无法打开的文件。
但是,当您执行数据包分析任务时,文件的初始加载并不是耗时的部分 – 过滤才是。您应用的每个显示过滤器都会从磁盘重新读取整个文件。每次,因为 Wireshark 不会将数据包保存在内存中,除了当前解码和显示的一个数据包。因此,如果您以任何方式应用过滤器,Wireshark 需要再次读取所有数据包以检查它们是否与当前过滤器条件匹配。这意味着处理大文件会很慢,而且与往常一样,当您进行故障排除或执行取证调查时,您通常没有时间,因为快速获得结果至关重要。
专业提示:使用Wireshark中的“查找”功能(快捷方式:CTRL-F)和过滤器表达式来查找匹配的数据包,而无需应用过滤器本身。这通常可以节省大量时间。
拆分大型捕获文件
如果你有一个大文件,你可以很容易地把它分成更小的文件,使用editcap。editcap是一个与Wireshark一起安装的命令行工具。这就是为什么将 Wireshark 安装路径添加到路径变量中是个好主意,以便您可以在任何地方运行命令行工具。无论如何,回到editcap:我称它为“PCAP的瑞士小刀”,因为它有很多处理捕获文件的选项。我经常用它来将大文件切割成更小的块,如下所示:
[C:\traces\demo\]editcap -c bigfile.pcapng smallfile.pcapng
欢迎大家来到IT世界,在知识的湖畔探索吧!
“-c”参数告诉editcap将bigfile.pcapng切割成更小的文件,每个文件有100,000个数据包,这(根据我的经验)通常会导致文件大小为64-100 MBytes的文件。当然,这取决于原始文件中的数据包大小。您也可以改用“-i <每个文件秒数”,但我不太喜欢这样,因为可能会有流量突发导致一些非常大的文件和一些非常小的文件。如果你想知道为什么只有一个输出文件名而不是很多:editcap会自动将时间戳附加到它创建的每个文件中,使结果看起来像这样:
欢迎大家来到IT世界,在知识的湖畔探索吧!11.07.2018 19:43 74.082.680 smallfile_00000_440.pcapng 11.07.2018 19:43 76.672.476 smallfile_00001_609.pcapng 11.07.2018 19:43 79.812.736 smallfile_00002_714.pcapng 11.07.2018 19:43 51.724.288 smallfile_00003_826.pcapng
好消息是文件名的格式与Wireshark“兼容”,因此可以将其作为文件集进行导航:
图1 –Wireshark文件集
顺便说一下,转换捕获文件格式也可以使用 editcap 使用“-F”参数完成。例如,如果您需要 PCAP 格式的文件,请使用以下命令(某些 editcap 版本可能需要“libpcap”而不是“pcap”作为格式值):
[C:\traces\demo\]editcap -F pcap capture.pcapng capture.pcap
如果您有多个文件,请运行批处理作业,如下所示(例如g. 在 Windows 命令行上):
欢迎大家来到IT世界,在知识的湖畔探索吧![C:\traces\demo\]for %a in (*.pcapng) do editcap -F pcap %a %a.pcap
这会将当前目录中的所有文件转换为 PCAP 格式。如果您使用空的“-F”参数运行它,Editcap 可以告诉您它支持的所有文件格式:
[C:\traces\demo\]editcap -F editcap: The available capture file types for the "-F" flag are: 5views - InfoVista 5View capture btsnoop - Symbian OS btsnoop commview - TamoSoft CommView dct2000 - Catapult DCT2000 trace (.out format) erf - Endace ERF capture eyesdn - EyeSDN USB S0/E1 ISDN trace format k12text - K12 text file lanalyzer - Novell LANalyzer logcat - Android Logcat Binary format logcat-brief - Android Logcat Brief text format logcat-long - Android Logcat Long text format logcat-process - Android Logcat Process text format logcat-tag - Android Logcat Tag text format logcat-thread - Android Logcat Thread text format logcat-threadtime - Android Logcat Threadtime text format logcat-time - Android Logcat Time text format modpcap - Modified tcpdump - pcap netmon1 - Microsoft NetMon 1.x netmon2 - Microsoft NetMon 2.x nettl - HP-UX nettl trace ngsniffer - Sniffer (DOS) ngwsniffer_1_1 - NetXray, Sniffer (Windows) 1.1 ngwsniffer_2_0 - Sniffer (Windows) 2.00x niobserver - Network Instruments Observer nokiapcap - Nokia tcpdump - pcap nsecpcap - Wireshark/tcpdump/... - nanosecond pcap nstrace10 - NetScaler Trace (Version 1.0) nstrace20 - NetScaler Trace (Version 2.0) nstrace30 - NetScaler Trace (Version 3.0) nstrace35 - NetScaler Trace (Version 3.5) pcap - Wireshark/tcpdump/... - pcap pcapng - Wireshark/... - pcapng rf5 - Tektronix K12xx 32-bit .rf5 format rh6_1pcap - RedHat 6.1 tcpdump - pcap snoop - Sun snoop suse6_3pcap - SuSE 6.3 tcpdump - pcap visual - Visual Networks traffic capture
警告 – 某些格式可能无法相互转换,具体取决于格式区域的不同程度。
使用文件集
在许多情况下,您最终会得到一组文件,有时甚至是数千个文件。例如,流行的SecurityOnion发行版捕获每个文件约160MByte:
19.06.2018 02:06 160.365.341 snort.log.
19.06.2018 02:08 159.951.916 snort.log.
19.06.2018 02:12 160.134.953 snort.log.
19.06.2018 02:14 160.052.639 鼻息.log.
19.06.2018 02:16 159.996.030 鼻息.log.
这有时会使提取存在于多个文件中的流成为一项挑战(例如,从第一个文件开始,以第五个文件结束)。要解决这个问题,您有两个主要选择:
- 首先使用 mergecap(也是 Wireshark 命令行工具集的一部分)将所有捕获文件合并在一起,然后从大合并文件中雕刻您需要的流程。这里的主要问题是,您最终可能会得到一个如此之大的文件,以至于大多数雕刻工具无法再处理它。
- 从每个部分文件中剪切部分流,并将提取的数据包合并在一起作为最后一步。这通常效果最好,例如,在所有文件的批处理作业中使用 tshark 或 tcpdump,然后进行合并。
mergecap语法非常简单(例如,当尝试合并上面列出的snort文件时):
[C:\traces\demo\]mergecap -a -w snort_all.pcapng snort.log.*
“-a”参数告诉 mergecap 连接文件,而不是按帧时间戳合并它们。为此,您应该确保您的文件名按时间顺序列出,否则您将在合并文件中出现时间跳跃。在这种情况下,只需省略“-a”参数,让 mergecap 为您排序帧。
专业提示:有一些旧版本的 mergecap(1.x,我记不清了)不适用于通配符,需要您指定所有文件。我建议购买更新的Wireshark安装,而不是这样做。
提取具有上下文的数据包
很多时候,我们需要从一大堆中提取特定的数据包来调查发生了什么。对于网络取证调查尤其如此,对于某些网络分析作业尤其如此,在这些作业中,您正在运行 24/7 捕获并需要查找特定会话的数据包。有一系列的工具可以解决这类问题,我现在将介绍其中的一些。总的来说,我找到了很多工具,但我跳过了所有太过时的工具,或者没有产生数据包提取(如tcpflow,它提取 TCP 之上的内容,而不是数据包本身)。
wireshark
当然,您可以使用Wireshark从捕获文件中提取数据包。它也可能是最通用的工具(与tshark一起)。其强大功能来自大量的显示过滤器,您可以应用这些过滤器来获取所需的内容,并将过滤结果保存到新文件中。在大多数情况下,这意味着应用会话过滤器来隔离单个 TCP 连接。或者其中几个。另一方面,Wireshark 可能太复杂而无法用于提取任务,因为它需要大量的手动交互才能获得所需的结果。
典型的步骤是:
- 查找要使用的筛选条件(通常是对话筛选器,如“ip.addr==192.168.0.1 和 ip.addr==10.0.0.1 和 tcp.port==54321 和 tcp.port==80”)
- 打开第一个文件
- 应用过滤器
- 通过 File -> 导出特定数据包(不是“另存为”!但是,如果你这样做了,不要感到难过,每个人都是错误的。我仍然这样做)
- 打开下一个文件,然后从步骤 3 开始重复,直到您确定已获得所有内容(提示:加载仍应用显示过滤器的文件将加快速度)
- 将部分结果合并在一起(如果需要 – 您也可以在Wireshark中执行此操作。查看文件菜单中的合并选项,或者简单地在UI上拖放多个文件 )
- 使用另一个过滤器重复此操作(如果需要)
优点
- 所有平台
- 极其强大
缺点
- 一次一个文件
- 需要大量的手工工作
- 不是很快
- 可能会遇到大文件的问题
专业提示:Wireshark中有一个鲜为人知/被忽视的功能,您可以在其中应用负载过滤器,在加载文件时仅允许匹配的数据包通过。语法只是显示过滤器语法,所以它非常强大:
图2 –Wireshark文件集
tshark
tshark 非常适合提取数据包,因为它具有 Wireshark 拥有的所有显示过滤器,您可以编写脚本,例如对整个文件集执行这样的批处理提取:
[C:\traces\demo\]for %a in (*.pcapng) do tshark -r %a -Y "ip.addr==192.168.0.1 and ip.addr==10.0.0.1 and tcp.port==54321 and tcp.port==80" -w %a_conversation1.pcapng
最后一步是将所有提取的文件合并在一起,然后就可以进行对话,例如:
[C:\traces\demo\]mergecap -a -w conversation1_all.pcapng *_conversation1.pcapng
tshark 有时会遇到无法正确剖析的协议的麻烦(您在控制台上收到错误消息),并且通过使用与您正在做的事情无关的协议剖析器也会减慢速度。例如,如果您按IP和端口过滤对话(这是迄今为止最常见的方式),则所有应用程序协议都无关紧要。在这种情况下,我创建了一个特定的配置文件,该配置文件仅使用我在Wireshark中真正需要的剖析器,如下所示:
- 启动 Wireshark
- 为tshark创建一个新的个人资料(我经常将这个命名为“tshark”)
- 禁用所有协议
- 启用您需要的协议(通常:以太网、IPv4/v6、TCP、UDP/UDPLite)
图 3 – 启用 Wireshark 的协议
然后使用您的新配置文件运行 tshark,方法是使用“-C”参数指定它,后跟配置文件名称:
[C:\traces\demo\]tshark -C tshark -r capture.pcapng -Y "ip.addr==192.168.0.1 and ip.addr==10.0.0.1 and tcp.port==54321 and tcp.port==80" -w filtered.pcapng
专业提示:当新的Wireshark版本发布时,添加到代码中的新协议剖析器默认处于启用状态,因此您可能需要检查缩小的配置文件并禁用新的解析器,除非您需要它们。
优点
- 所有平台
- 极其强大
缺点
- 需要对需要应用的每个筛选器的文件集进行多次运行
- 对于大量数据包来说仍然不是很快
- 可能无法处理大文件
tcpdump
TCPDUMP在用法上与tshark非常相似,但有一个关键的区别:它不支持Tshark拥有的数十万个显示过滤器,因此它可以过滤的内容更加有限。但从好的方面来说,tcpdump 也有一个很大的优势:因为它可以使用 BPF 进行过滤,而无需显示过滤器引擎开销,所以速度很快。非常快。如果您只关心对话之类的事情,那么它可能是该任务的最佳命令行工具。
当使用 tcpdump 时,上面 tshark 示例中使用的相同过滤器如下所示(当然,现在使用 BPF 语法):
tcpdump -r capture.pcap -w filtered.pcap "host 192.168.0.1 and 10.0.0.1 and tcp port 54321 and 80"
请记住,tcpdump 还不能写入 pcapng 文件格式,并且只有在它使用的 libpcap 版本支持的情况下才会读取 pcapng。还有一个名为windump的Windows版本,但它似乎已停产,仅限于pcap文件。因此,如果您想针对一组 pcapng 文件运行它,您需要先转换它们,这也需要时间。
优点
- 大多数平台(windump.exe适用于Windows)
- 适用于大文件
- 极快
缺点
- 需要对需要应用的每个筛选器的文件集进行多次运行
- 可能仅适用于 PCAP 文件,需要先转换 PCAPNG 文件
- 筛选仅限于 BPF 语法
- 无法写入 pcapng 格式,因此可能会丢失一些元信息
TraceWrangler
我曾经使用Wireshark从一组数百个文件中过滤了数百个对话,花了两天时间。从那以后,我学会了以更聪明的方式做到这一点,例如使用 tcpdump 而不是 Wireshark。但这仍然需要运行数百次文件集,而不仅仅是一次。所以我在TraceWrangler 中添加了提取功能,尽管它在过滤器引擎方面几乎不如 tshark 甚至 tcpdump 强大,但它使用起来非常方便。它只需要运行一次即可同时提取到多个过滤器。还有一个特殊的模式,它可以根据Snort警报文件结果提取对话,我在这里写了博客。
使用 TraceWrangler 提取数据包有两种主要方法:通过会话摘要或使用提取任务。
对话摘要
将对话摘要视为 Wireshark 中的对话统计信息,但聚合到当前文件列表中的所有文件:
图4 –跟踪牧马人对话摘要
双击任何一行都会将完整的对话提取到一个临时文件中,并用它打开Wireshark。您还可以选择多行并使用弹出菜单,或切换聚合模式 (CTRL-O) 以将所有对话列在相应 IP 对下方。该表还具有Wireshark(尚未)没有的额外值,例如iRTT(如果可用),数据包比率(指示哪个IP发送了总流量的多少),或者显示有关握手和拆解的详细信息的状态列(仍然有一些我需要修复的问题)。
提取任务
提取任务用于按各种标准提取数据包,例如,通过为特定 IP 对的所有对话添加过滤器:
图 5 – 跟踪牧马人提取任务筛选器
提取任务通过一个看起来不怎么大的功能非常强大:输出文件名模式。使用该模式,您可以控制提取的数据包将最终进入哪个文件,例如按套接字对、IP 或 VLAN 和许多其他值拆分它们。
图 6 – 跟踪牧马人提取任务输出模式
根据你的设置方式,跟踪牧马人会将数据包聚合到输出文件中。默认情况下,这将是基于套接字对(IP 和端口)的文件,但如果您希望每个 IP 对的所有数据包都放在一个文件中,您可以将其设置为 <sourceip>-<destinationip> 之类的内容。值得注意的是,您还可以使用目录值的占位符,例如,在其中为 IP 对和基于套接字的文件名创建一个目录。
优点
- 适用于无限大小的文件集(主要取决于可用 RAM)
- 可以在一次运行中将数据包提取到多个文件中
- 可以基于指示器数据包执行复杂的提取
缺点
- 只有Windows在撰写这篇博文时
- 过滤非常有限
- 不写 pcap,只写 pcapng(是的,有些人一直在要求 pcap 支持)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/84395.html