介绍模糊测试(Fuzz Testing,Fuzzing)

一、什么是模糊测试?

模糊测试是一种自动或半自动的测试技术,常被用来发现软件/操作系统/网络的代码中的错误和安全性问题,其中用于输入随机的数据和不合法的数据被称为“FUZZ”。之后,系统将被监视各种异常,如系统崩溃或内置代码失败等。

模糊测试最初是由威斯康辛大学的巴顿·米勒于1989年开发的。模糊测试是一种软件测试技术,是安全测试的一种。

二、为什么要做模糊测试?

  • 通常,模糊测试会发现最严重的的安全错误或缺陷
  • 当与黑箱测试、Beta测试和其他调试方法一起使用时,Fuzz测试会产生更有效的结果。
  • 模糊测试用于检测软件的脆弱性。这是一种非常经济有效的测试技术。
  • 模糊测试是黑盒测试技术之一。模糊是黑客发现系统漏洞最常用的方法之一。

三、如何做模糊测试

模糊测试的步骤包括以下基本的测试步骤:

步骤一:识别目标系统

步骤二:确定输入

步骤三:生成模糊数据

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

步骤五:监控系统的行为

步骤六:记录缺陷

四、模糊工具(Fuzzers)举例

  • Mutation-Based Fuzzers alter existing data samples to create new test data. This is the very simple and straightforward approach, this starts with valid samples of protocol and keeps mangling every byte or file.

  • Generation-Based Fuzzers define new data based on the input of the model. It starts generating input from the scratch based on the specification.

  • PROTOCOL-BASED-fuzzer, 最成功的fuzzer是对正在测试的协议格式有详细的了解。理解取决于规范。它包括在工具中编写一个规范数组,然后使用基于模型的测试生成技术遍历规范并在数据内容、序列等中添加不规则性。这也称为语法测试、语法测试、健壮性测试等。Fuzzer可以从现有的测试用例生成测试用例,也可以使用有效或无效的输入。

主要包含3中不同类型的fuzzer,基于交叉、生成和协议的。

由于部分翻译起来比较生硬,还是英文对比起来比较直观,所以就不翻译了。

protocol-based fuzzing的两个限制:

  • 在规范成熟之前不能进行测试。
  • 许多有用的协议都是已发布协议的扩展。如果fuzz测试基于已发布的规范,则新协议的测试覆盖率将受到限制。

模糊技术最简单的形式是将随机输入作为协议包或事件发送给软件。这种传递随机输入的技术对于发现许多应用程序和服务中的错误非常有用。其他技术也是可用的,并且很容易实现。要实现这些技术,我们只需要更改现有的输入。我们可以通过交换输入的位来改变输入。

五、通过模糊测试检测到的bug类型

  • Assertion failures and memory leaks this methodology is widely used for large applications where bugs are affecting the safety of memory, which is a severe vulnerability.
  • Invalid input In fuzz testing, fuzzers are used to generate an invalid input which is used for testing error-handling routines, and this is important for the software which does not control its input. Simple fuzzing can be known as a way to automate negative testing.
  • Correctness bugs Fuzzing can also be used to detect some types of “correctness” bugs. Such as a corrupted database, poor search results, etc.

总的来说包括了以上3种类型的bug:内存泄漏、非法输入和部分“正确的”bug。

Advantages of Fuzz Testing

  • 提升了软件安全性的测试
  • 模糊测试发现的通常是严重的错误,而且是容易被黑客攻击的错误
  • 模糊测试可以发现那些由于时间和资源限制而无法被测试人员发现的错误

Disadvantages of Fuzz Testing

  • 仅靠模糊测试无法全面了解整个安全威胁或bug。
  • 在处理不会导致程序崩溃的安全威胁时,例如某些病毒、蠕虫、木马等,模糊测试的效率较低。
  • 模糊测试只能检测简单的错误或威胁。
  • 为了有效地执行,这将需要大量的时间。
  • 设置带有随机输入的边值条件是非常有问题的,但是现在使用基于用户输入的确定性算法,大多数测试人员解决了这个问题。

小结

在软件工程中,Fuzz测试显示应用程序中存在bug。模糊不能保证在应用程序中完全检测出bug。但是通过使用Fuzz技术,它确保了应用程序的健壮性和安全性,因为这种技术有助于暴露大多数常见的漏洞。

参考链接:

https://www.guru99.com/fuzz-testing.html

介绍模糊测试(Fuzz Testing,Fuzzing)相关推荐

  1. linux 符号执行,[原创]符号执行Symcc与模糊测试AFL结合实践

    上个月末无聊的划水时间段内,在推上看到有人发了一篇关于如何结合去年新发布的符号执行Symcc与模糊测试引擎AFL,以提升Fuzz效率的视频贴.打开这个链接后才发现是个卖课的,emmm.... , 看价 ...

  2. 基于TCP协议fuzz testing模糊测试案例分享

    1.模糊测试概念: 模糊测试 (fuzz testing, fuzzing)是一种软件测试技术.其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion ...

  3. 【转】模糊测试(fuzzing)是什么

    一.说明 大学时两个涉及"模糊"的概念自己感觉很模糊.一个是学数据库出现的"模糊查询",后来逐渐明白是指sql的like语句:另一个是学专业课时出现的" ...

  4. 模糊测试(fuzzing) 概念

    看到一个不错的,转来压压惊. 模糊测试(fuzzing)是什么 一.说明 大学时两个涉及"模糊"的概念自己感觉很模糊.一个是学数据库出现的"模糊查询",后来逐渐 ...

  5. 接口模糊测试工具java,api 接口 fuzz 测试初探

    Alt pic 目标 在日常测试工作中,经常会有api接口的测试,除了正向流程的测试之外,我们经常还需要覆盖一些异常情况. 例如: 不合法字符串 字符串超长 应该是数字类型的,传入了字母 参数为空 传 ...

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

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

  7. 漏洞挖掘 | 简单高效的模糊测试Fuzzing

    文章目录 定义 用途 技术 详细说明 流程图 1.大量的测试用例 2.对测试用例做过滤 3.要用正确的方法 4.花90%时间阅读文档 5.Fuzzing工具 摘要:Fuzzing是一种通过构造输入来发 ...

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

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

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

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

最新文章

  1. nginx负载均衡 页面缓存
  2. 面对颇有心机的同事要具备的四个心态
  3. Part Five 音视频API
  4. JavaScript基本类型值和引用类型值的复制问题
  5. ssh-keygen+ssh-copy-id无密码登录远程LINUX主机(转载)
  6. 织梦head.html,DeDe织梦cms主要模板head区域常用调用标签
  7. 解决SVN403问题
  8. java基础篇(二) ----- java面向对象的三大特性之继承
  9. Objective-C JSON字符串解析
  10. ESP32实战小项目-小气象站
  11. 5g消息与服务器,5G消息app下架 中国移动回应会重新上架
  12. 从三大方面,分析 to B和 to C产品的区别与联系
  13. 线程1(Thread)
  14. Android9.0 紧急号码配置
  15. 【Axure教程】中继器版穿梭表格
  16. Spring-boot启动出现:“if you put a @ComponentScan in the default package by mistake” 错误。
  17. 一个refine/refactor的例子
  18. MicroC实现Expr部分和for循环,无续算版本Comp.fs展示
  19. MapReduce优劣,理解MapReduce与Hadoop
  20. MySQL 之高级命令

热门文章

  1. 基于Android Studio的Android内存泄漏检测方法
  2. Python | 排列与组合
  3. 全新风格、高颜值高冷、高动力强劲——MINIWARE的体感螺丝刀套装测评
  4. Nginx服务器优点
  5. mac系统idea的终端无法识别mvn命令解决办法
  6. 3500x架构_3500x和 区别有多大 Ryzen 5 3500x Vs 3600
  7. 【操作系统】内存泄漏和内存溢出
  8. 正则表达式-提取开头和结尾之间的字符串
  9. MVCC详解,深入浅出简单易懂
  10. ToolBar的使用