~ 什么是模糊测试?~

模糊测试(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实用程序,以试图破坏它们。

随机生成的输入大多数在语法上是不成立的,很快就会被被测试应用拒绝。为了能让模糊测试有效的进行下去,需要增加获得有效输入的几率。一个好的模糊生成器产生的数据,不会偏离预期输入太远,它们提供的数据被应用接受的概率很高,但又是非预期的,会触发应用的异常行为。

目前有很多开源的模糊测试工具可以选择:

American Fuzzy Lop(AFL)
Radamsa
Honggfuzz
libufuzzer
OSS-Fuzz
boofuzz
Bfuzz
PeachTech Peach Fuzzer
Microsoft Security Risk Detection
ClusterFuzz
Synopsys Defensics Fuzz Testing
Fuzzbuzz

  1. American Fuzzy Lop(AFL)
    AFL是一款开源的模糊测试工具,是当今使用最广泛的Fuzzer,这个工具在程序执行前对程序源码进行插桩(instrumentation),以便在程序执行过程中实时获取程序的执行情况。AFL采用遗传算法对程序的输入进行变异能够在程序运行的时候注入自己的代码, 然后自动产生测试用例进行模糊测试。

代码覆盖率是模糊测试工具用来增加找到导致错误的代码路径的可能性的主要指标。在执行过程中,AFL向被测程序中输入input,然后获取程序的覆盖率,将覆盖率大的input保留下来进行变异,然后在下一轮测试中向被测程序中输出这些变异后的input,一直到程序的覆盖率在较长的一段时间不能继续增大为止。

AFL的优点是可以轻松部署,配置简单,而最大的优点在于测试效率。这个工具建立在对最佳模糊测试器运行机制和最有用结果的大量研究基础之上,旨在最小化编译查询返回结果的耗时,尽量降低对系统的影响。AFL目前已衍生出很多分支。

官网地址:http://lcamtuf.coredump.cx/afl/

WinAFL:Windows版本的AFL,使用DynamoRIO去插桩闭源程序以获取代码覆盖率信息,同时支持硬件PT获取覆盖率信息,但PT获取覆盖率其实并没有插桩获取得全,但速度可能会快一些。

地址:http://github.com/googleprojectzero/winafl

AFLFast:加速版的AFL,Fuzzing速度确实会比原版快一些。

地址:http://github.com/mboehme/aflfast

2.Radamsa

Radamsa是一个开源的模糊测试工具,通常用于测试程序对格式错误和潜在恶意输入的承受能力。Radamsa最大的卖点就是其准确性。GitLab上的开发者页面列出了这款模糊测试器在流行软件中发现的真实漏洞。它易于编写脚本,并且易于启动和运行。

地址:http://github.com/Hwangtaewon/radamsa

3. Honggfuzz

Honggfuzz是由谷歌开发的,和AFL类似,采用遗传算法进行编译,是一个多进程和多线程的模糊生成器,所以用Honggfuzz进行fuzzing的速度非常快,在安全漏洞发现中的表现十分突出。根据该工具开发者的说法,它是唯一找到OpenSSL中导致发布全球安全补丁的关键漏洞的模糊测试工具。

Honggfuzz不仅仅适用于Windows。它可以测试在Linux、Mac甚至Android环境下运行的应用程序。由于它能够在多个平台下工作,Honggfuzz提供了一个完整的示例和测试用例目录,开发人员可以使用这些示例和测试用例,也可以根据自己的需要进行修改。

地址:http://github.com/google/honggfuzz

4.LibfuzzerLibFuzzer与被测试的库链接,并通过特定的模糊入口点(也称为“目标函数”)向被测试的库提供模糊输入。随后,模糊生成器跟踪触及的代码区域,并在输入数据的语料库中生成变异,以此来扩大代码覆盖率。地址:http://llvm.org/docs/LibFuzzer.html

5. OSS-Fuzz
OSS-Fuzz 能够针对开源软件进行持续的模糊测试,它的目的是利用更新的模糊测试技术与可拓展的分布式执行相结合,提高一般软件基础架构的安全性与稳定性。OSS-Fuzz 结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的 AddressSanitizer),并且通过 ClusterFuzz 为大规模可分布式执行提供了测试环境。

帮助开源社区使用创建更安全的应用,OSS-Fuzz在实现这一目标方面做得相当成功。OSS-Fuzz在200个开源程序中发现了超过14000个漏洞。

地址:http://github.com/google/oss-fuzz

6.boofuzz

boofuzz模糊测试框架是基于已经不再维护的Sulley开发的。该工具使用Sulley核心代码,但致力于不断改良。boofuzz是作为Python库安装的。开发人员增加了在线文档、对更多通信媒介的支持、可扩展故障检测和一个易于使用的界面。该工具还将串行模糊测试、以太网和UDP广播添加到了默认功能里。boofuzz还可将测试结果以CSV文件格式导出,以便在修复检出故障时可以先研究所有被触发问题的完整列表。

地址:http://github.com/jtpereyda/boofuzz

7. Bfuzz当红模糊测试工具之一,发现了逼出Epiphany Web补丁的漏洞和可致Mozilla Firefox触发缓冲区溢出的漏洞。

BFuzz是基于输入的模糊测试器,以URL和浏览器作为其输入方式。这个意义上讲,该工具很像DAST工具,适合重度依赖这些东西的公司企业,因为BFuzz使用类似的测试方法,但找寻不同类型的错误。

地址:http://github.com/RootUp/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进行测试。

地址:http://www.peach.tech/products/peach-fuzzer/

AI模糊测试采用机器学习及类似技术查找应用或系统中的漏洞。智能约束算法和遗传算法是两种主流的智能模糊测试算法,上面提到的AFL就是采用遗传算法。此外,还有一些AI模糊测试工具:

  1. 微软开发的Security Risk Detection (MSRD)MSRD是一个人工智能驱动的动态应用安全测试服务,可以优化web应用开发周期,以便在bug和安全风险被引入代码库时识别和纠正它们。

地址:http://www.microsoft.com/en-us/security-risk-detection/

10.ClusterFuzz

American Fuzzy Lop (AFL)使用遗传算法。该工具集是基于云的新工具Fuzzbuzz的核心,也是谷歌ClusterFuzz项目的一部分。ClusterFuzz是一个高度可伸缩的模糊测试基础设施,Google使用ClusterFuzz对所有Google产品进行模糊化,并将其作为OSS-fuzz的后端。

地址:http://security.googleblog.com/2019/02/open-sourcing-clusterfuzz.html

11.Synopsys Defensics Fuzz Testing

Synopsys提供的Defensics是一个全面、通用、自动化的模糊测试框架,能够帮助企业高效、有效地发现和修复软件中的安全弱点。这种基于格式生成的模糊器采用有针对性的智能方法进行负面测试;高级文件和协议模板模糊器使用户能够构建自己的测试用例。SDK 支持专业用户使用 Defensics Framework开发自己的测试用例。

地址:http://www.synopsys.com/software-integrity/security-testing/fuzz-testing.html

12.Fuzzbuzz

Fuzzbuzz是一个模糊测试平台,通过自动化的复杂的基础设施管理和设置以及与工具的连接,将模糊化集成到DevOps工作流中。该平台在发现缺陷时发出警报,消除重复数据,并对其进行分类,以消除噪音和误报。

地址:http://www.fuzzbuzz.io/

模糊测试的目的是发现软件安全漏洞,已经成为软件安全测试的主流测试技术,迄今为止,这项技术已经帮助人们在各种软件中发现了数千个安全漏洞。而且,随着“软件定义一切”和万物互联时代的到来,软件安全必将日益重要。因此,作为软件测试人员,有必要掌握模糊测试的技术和工具。

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

点击文末小卡片领取

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:25天从零基础转行到入职软件测试岗,今天学完,明天就业。【包括功能/接口/自动化/python自动化测试/性能/测试开发】

自动化测试进阶:2022B站首推超详细python自动化软件测试实战教程,备战金三银四跳槽季,进阶学完暴涨20K

2021年软件测试工具总结——模糊测试工具相关推荐

  1. stretchblt 模糊_微软开源持续开发模糊测试工具OneFuzz

    点击蓝字关注我们 近日,微软开源了OneFuzz--一个微软内部使用的,由开发人员驱动的持续开发模糊测试平台.开源后,世界各地的开发人员都可以通过OneFuzz直接从其开发系统接收模糊测试结果. 模糊 ...

  2. 模糊测试工具Simple Fuzzer

    模糊测试工具Simple Fuzzer 模糊测试是一种不同于渗透测试的漏洞检测方式.它向目标系统发送各种非预期的输入,然后通过监视异常结果来发现漏洞.Kali Linux虽然作为渗透测试系统平台,但也 ...

  3. Web模糊测试工具Powerfuzzer

    Web模糊测试工具Powerfuzzer Powerfuzzer是Kali Linux自带的一款Web模糊测试工具.该工具基于各种开源模糊测试工具构建,集成了大量安全信息.该工具高度智能化,它能根据用 ...

  4. cpu针脚测试软件,Sandsifter:一款专门针对X86处理器的模糊测试工具

    前言 今天给大家介绍的是一款名叫Sandsifter的x86处理器模糊测试工具.该工具可以通过系统生成的机器码来搜索处理器指令集,并通过监控异常数据来审计x86处理器中的隐藏指令和硬件漏洞.Sands ...

  5. 他们从各大操作系统中发现了26个 USB 漏洞,用的是这款模糊测试工具

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 普渡大学的研究员 Hui Peng 和瑞士洛桑联邦理工学院的研究员 Mathias Payer 在多种操作系统(如 Linux.mac ...

  6. 做软件测试却不知道这些测试工具?利用好可以涨薪50%

    都说"工欲善其事,必先利其器".做软件测试行业,怎么能缺少好用的软件测试工具呢?对于很多小伙伴,尤其是新手来说,刚入行时,由于接触的工具比较少,会的工具可能也就那么几个,如果工作中 ...

  7. 模糊测试工具defensics

    defensics是一个模糊测试工具,百度百科对模糊测试(Fuzzing)的定义是,是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法.它是通过异常输入的方式触发原来未知的漏洞. ...

  8. 经典 Fuzzer 工具 AFL 模糊测试指南

    AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski 开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具.通过记录输入样本的代码覆盖率,不断对 ...

  9. 软件测试资料哪个好用,做软件测试却不知道这些测试工具?利用好可以涨薪50%...

    都说"工欲善其事,必先利其器".做软件测试行业,怎么能缺少好用的软件测试工具呢?对于很多小伙伴,尤其是新手来说,刚入行时,由于接触的工具比较少,会的工具可能也就那么几个,如果工作中 ...

最新文章

  1. 通过构造函数来创建新对象
  2. 【随笔】工程师都是性情中人
  3. 挑战程序员同学,如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数?
  4. vscode 翻译_前端新手 VSCode 入门指南
  5. 计算机中那些事儿(三):我与Dos的不解情缘---初识篇
  6. torchvision.transforms
  7. 华氏温度与摄氏温度用C语言的实现方法
  8. Sails基础之View层
  9. 黑白图,灰度图,彩色图的理解
  10. 宠物服务App功能简介
  11. Echarts之Pie (一)
  12. 窥探现代浏览器架构(三)
  13. 充气娃娃?Python告诉你到底有多爽......
  14. 进程的三种状态及相互之间的转换
  15. 西南大学校园网客户端共享网络之路由器开wifi
  16. react ts环境搭建及ts格式写法
  17. 我的Java学习笔记(六)----IO流
  18. 用互联网思维去做事之-(1)互联网思维
  19. 【华为OD面试真题 JAVA】根据访问日志统计日活和月活
  20. Failed to bind properties under ‘spring.rabbitmq.publisher-confirm-type‘ to org.springfram

热门文章

  1. 关于java导出Excel 并设置密码权限
  2. java课设超市收银系统_基于jsp的超市收银系统-JavaEE实现超市收银系统 - java项目源码...
  3. 提供家用咖啡电子秤厨房秤方案芯片CS1238
  4. Js--根据身份证号计算年龄、性别、出生年月日
  5. 使用canvas生成一个圆形的图片
  6. Python爬虫报错HTTPSConnectionPool(host=‘heat.qq.com‘, port=443)处理
  7. egg.js入门教程视频文件(转载于cnode社区)
  8. Oracle 计算两个时间的差值
  9. 使用 PHP-FFMpeg 操作视频/音频文件(转)
  10. IOS高级开发~开机启动无限后台运行监听进程