Fuzz的原理与实现

本文介绍了模糊测试的概念,其用于识别程序潜在漏洞的重要性。AFL作为一种常见的模糊测试工具,通过代码覆盖率引导来优化测试输入,提高发现漏洞的效率。文章还详细讲解了AFL的工作流程,以及如何使用AFL进行测试,包括环境设置、编译和测试过程,并解析了测试结果。同时,提到了黑盒、白盒和灰盒测试的分类及其优缺点。

请添加图片描述

模糊测试(fuzz testing)是一种自动化的软件测试技术,通常用于识别程序中的潜在漏洞。其概念最早由威斯康辛大学的巴顿·米勒于1989年提出。AFL是一种fuzz方法,目前广泛使用在模糊测试中。本篇博客介绍了使用模糊测试的目的,以及AFL实现模糊测试的原理,并依据案例具体实现AFL。

我们为什么需要fuzz

经常使用microsoft word的人知道,虽然microsoft word已经是一款十分成熟的软件,但是依旧存在大量能够使 Microsoft Word 崩溃的坏文件。极端条件下,少数字节错位,会使整个应用程序毁于一旦。在旧式的、无内存保护的操作系统中,整个计算机通常就这样宕掉了。 这种情况下Microsoft Word 不能意识到它接收到了坏的数据,并发出一条错误信息,并且仅仅因为少数字节损坏Microsoft Word 就破坏自己的栈、堆,甚至于影响了整个操作系统。发生在microsoft word上的报错事实上也发生在许多其他软件中,因为错误的输入导致系统坏掉是令软件开发者头痛的事情,开发者需要知道哪些输入会带来系统毁灭性的打击。

在模糊测试中,用随机坏数据(也称做 fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震撼,因为任何按逻辑思考的人都不会想到这种失败。

模糊测试是一项简单的技术,但它却能揭示出程序中的重要 bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。

fuzz方法分类

现阶段fuzz方法可以分成3类:

  1. 黑盒模糊测试:黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。
  2. 白盒模糊测试:白盒测试也称为结构测试,主要应用于单元测试阶段,检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。
  3. 灰盒模糊测试:是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

黑盒模糊测试和白盒模糊测试的优点与缺点列举如下:

测试方法 黑盒测试 白盒测试
优点
  • 简单,不需要了解程序内部代码;
  • 用户角度出发,容易知道用户会用到哪些功能哪些问题;
  • 软件自动话测试时比较方便
  • 增大代码覆盖率
  • 提高代码质量,发现代码中隐藏问题
缺点
  • 不可能覆盖所有代码,覆盖率低
  • 自动化测试复用性低
  • 程序运行会有不同路径,不可能测试所有路径
  • 测试基于代码,只能测试开发人员做的对不对,而无法知道涉及的功能需求是否正确
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值