如何执行模糊测试策略来强调网络堆栈,特别是在第三和第四层(网络和传输)?我看过生成模糊器的框架,比如 SPIKE,但在我看来,它们主要集中在应用层及以上?是否有任何众所周知的技术可以模糊这些层中的知名协议,例如 TCP?
谢谢。
如何执行模糊测试策略来强调网络堆栈,特别是在第三和第四层(网络和传输)?我看过生成模糊器的框架,比如 SPIKE,但在我看来,它们主要集中在应用层及以上?是否有任何众所周知的技术可以模糊这些层中的知名协议,例如 TCP?
谢谢。
看看斯卡皮。它允许您在网络和传输层进行模糊测试。该fuzz
函数将对您未在 IP 或 TCP 层中明确指定的任何内容进行模糊测试(您可以将其分别应用于每个层)。这为您提供了一系列能力,从随机生成 IP 地址和端口对到制作和发送无意义的数据包。
您可能还想查看Fragroute。这将扭曲 TCP/IP 使用各种规避技术,但可能会暴露网络堆栈中隐藏的错误/漏洞。
此外,如果您的组织不反对,您可以设置一个Tor出口节点并从中捕获流量。我发现它对于测试正确的 TCP 连接状态跟踪很有用。尽管您的连接端众所周知且不变,但服务器种类繁多以及有趣的网络拥塞问题。它基本上是一个无穷无尽的流量来源。请务必与您的上级核实,因为您的组织可能反对成为恶意流量的潜在来源(即使有很强的不承担责任的先例)。我已经解决了这个问题,方法是在家运行/捕获,然后引入 pcaps。
如果您想对 IP、UDP 或 TCP 进行模糊测试,则通过环回将数据包从高级服务路由到读取它们、模糊化它们并转发它们的进程。您需要一个可以让您与原始套接字对话的驱动程序,并且您需要阅读/了解适用的 RFC 对这些协议的规定。
有一个简单的方法可以做到这一点。正如 Justdelegard 建议的那样,Scapy 可能是最好的,一般来说。
看看 Laurent Gaffié 发布的ICMPv4/IP 模糊器原型。他的 Python 代码,顺便说一下,他在 pastebin.com 上以更易读的方式重新发布,从 scapy 导入,并使用他定义的一些方法来进行几种类型的模糊测试。IP 和 ICMP 数据包在他的示例代码中处理。所以,这听起来和你正在寻找的完全一样。
目前,似乎有很多公司使用Tcl/Expect 对网络进行自定义自动化测试。SIP、H.323、第 2 层和第 3 层协议等。
因此,如果 Scapy 不能满足您的需求,您可以使用 Expect 制作或找到用 Tcl 编写的东西来完成这项工作。或者,您可能希望在 Python 中使用 Scapy 做一些事情,而在 Tcl 中使用 Expect 做一些事情。
Tcl 长期以来一直用于网络测试和管理应用程序。早在 1990 年代就有一本关于如何使用 Tcl 进行基于 SNMP 的网络管理的书。
Tcl 的语法很奇怪,但是库非常强大。它具有类似框架的能力,可以在套接字上定义自定义网络行为的行为,类似于您可以使用 Python 编程语言的标准库执行的操作。
与 Python 和其他脚本语言不同,有一个用于 Tcl 程序的非常强大的工具,名为 Expect(请参阅expect 手册页)。
Expect 有一个方便的功能。它可以自动生成一个 Tcl 测试脚本。生成的脚本调用 Expect 函数。在进行此记录时,它充当被动的中间人,记录对话的双方。一种在 MS Word 或 Emacs 中进行编辑时录制宏的方式。
然后,您可以编辑自动生成的 Expect 脚本以对其进行微调,使其行为不同,或创建它的多个变体。它对于创建回归测试非常方便。如果您需要的话,您应该能够使用它来开始编写更高层的协议测试。节拍从头开始。
我认为您可以使用 Tcl/Expect 来测试使用基于字符串的命令的标准 TCP 应用程序(FTP、HTTP、SMTP 等)。它适用于测试基于字符的应用程序,例如从标准输入读取输入并生成输出到标准输出的 TELNET。