2021年软件测试⼯具总结——模糊测试⼯具
~什么是模糊测试?~
模糊测试(Fuzz Testing)是⼀种⾃动化的软件测试技术,最初是由威斯康⾟⼤学的巴顿·⽶勒于1989年开发的,通常⽤于识别程序中的潜在漏洞。模糊测试的核⼼是⾃动或半⾃动的⽣成随机数据输⼊到应⽤程序中,同时监控程序的异常情况,如崩溃、代码断⾔失败,以此发现可能的程序错误,如内存泄漏。
模糊化是指⾃动⽣成和执⾏测试,模糊测试中输⼊的随机数据被称为“Fuzz”,随机数据的类型包括:超长字符串;随机数如负数,浮点数,超⼤数、特殊字符如~!@#$%等包含特殊含义的字符,作为输⼊可能会引发报错;unicode编码,因为有些程序是不⽀持unicode的。
模糊测试包括⼏个基本的测试步骤:确定被测系统->确定输⼊->⽣成模糊数据->使⽤模糊数据执⾏测试->监控分析系统的⾏为->输出⽇志。
⽬前有三种主要的模糊测试技术:
⿊盒随机模糊,对正确格式的输⼊数据进⾏随机变异,然后⽤这些变异的输⼊运⾏程序,看是否能够触发异常。这是⼀种简单的hack,如果⼀个应⽤从未进⾏过模糊测试,可以⽤这种技术有效地发现应⽤中的漏洞。
基于语法的模糊,是模糊复杂格式输⼊的替代⽅法,需要指定输⼊格式的输⼊语法,还指定哪些输⼊部分要进⾏模糊化以及如何模糊化。基于语法的模糊⽣成器会⽣成许多新的输⼊,每个输⼊满⾜语法编码的约束。基于语法的fuzzing通过模糊⽣成器的⽤户的创造⼒和专业知识来指导fuzzing。
⽩盒模糊处理,由微软研究院于2008年⾸创,这种⽅法包括:动态地执⾏测试下的程序,并从执⾏过程中遇到的条件分⽀收集输⼊约束。然后,系统地逐个否定所有这些约束,并使⽤约束求解器求解,其解被映射到执⾏不同程序执⾏路径的新输⼊。使⽤系统搜索技术重复这个过程,试图扫描程序的所有可⾏的执⾏路径。与⿊盒随机模糊相⽐,⽩盒模糊通常更精确,可以运⾏更多的代码,从⽽发现更多的bug。
模糊测试属于动态测试,是⼀种⾃动发现软件安全漏洞的经济有效的测试技术,常常会在软件安全开发⽣命周期中发现⾮常严重的安全故障或缺陷,例如:崩溃、内存泄漏,未处理的异常等。如果⼀个软件产品需要处理不可信的输⼊或者具有⼤型、复杂的数据解析功能,模糊测试是⾮常有效的。⼀旦⼀个模糊⽣成器启动并运⾏,它就可以开始⾃⼰寻缺陷,不需要⼿动/⼈⼯⼲预。另外,模糊测试有助于发现传统测试⽅法或⼿动审计⽆法检测到的缺陷。
当然,模糊测试⽆法提供对于⼀个软件应⽤在安全威胁或漏洞⽅⾯的整体评估,在处理不会导致应⽤崩溃的安全威胁时效果较差,例如某些病毒、蠕⾍、⽊马等,因此需要结合其它的安全测试⼿段来保障软件系统的安全。
~模糊测试⼯具~
模糊测试的核⼼在于⼀个有效的模糊⽣成器(Fuzzer),就像巴顿·⽶勒教授当初给学⽣布置的作业:
The goal of this project is to evaluate the robustness of various UNIX utility programs, given an unpredictable input stream. […] First, you will build a fuzz generator. This is a program that will output a random character stream. Second, you will take the fuzz generator and use it to attack as many UNIX utilities as possible, with the goal of trying to break them.
该项⽬的⽬标是在给定不可预测的输⼊流的情况下评估各种UNIX实⽤程序的健壮性。[…]⾸先,您将构建⼀个模糊发⽣器。这是⼀个将输出随机字符流的程序。其次,您将使⽤模糊发⽣器,并使⽤它来攻击尽可能多的UNIX实⽤程序,以试图破坏它们。
随机⽣成的输⼊⼤多数在语法上是不成⽴的,很快就会被被测试应⽤拒绝。为了能让模糊测试有效的进⾏下去,需要增加获得有效输⼊的⼏率。⼀个好的模糊⽣成器产⽣的数据,不会偏离预期输⼊太远,它们提供的数据被应⽤接受的概率很⾼,但⼜是⾮预期的,会触发应⽤的异常⾏为。
⽬前有很多开源的模糊测试⼯具可以选择:
1. American Fuzzy Lop(AFL)
2. Radamsa
3. Honggfuzz
4. libufuzzer
5. OSS-Fuzz
6. boofuzz
7. Bfuzz
8. PeachTech Peach Fuzzer
9. Microsoft Security Risk Detection
10. ClusterFuzz
11. Synopsys Defensics Fuzz Testing
12. Fuzzbuzz
1. American Fuzzy Lop(AFL)
AFL是⼀款开源的模糊测试⼯具,是当今使⽤最⼴泛的Fuzzer,这个⼯具在程序执⾏前对程序源码进⾏插桩(instrumentation),以便在程序执⾏过程中实时获取程序的执⾏情况。AFL采⽤遗传算法对程序的输⼊进⾏变异能够在程序运⾏的时候注⼊⾃⼰的代码, 然后⾃动产⽣测试⽤例进⾏模糊测试。
代码覆盖率是模糊测试⼯具⽤来增加到导致错误的代码路径的可能性的主要指标。在执⾏过程中,AFL向被测程序中输⼊input,然后获取程序的覆盖率,将覆盖率⼤的input保留下来进⾏变异,然后在下⼀轮测试中向被测程序中输出这些变异后的input,⼀直到程序的覆盖率在较长的⼀段时间不能继续增⼤为⽌。
AFL的优点是可以轻松部署,配置简单,⽽最⼤的优点在于测试效率。这个⼯具建⽴在对最佳模糊测试器运⾏机制和最有⽤结果的⼤量研究基础之上,旨在最⼩化编译查询返回结果的耗时,尽量降低对系统的影响。AFL⽬前已衍⽣出很多分⽀。
WinAFL:Windows版本的AFL,使⽤DynamoRIO去插桩闭源程序以获取代码覆盖率信息,同时⽀持硬件PT获取覆盖率信息,但PT获取覆盖率其实并没有插桩获取得全,但速度可能会快⼀些。
AFLFast:加速版的AFL,Fuzzing速度确实会⽐原版快⼀些。
2. Radamsa
Radamsa是⼀个开源的模糊测试⼯具,通常⽤于测试程序对格式错误和潜在恶意输⼊的承受能⼒。Radamsa最⼤的卖点就是其准确性。GitLab上的开发者页⾯列出了这款模糊测试器在流⾏软件中发现的真实漏洞。它易于编写脚本,并且易于启动和运⾏。
地址:
3. Honggfuzz
Honggfuzz是由⾕歌开发的,和AFL类似,采⽤遗传算法进⾏编译,是⼀个多进程和多线程的模糊⽣成器,所以⽤Honggfuzz进⾏fuzzing的速度⾮常快,在安全漏洞发现中的表现⼗分突出。根据该⼯具开发者的说法,它是唯⼀到OpenSSL中导致发布全球安全补丁的关键漏洞的模糊测试⼯具。
Honggfuzz不仅仅适⽤于Windows。它可以测试在Linux、Mac甚⾄Android环境下运⾏的应⽤程序。由于它能够在多个平台下⼯
作,Honggfuzz提供了⼀个完整的⽰例和测试⽤例⽬录,开发⼈员可以使⽤这些⽰例和测试⽤例,也可以根据⾃⼰的需要进⾏修改。
地址:
4. Libfuzzer
LibFuzzer与被测试的库链接,并通过特定的模糊⼊⼝点(也称为“⽬标函数”)向被测试的库提供模糊输⼊。随后,模糊⽣成器跟踪触及的代码区域,并在输⼊数据的语料库中⽣成变异,以此来扩⼤代码覆盖率。
5. OSS-Fuzz
OSS-Fuzz 能够针对开源软件进⾏持续的模糊测试,它的⽬的是利⽤更新的模糊测试技术与可拓展的分布式执⾏相结合,提⾼⼀般软件基础架构的安全性与稳定性。OSS-Fuzz 结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的AddressSanitizer),并且通过 ClusterFuzz 为⼤规模可分布式执⾏提供了测试环境。
帮助开源社区使⽤创建更安全的应⽤,OSS-Fuzz在实现这⼀⽬标⽅⾯做得相当成功。OSS-Fuzz在200个开源程序中发现了超过14000个漏洞。
6. boofuzz
boofuzz模糊测试框架是基于已经不再维护的Sulley开发的。该⼯具使⽤Sulley核⼼代码,但致⼒于不断改良。boofuzz是作为Python库安装的。开发⼈员增加了在线⽂档、对更多通信媒介的⽀持、可扩展故障检测和⼀个易于使⽤的界⾯。该⼯具还将串⾏模糊测试、以太⽹和UDP⼴播添加到了默认功能⾥。boofuzz还可将测试结果以CSV⽂件格式导出,以便在修复检出故障时可以先研究所有被触发问题的完整列表。
7. Bfuzz
当红模糊测试⼯具之⼀,发现了逼出Epiphany Web补丁的漏洞和可致Mozilla Firefox触发缓冲区溢出的漏洞。
BFuzz是基于输⼊的模糊测试器,以URL和浏览器作为其输⼊⽅式。这个意义上讲,该⼯具很像DAST⼯具,适合重度依赖这些东西的公司企业,因为BFuzz使⽤类似的测试⽅法,但寻不同类型的错误。
8. PeachTech Peach Fuzzer
PeachTech Peach Fuzzer是PeachTech公司出品的商业模糊测试⼯具,很多繁琐的事情都不需要测试⼈员亲⼒亲为了。测试⼈员只需要⽤该公司所谓的Peach Pit加载并配置该模糊测试引擎即可。
Peach Pit是预先编写好的测试定义,覆盖⼀系列不同平台。PeachTech表⽰,每个Pit包含适⽤特定⽬标的规范,⽐如⽬标摄⼊的数据结构,数据流⼊和流出被测设备或应⽤程序的⽅式等。这样测试⼈员就可以⼏乎不⽤设置,便能将精⼒集中在他们的模糊测试上了。⽤户使⽤PeachTech创建⾃⼰的Pit也很简单,令Peach Fuzzer还可⽤于专⽤系统。
由于Peach Fuzzer引擎可以Peach Pit编程的原因,⼏乎所有系统都在该⼯具的测试范围之内:Mac、Windows、Linux,也可以⽤于模糊测试⽹络协议、嵌⼊式系统、驱动、物联⽹设备,只要是能接受命令⽽易受模糊输⼊困扰的系统,就能⽤Peach Fuzzer进⾏测试。
AI模糊测试采⽤机器学习及类似技术查应⽤或系统中的漏洞。智能约束算法和遗传算法是两种主流的智能模糊测试算法,上⾯提到的AFL 就是采⽤遗传算法。此外,还有⼀些AI模糊测试⼯具:
9. 微软开发的Security Risk Detection (MSRD)
MSRD是⼀个⼈⼯智能驱动的动态应⽤安全测试服务,可以优化web应⽤开发周期,以便在bug和安全风险被引⼊代码库时识别和纠正它们。
10. ClusterFuzz
American Fuzzy Lop (AFL)使⽤遗传算法。该⼯具集是基于云的新⼯具Fuzzbuzz的核⼼,也是⾕歌Clu
sterFuzz项⽬的⼀部分。ClusterFuzz是⼀个⾼度可伸缩的模糊测试基础设施,Google使⽤ClusterFuzz对所有Google产品进⾏模糊化,并将其作为OSS-fuzz的后端。
11. Synopsys Defensics Fuzz Testing
Synopsys提供的Defensics是⼀个全⾯、通⽤、⾃动化的模糊测试框架,能够帮助企业⾼效、有效地发现和修复软件中的安全弱点。这种基于格式⽣成的模糊器采⽤有针对性的智能⽅法进⾏负⾯测试;⾼级⽂件和协议模板模糊器使⽤户能够构建⾃⼰的测试⽤例。SDK ⽀持专业⽤户使⽤ Defensics Framework开发⾃⼰的测试⽤例。
12. Fuzzbuzz
Fuzzbuzz是⼀个模糊测试平台,通过⾃动化的复杂的基础设施管理和设置以及与⼯具的连接,将模糊化集成到DevOps⼯作流中。该平台在发现缺陷时发出警报,消除重复数据,并对其进⾏分类,以消除噪⾳和误报。
模糊测试的⽬的是发现软件安全漏洞,已经成为软件安全测试的主流测试技术,迄今为⽌,这项技术已经帮助⼈们在各种软件中发现了数千个安全漏洞。⽽且,随着“软件定义⼀切”和万物互联时代的到来,软件安全必将⽇益重要。因此,作为软件测试⼈员,有必要掌握模糊测试的技术和⼯具。
技术⾏业要不断地学习,学习肯定不要孤军奋战,最好是能抱团取暖,相互成就⼀起成长,众效应的效果是⾮常强⼤的,⼤家⼀起学习,⼀起打卡,会更有学习动⼒,也更能坚持下去。你可以加⼊我们的测试技术交流扣扣:563251944(⾥⾯有各种软件测试资源和技术讨论)
送给⼤家⼀句话,共勉:当我们能⼒不⾜的时候,⾸先要做的是内修!当我们能⼒⾜够强⼤的时候,就可以外寻了!
unicode在线工具
免费获取⼀份216页软件测试⼯程师⾯试宝典⽂档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联⽹程序原理、Mysql数据库、抓包⼯具专题、接⼝测试⼯具、测试进阶-Python编程、Web⾃动化测试、APP⾃动化测
试、接⼝⾃动化测试、测试⾼级持续集成、测试架构开发测试框架、性能测试、安全测试等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。