如何执行模糊测试策略来强调网络堆栈,特别是在第三层和第四层(网络和传输)?我已经看过生成模糊器的框架,比如SPIKE,但在我看来,它们主要集中在应用程序层及以上?是否有任何众所周知的技术来模糊这些层中的众所周知的协议,比如TCP?
感谢。
答案 0 :(得分:8)
看看Scapy。它允许您在网络和传输层模糊。 fuzz
函数将模糊您在IP或TCP图层中未明确指定的任何内容(您可以单独将其应用于每个图层)。这为您提供了一系列的能力,从随机生成IP地址和端口对到制作和发送无意义的数据包。
您可能还想查看Fragroute。这将使TCP / IP转变为使用各种规避技术,但可能会揭示网络堆栈中隐藏的错误/漏洞。
此外,如果您的组织不反对,您可以设置Tor出口节点并从中捕获流量。我发现它对测试正确的TCP连接状态跟踪很有用。虽然您的连接结束是众所周知且不变的,但是存在各种各样的服务器以及有趣的网络拥塞问题。它基本上是无穷无尽的流量来源。请务必与您的高层进行核实,因为您的组织可能会反对成为恶意流量的潜在来源(尽管有一个强烈的非责任先例)。我已经解决了这个问题,在家里运行它/捕获,然后带上pcaps。
答案 1 :(得分:3)
如果您想要将IP,UDP或TCP的数据包从高级服务路由回发到一个读取它们的进程,对它们进行模糊处理并转发它们。您需要一个能够与原始套接字通信的驱动程序,并且您需要阅读/了解适用的RFC对这些协议的说法。
有一种简单的方法可以做到这一点。正如Justdelegard建议的那样,Scapy通常可能是最好用的。
请看LaurentGaffié的Releasing ICMPv4/IP fuzzer prototype。他的Python代码,偶然地以more readable方式在pastebin.com上转发,从scapy导入并使用他定义的一些方法来进行几种类型的模糊测试。 IP和ICMP数据包在他的示例代码中处理。所以,这听起来就像你正在寻找的那样。
目前,似乎有很多公司使用Tcl/Expect to do custom automated testing网络。 SIP,H.323,第2层和第2层3协议等
因此,如果Scapy不能满足您的需求,您可以使用Expect来创建或查找用Tcl编写的内容来完成工作。或者,您可能希望使用Scapy在Python中执行一些操作 - 以及使用Expect在Tcl中执行其他操作。
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,它从stdin读取输入并生成输出到stdout。