每当大家讨论模糊测试技术的时候,对它的第一印象往往定格在:漏洞挖掘常用技术、闭源软件漏洞挖掘、二进制文件检测分析、黑盒漏洞检测技术等等。或者,你的心里也是这么想的?但是,我想说:经历了不同时代范式的迭代成长,模糊测试已然不是你心中认为的样子了。

一.模糊测试技术的兴起

每每提及模糊测试,大家都知道它的背景出身,模糊测试最早由威斯康星大学的Barton Miller于1988年提出。最开始,Barton Miller的实验内容是开发一个基本的命令列模糊器以测试Unix程式。这个模糊器可以用随机数据来「轰炸」这些测试程式直至其崩溃,从而对应用程序进行安全检测。在当时,这一简单的测试方法便已发现运行于 UNIX 系统上的 25%以上的程序崩溃,展现出了无与伦比的测试优越性。也就是从此时起,“它”慢慢进入大家的视野。

包括现在,世界上一些大规模的组织机构也把“它”当作质量控制和网络安全操作的一部分:

1.Google

●Google用它来检查和保护Chrome中的数百万行代码。例如,2019年发现了Chrome中的 20,000 多个漏洞。

2.微软

●微软将它作为其软件开发生命周期的阶段之一,以发现漏洞并提高其产品的稳定性。

3.美国国防部 (DoD)

●美国国防部 (DoD)发布了DevSecOps参考设计和应用程序安全指南,两者都要求将它作为软件开发过程的标准部分。

4.华为

●华为要求所有对外提供或使用外源进行服务的C/C++代码都需要经过Fuzzing测试,且每年发现1000多个Top N问题。涉及海思、数通、云核、无线、终端、华为云(存储、计算)、公共开发部、车BU等重点单位。

或许,你对它的认知还停留在相对传统的第一印象。但不难发现,现在模糊测试技术逐渐得到了公众的关注和使用,以解决安全漏洞问题。随着技术理念的不断迭代发展,现阶段的模糊测试不仅包括传统的黑盒模糊测试,还衍生了灰/白盒的模糊测试技术。这一点,你是否已经意识到了呢?

二、模糊测试的不断演变

模糊测试技术的演变,主要因为AFL改变了传统黑盒模糊测试的产品形态。下面我们先介绍一下黑盒模糊测试。

黑盒模糊测试

如果我们要检测一个封闭屋子内是否存在安全隐患,但不了解屋内构造、也接触不到屋内的东西,那么我们就需要找到一个有效的方法判断屋内的构造。类比于应用程序的检测,很多应用程序的源代码和二进制代码等也无法获得,在此场景下,黑盒模糊测试便是探测程序“内部构造”的有效方法,它通过在自动化任务中使用格式错误/半格式错误的数据注入来查找程序实现的错误。

协议模糊测试是该技术最常见的应用场景之一,也是智能车企、军队、信创、工控等众多场景亟需的解决方案。云起无垠的模糊测试系统在智能车企的协议检测场景中可以帮助智能车企做如下检测:

  • 操作系统安全检测:对车联网设备的操作系统进行文件、进程、网络等方面的安全检测。

  • 车内通信协议检测:对车内设备的通信环境进行安全检测,如CAN协议逆向、CAN协议模糊测试、CAN 数据重发测试、UDS协议测试等。

  • 车外通信协议检测:对车载设备与外部设备或云服务的通信协议进行安全检测,如蓝牙、WIFI等安全检测。

  • 应用软件安全检测:对车联网应用软件进行动态安全检测。

  • 数据安全检测:对车联网设备和应用运行交互过程的数据安全进行检测。

AFL简单介绍

AFL(American Fuzzy lop)是一款基于覆盖引导的模糊测试工具,最早由安全研究员Michał Zalewski(@lcamtuf)开发。它采用遗传算法来有效地提高测试用例的代码覆盖率。它在诞生之初便在知名软件项目中检测到数十个重大软件错误,包括X.Org Server, PHP,OpenSSL,pngcrush,bash,Firefox,BIND,Qt,and SQLite。目前,作为最广泛使用的Fuzzing工具,AFL已经发现超过15000个漏洞,且基于AFL做二次开发的开发安全研究工作在这3年已经有超过100篇高水准学术论文发表。

不过,与大多数模糊器不同,AFL-fuzz观察被测试程序的内部行为,并调整它生成的测试用例以触发未探索的执行路径。因此,AFL-fuzz比其它fuzzer覆盖更多被测程序,生成的测试用例也更多。

只是,近几年AFL已经没有再更新了,社区的其它成员提供了一个具有各种改进和附加功能的更复杂的分支,称为AFL++。不管如何,都改变了模糊测试的格局。

灰盒模糊测试

灰盒模糊测试也是越来越流行的检测方式之一,它利用“检测”而不是“程序分析”来收集有关程序的信息。例如在程序中进行插桩,可以获得一条fuzzing用例在执行时对应的代码覆盖率。如果接触到了更多的程序内容,它就把这一条用例记录下来,用于改进fuzzing的效果。

现有的基于American Fuzzy Lop (AFL) 的灰盒fuzzing依赖于使用一小组变异函数将一组有效程序输入转换为新的“子”输入。这些变异函数相当简单,执行诸如翻转输入中的随机字节、插入特殊字符或删除部分输入等操作。因此,这个产生的子输入与其父输入相似但又不同。如果子输入通过影响以前未探索的代码路径来增加代码覆盖率,则将其添加到有效输入队列中,并重复该过程。

对于每个输入,模糊器都知道覆盖了哪些程序以及它们被执行的大致频率。检测通常在编译时完成,即将程序源代码编译为可执行二进制文件时。此时,可以使用虚拟机(例如QEMU)或动态检测工具(例如Intel PinTool)等在未检测的二进制文件上运行AFL。

云起无垠在AFL基础之上,融合遗传变异等算法,研发设计了无垠代码模糊测试系统。该测试系统基于反馈学习机制生成海量测试用例,对程序代码接口进行自动化动态检测,使缺陷误报率无限趋近于零,确保缺陷可定位、可复现,大幅提升安全左移的可落地性。

而且,该产品可以在代码安全检测场景中对系统源代码及二进制文件进行动态检测,检测目标工程代码的安全性及健壮性,帮助开发、测试、安全人员快速发现、定位、验证目标工程的代码缺陷,并以报告的形式呈现出来,从而可以针对性地制定解决方案。

三、模糊测试的工作流程

知道了模糊测试的常见类型之后,我们也需要知道其工作原理,只有这样才能更好的在实际应用中实施。

模糊测试是一种针对软件安全的自动化测试方法,它主要的理念是追寻测试样例的变异,并通过海量的测试数据来覆盖更多的程序执行流,从而找到更多的安全问题。Fuzzing不仅可以找到逻辑类漏洞,还能找到内存破坏的漏洞,比如缓冲区溢出、内存泄漏、条件竞争等等。这本质的原因在于Fuzzing在做软件安全测试的时候,整体的粒度会更细,测试点会更多,判断位置也会更精准。

近30年来,模糊测试技术呈飞跃式发展,它目前除了可以覆盖AST技术以外,还可以利用到符号执行、语法树变异、代码覆盖引导、遗传算法变异、污点跟踪等技术。通常情况下,完整的模糊测试流程会经历如下6个步骤:

步骤一:识别目标系统

步骤二:识别输入

步骤三:生成模糊数据

步骤四:使用模糊数据执行测试

步骤五:监控系统行为

步骤六:记录缺陷,确定可利用性

四、模糊测试的优势

放眼当下,模糊测试之所以备受关注,主要是它为安全和高质量的程序提供了广泛的好处:

  • 在模糊测试期间,程序会使用无效的、意外的或随机的输入执行,目的是使被测系统崩溃。现代模糊测试解决方案可以分析它们要测试的代码的结构。它们可以每秒生成数千个自动化测试用例,并标记输入通过程序的每条路径。通过这种方式,模糊器可以获得关于代码覆盖率的详细反馈

  • 在安全程序中使用Fuzzing可以帮助企业发现系统中未知的漏洞和0day攻击

  • Fuzzing是一种自动化技术,一旦fuzzer启动并运行,它就可以开始自己寻找bug,而不需要手动/人工干预,并且可以根据需要持续这样做。

  • 模糊测试的技术特点使其漏洞检测的准确率接近100%,并且可为每个漏洞提供详细的回溯调试信息,降低运维成本,消除误报带来的噪音。

五、模糊测试的未来

模糊测试的未来是智能模糊测试,具体如下:

  • 持续集成模糊测试:DevSecOps场景下,CI/CD持续集成Fuzzing技术为每次代码变更进行增量式智能测试,实现真正的“安全左移”;

  • 云原生模糊测试:利用云原生技术构建大规模分布式集群化Fuzzing平台,并行加速测试进度,实现效率更高、测试更精准的模糊测试;

  • 模糊测试即服务:FaaS( Fuzzing as a Service)——简单即用型Fuzzing产品成为现实。用户无须进行额外知识学习和复杂配置,即可“开箱即用”地使用智能化Fuzzing产品,使用门槛逐渐平民化。

  • 全栈漏洞检测能力:模糊测试技术不仅可以检测内存型漏洞,还可检测逻辑型漏洞,比如SQL注入、命令执行和条件竞争等等。

  • 智能攻防模糊测试:在美国CGC(Cyber Grand Challenge,“网络空间超级挑战赛”)中,AI赋能下的智能模糊测试技术已使机器人自动化攻防成为可能。

除此之外,模糊测试相对传统的人工审计、AST等安全检测方式,也有其得天独厚的优势,后续将会逐一展开介绍。

Fuzzing(模糊测试)技术,你真的了解吗?相关推荐

  1. Fuzzing(模糊测试)的前世今生(下)

    在<Fuzzing(模糊测试)的前世今生(上)>和<Fuzzing(模糊测试)的前世今生(中)>我们讲解了模糊测试技术的由来.技术原理和底层算法,本篇我们为大家简述一下模糊测试 ...

  2. 模糊测试技术简单整理(一)

    模糊测试技术 2022-01-09- 文章目录 模糊测试技术 预处理 1. 插桩: 2. 符号执行 3. 污点分析 基于AFL的模糊测试方法 输入构造 评估 结果分析 具体应用场景下的模糊测试 物联网 ...

  3. 官方教程:Go fuzzing模糊测试

    前言 Go 1.18在go工具链里引入了fuzzing模糊测试,可以帮助我们发现Go代码里的漏洞或者可能导致程序崩溃的输入.Go官方团队也在官网发布了fuzzing入门教程,帮助大家快速上手. 本人对 ...

  4. Fuzzing(模糊测试)的前世今生(中)

    在上一篇<Fuzzing(模糊测试)的前世今生(上)>中,我们讲解了模糊测试技术的由来,本篇我们重点为大家阐述一下模糊测试的技术原理和底层算法. 模糊测试的技术原理 模糊测试是一种发现软件 ...

  5. 知识普及:关于Fuzzing模糊测试入门原理及实践的讨论

    狩猎者网络安全旗下--知柯信息安全团队(知柯信安) 漏洞挖掘是否是真正的安全呢? "The best alternative to defense mechanisms is to find ...

  6. Smart Fuzzing智能模糊测试

    BSidesLison2016-Keynote-The Smart Fuzzer Revolution by Dan Guido 演讲者:Dan Guido 解读:CSDN@IT鹅 智能模糊测试在未来 ...

  7. Fuzzing(模糊测试)

    fuzzing是什么 fuzzing的基本思想是自动产生并执行大量随机的或经过变异的输入,以期望触发错误条件或引起程序故障.而这些错误条件或故障可以指导我们找出那些可挖掘的安全漏洞. 模糊测试是一种灰 ...

  8. 模糊测试-AFL学习笔记之C/C++

    目录 简介 文档 QuickStartGuide README perf_tips.txt status_screen INSTALL 安装 下载 编译 检查 例子 有源码-标准输入 源代码 编译 f ...

  9. 模糊测试:如何自动创建复杂的测试用例并发现未知错误

    作者 | Fabien Duchene 译者 | Sambodhi 据 Wikipedia 介绍,模糊测试 (fuzz testing, fuzzing)是一种软件测试技术,其核心思想是将自动或半自动 ...

最新文章

  1. boost::unorder_map如何插入元素_「React」如何在React中优雅的实现动画
  2. 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
  3. 转载CSDN (MVC WebAPI 三层分布式框架开发)
  4. 生鲜水产品牌“仙泉湖”获和智4000万元投资
  5. 全行业的关键点是探索数据的价值 挖掘商业模式
  6. 力控 串口服务器 虚拟串口,力控工业自动化组态软件eForceCon SD V2.0
  7. 跨时钟域电路设计——单bit信号
  8. RF和GBDT和Xgboost的异同总结,加上lightgbm
  9. linux oracle异常处理,Oracle SQL 异常处理
  10. 3.0 mysql配置讲解
  11. 小米笔记本bios版本大全_初级用户应该学习的BIOS知识
  12. 计算机方向关键字,从计算机的角度理解volatile关键字
  13. 跟华为悦盒V9U机顶盒拼了
  14. 进程调度算法的模拟实现
  15. NC单据模板公式(6大类)
  16. 美团|商家数据指标体系搭建实例 。
  17. 计算机中的栈的模板,栈类模板实现含界面.doc
  18. 根据年份和月份计算当前月有多少天?
  19. realtek是什么意思_realtek bluetooth是什么意思
  20. 在重新格式化时不要删除自定义换行符(Don‘t remove custom line breaks on reformat)

热门文章

  1. FX3开发板 及 原理图
  2. 关于网络安全必读的10本书
  3. 硬盘数据恢复软件 去限制版
  4. 专访童小军:Hadoop是未来大数据的标准
  5. Sublime Text 3 汉化包 +注册码
  6. 计算机密码口令管理制度,密码使用管理制度
  7. 带传动计算机辅助测试系统,基于VisualBasic的V型带传动计算机辅助设计
  8. [翻译]WP 平衡球游戏开发教程(三) -DebugDraw(XNA渲染)
  9. 计网实验c/c++、网络嗅探器的设计与实现
  10. 业余草推荐阿里妈妈自研广告点击率预估核心算法MLR