Fuzz test


背景和需求
多年来,有大量能够使 Microsoft Word 崩溃的坏文件。少数字节错位,会使整个应用程序毁于一旦。在旧式的、无内存保护的操作系统中,整个计算机通常就这样宕掉了。Word 为什么不能意识到它接收到了坏的数据,并发出一条错误信息呢?为什么它会仅仅因为少数字节被损坏就破坏自己的栈、堆呢?当然,Word 并不是惟一一个面对畸形文件时表现得如此糟糕的程序。

Fuzz Test是什么
就是用大量的测试用例一个一个试,尽可能多的找出有可能出问题的地方。

在模糊测试中,用随机坏数据(也称做 fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震憾,因为任何按逻辑思考的人都不会想到这种失败。
模糊测试是一项简单的技术,但它却能揭示出程序中的重要 bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。


实现过程:
1. 准备一份插入程序中的正确的文件。
2. 生成Fuzzed数据,用随机数据替换该文件的某些部分。
3. 用程序打开文件。
4. 观察破坏了什么。
5. 记录缺陷。

可以用任意多种方式改变该随机数据。例如,可以将整个文件打乱,而不是仅替换其中的一部分,也可以将该文件限制为 ASCII 文本或非零字节。不管用什么方式进行分割,关键是将大量随机数据放入应用程序并观察出故障的是什么。


Fuzz Test Tool的大部分结构
(1)要生成大量的测试用例。这个测试用例是“异常的”,一个软件首先要找到输入点,然后把数据丢进去,这个数据有可能是一个文件,有可能是一个数据包,有可能是测试表里面的一个项,有可能是临时文件里面的一个东西,总之是一种数据,要定义“异常的”这种非正常的数据。
(2)把它丢进去,看这个产品怎么反应
(3)监视并记录恶意输入触发的任何崩溃/异常。
(4)检视测试日志,深入调查。


什么是模糊测试?
模糊测试是一种软件测试技术,使用随机数据作为系统的输入。如果应用程序失败,那么系统将解决这些问题/缺陷。简而言之,意外或随机输入可能会导致意外结果。
模糊测试阶段:
以下是模糊测试的关键阶段:

 

攻击类型

• 数字/字符模糊
• 应用模糊测试
• 协议模糊测试
• 文件格式模糊测试


什么是模糊测试?
• 模糊测试是一种测试,其中使用自动或半自动测试技术通过向系统输入称为FUZZ的无效或随机数据来发现软件,操作系统或网络中的编码错误和安全漏洞。之后,系统会监视各种异常,例如系统崩溃或内置代码失败等。
• 模糊测试最初由Barton Miller于1989年在威斯康星大学开发。模糊测试或模糊测试是一种软件测试技术,它是一种安全测试。

 

 

为什么要进行模糊测试?

• 通常,Fuzz测试发现最严重的安全故障或缺陷
• 当与Black Box测试,Beta测试和其他调试方法一起使用时,模糊测试可以提供更有效的结果。
• 模糊测试用于检查软件的漏洞。这是非常划算的测试技术。
• 模糊测试是黑盒测试技术之一。模糊测试是黑客用来发现系统漏洞的最常见方法之一。

 

Fuzz Testing检测到的错误类型
• 断言失败和内存泄漏此方法广泛用于大型应用程序,其中错误会影响内存的安全性,这是一个严重的漏洞。
• 输入无效
在模糊测试中,模糊器用于生成无效输入,用于测试错误处理例程,这对于不控制其输入的软件很重要。简单的模糊测试可以被称为自动化负面测试的一种方法。
• 正确的错误
模糊测试也可用于检测某些类型的“正确性”错误。如数据库损坏,搜索结果不佳等。

 

模糊测试的优缺点
好处
模糊测试改进了软件安全测试。
在模糊测试中发现的错误有时很严重,黑客大部分时间都使用它,包括崩溃,内存泄漏,未处理的异常等。
如果由于时间和资源的限制,测试人员没有注意到任何错误,那么在Fuzz测试中也会发现这些错误。
缺点
仅靠模糊测试无法提供整体安全威胁或错误的完整图片。
模糊测试在处理不会导致程序崩溃的安全威胁方面效果较差,例如某些病毒,蠕虫,特洛伊木马等。
模糊测试只能检测简单的故障或威胁。
要有效地执行,需要大量时间。
使用随机输入设置边界值条件是非常有问题的,但现在使用基于用户输入的确定性算法,大多数测试人员解决了这个问题。

 

 

实例

test/app/fuzz/nvme_fuzz.c
patch位置https://review.gerrithub.io/#/c/spdk/spdk/+/431571/

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM