Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

介绍

模糊测试是创建随机或半随机抓包文件,将其输入 Wireshark 或 TShark,并查找崩溃或其他错误条件的过程。Wireshark 的绝大多数代码都会处理直接从实时网络或抓包文件读取的数据;模糊测试有助于确保它能安全地处理这些数据。尤其是,在模糊测试期间创建的数据包不一定格式良好,Wireshark 必须能够处理这些不合规的数据包,而不会崩溃或执行任何其他非法操作。

参与进来!

我们需要尽可能多的人进行模糊测试。每个人都有自己有价值的一组抓包文件和首选项,这些可能会暴露默认配置中找不到的 bug。如果可能,请使用 Git 版本的 Wireshark 进行模糊测试(Git 源代码可从这里检出,或可从这里下载近期修订版本的预构建版本)。请务必报告你发现的任何 bug,并将 fuzzed capture file 附加到 bug report 中,以便其他人可以轻松复现该 bug。

如何进行模糊测试

Wireshark 的源代码附带一个脚本(tools/fuzz-test.sh),通常你只需要它。从源代码树根目录运行它,并传入你想要进行模糊测试的任何抓包文件名即可。如果启用 clang 或 gcc 的 AddressSanitizer,效果最好:

[ Build with `cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=ON ...` ]./tools/fuzz-test.sh myCapture1.pcap myCapture2.pcap ...

当然,在指定抓包文件时可以使用 shell 通配符(例如 *.pcap)。

该脚本会为每个文件创建临时副本并向其中引入错误,然后使用启用了许多额外断言和安全检查的 Tshark 运行这些被编辑过的抓包。如果检测到错误,脚本会尽可能输出信息并退出。它会在当前目录留下有问题的已编辑抓包文件,名称类似 fuzz-2013-01-01-1234.pcap。提交 bug report 时请附加此抓包。

在 Cygwin(Windows)上进行模糊测试

[本节具有历史性质,可能无法在现代环境中工作。如果你知道在 Windows 上进行模糊测试的方法,请随时相应编辑此页面。]

打开 Cygwin shell,并进入包含已编译 Wireshark 二进制文件的目录(如果要测试已安装版本的 Wireshark,则使用安装位置,通常是 “/cygdrive/c/Program Files/Wireshark”)。现在从该目录运行 fuzz-test.sh,并使用指向测试文件的 Cygwin 风格路径:

/c/Development/Wireshark/wireshark-gtk2$ bash -o igncr ../tools/fuzz-test.sh ~/Desktop/file1.cap ...
  • 不用担心关于 ulimit 的警告。

  • 如果遇到问题,请尝试在 wireshark-gtk2 目录中手动创建 'tmp' 文件夹。

  • 如果编辑该脚本,请注意不要保存带有额外 Windows line-feed 字符的版本,否则脚本会损坏。如果遇到此问题,dos2unix 命令可以修复该文件。

复现模糊测试失败

大多数 bug 都可以通过简单加载 fuzzed capture file,在 Wireshark 和 TShark 中轻松复现;不过有些 bug 更难复现。它们可能依赖 Wireshark 和 Tshark 之间某些细微的行为差异,也可能只有在设置了某个特殊调试标志时才会出现。

源代码树中还有一个附加脚本(./tools/test-captures.sh),它会精确模拟模糊测试环境。它设置相同的调试标志,向 Tshark 传递相同的参数,等等。如果你在复现问题时遇到困难,请尝试将 fuzzed capture 传给此脚本:

./tools/test-captures.sh fuzz-2013-01-01-1234.pcap

一旦能够复现问题,请查看一些用于调试该问题的 Tips and Tricks。

还值得注意的是,有些 bug 只会在某些平台或架构上出现。如果你仍然无法复现问题,请检查你的平台是否与原始平台不同。

其他工具

除标准 fuzz-test.sh 脚本外,Wireshark 还附带另外两个用于 fuzz-testing 的工具:

  • randpkt -- 创建包含完全随机数据载荷的抓包文件

  • editcap -- 向普通抓包文件中引入错误

fuzz-test.sh 脚本只是用一些简单参数和少量附加逻辑来使用 editcap。为了进行更强大或更有针对性的 fuzz-testing,这两个程序都值得探索。

另请参见

happy-shark:Happy Shark 是 Wireshark 的回归测试框架,由一个工具和一组抓包文件组成。 [Wireshark-dev] Revive the happy-shark repository? !2839 (merged) : Draft: Test: Add external tests. AKA happyshark

Imported from https://wiki.wireshark.org/FuzzTesting on 2020-08-11 23:14:14 UTC

相关 Wireshark Wiki 页面

网络分析技术档案