网络或传输层模糊测试

Posted

技术标签:

【中文标题】网络或传输层模糊测试【英文标题】:Network or Transport Layer Fuzzing 【发布时间】:2010-12-27 11:25:20 【问题描述】:

我如何执行模糊测试策略来强调网络堆栈,特别是在第三和第四层(网络和传输)?我看过生成模糊器的框架,比如 SPIKE,但在我看来,它们主要集中在应用层及以上?是否有任何众所周知的技术可以模糊这些层中的知名协议,例如 TCP?

谢谢。

【问题讨论】:

【参考方案1】:

如果您想对 IP、UDP 或 TCP 进行 fuzz,则通过环回将数据包从高级服务路由到读取它们、对其进行模糊处理并转发它们的进程。您需要一个可以让您与原始套接字通信的驱动程序,并且您需要阅读/了解适用的 RFC 对这些协议的规定。

有一个简单的方法可以做到这一点。正如 Justdelegard 所建议的那样,总的来说,Scapy 可能是最好的选择。

看看 Laurent Gaffié 的 Releasing ICMPv4/IP fuzzer prototype。他的 Python 代码,顺便说一句,他在 pastebin.com 上以more readable 时尚转发了,从 scapy 导入并使用他定义的一些方法来进行几种类型的模糊测试。 IP 和 ICMP 数据包在他的示例代码中处理。所以,这听起来完全符合您的要求。

现在,似乎有很多公司使用Tcl/Expect to do custom automated testing 的网络。 SIP、H.323、第 2 层和第 3 层协议等

因此,如果 Scapy 不能满足您的需求,您可以使用 Expect 制作或找到用 Tcl 编写的东西来完成这项工作。或者,您可能希望在 Python 中使用 Scapy 做一些事情,而在 Tcl 中使用 Expect 做一些事情。

Tcl 长期以来一直用于网络测试和管理应用程序。早在 1990 年代就有一本关于如何使用 Tcl 进行基于 SNMP 的网络管理的书。

Tcl 的语法很奇怪,但是库非常强大。它具有类似框架的能力,可以在套接字上定义自定义网络行为的行为,类似于您可以使用 Python 编程语言的标准库执行的操作。

与 Python 和其他脚本语言不同,有一个非常强大的用于 Tcl 程序的工具,名为 Expect(参见 expect man page)。

Expect 有一个方便的功能。它可以自动生成一个 Tcl 测试脚本。生成的脚本调用 Expect 函数。在进行此记录时,它充当被动的中间人,记录对话的双方。一种在 MS Word 或 Emacs 中进行编辑时录制宏的方式。

然后,您可以编辑自动生成的 Expect 脚本以对其进行微调,使其行为不同,或创建它的多个变体。它对于创建回归测试非常方便。如果您需要的话,您应该能够使用它来开始编写更高层的协议测试。从头开始节拍。

我认为您可以使用 Tcl/Expect 来测试使用基于字符串的命令的标准 TCP 应用程序(FTP、HTTP、SMTP 等)。它适用于测试基于字符的应用程序,例如从标准输入读取输入并生成输出到标准输出的 TELNET。

【讨论】:

【参考方案2】:

看看Scapy。它允许您在网络和传输层进行模糊测试。 fuzz 函数将模糊您在 IP 或 TCP 层中未明确指定的任何内容(您可以将其分别应用于每个层)。这为您提供了一系列能力,从随机生成 IP 地址和端口对到制作和发送无意义的数据包。

您可能还想查看Fragroute。这将扭曲 TCP/IP 以使用各种规避技术,但可能会暴露您的网络堆栈中隐藏的错误/漏洞。

此外,如果您的组织不反对,您可以设置一个Tor 出口节点并从中捕获流量。我发现它对于测试正确的 TCP 连接状态跟踪很有用。尽管您的连接端众所周知且不变,但服务器种类繁多以及有趣的网络拥塞问题。它基本上是一个无穷无尽的流量来源。请务必与您的上级联系,因为您的组织可能会反对成为恶意流量的潜在来源(即使有很强的不承担责任的先例)。我已经解决了这个问题,方法是在家运行/捕获,然后引入 pcap。

【讨论】:

以上是关于网络或传输层模糊测试的主要内容,如果未能解决你的问题,请参考以下文章

使用WebScarab模糊测试

网络安全-好用的模糊测试器汇总与思考

未知的未知:九大模糊测试工具

模糊测试工具 American Fuzzy Lop (一)

一款模糊测试工具介绍

两个测试模式“”集成测试“”“”模糊测试“”,你真会么