7年经验之谈 —— 什么是模糊测试?

这篇具有很好参考价值的文章主要介绍了7年经验之谈 —— 什么是模糊测试?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:近年来,随着信息技术的发展,各种新型自动化测试技术如雨后春笋般出现。其中,模糊测试(fuzz testing)技术开始受到行业关注,它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里,我们将结合AFL开源工具,对模糊测试的基本概念和流程进行说明。

01、模糊测试的定义

模糊测试的核心思想是,根据一定的规则,自动或半自动生成的随机数据,然后将产生的数据输入到程序中,并监视程序是否有异常出现,以发现可能的程序错误,如内存泄漏、系统崩溃、未处理的异常等。

当一个模糊测试生成器开始启动并运行后,它将自己寻找漏洞,并不需要人工干预,非常有助于发现传统测试方法或手动审计无法检测到的缺陷。

模糊测试包括几个基本的测试步骤:确定被测系统->给定输入->生成测试用例->灌入用例进行测试->监控目标程序情况->输出崩溃日志。

图一:模糊测试流程

02、测试用例生成算法

模糊测试用例的生成算法主要有两种:

1)基于变异:根据已知数据样本,通过变异的方法生成新的测试用例;

例如对一个图片文件进行变异,用户需要提供一个相应格式的图片文件,变异生成器会基于该图片进行变异。著名的开源模糊测试工具AFL就是基于变异生成用例。

2)基于生成:根据已知的协议或接口规范,建模并生成测试用例;

某些程序可能对输入有严格的规则要求,例如必须是SQL语句、或者给定的协议规范等。测试引擎需要在测试前预先学习对应的语法语义规则,对其进行建模,在此基础上才能变异出有效的测试用例。

03、测试工具介绍

当前已经有很多开源的模糊测试工具,其中使用较为广泛的是AFL(American Fuzzy Lop),由谷歌工程师迈克尔·扎里斯基(Michal Zalewski)开发,该项目已经由Github托管。

在执行前,需要对被测程序源码进行插桩

(instrumentation),以获知被测程序的运行信息。在执行过程中,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其工作流程大致如下:

1. 从源码编译程序时进行插桩,以记录代码覆盖率;

2. 选择一些输入文件,作为初始测试集加入输入队列;

3. 将队列中的文件按一定的策略进行“突变”;

4. 如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;

5. 上述过程一直循环进行,期间触发crash的文件会被记录下来。

图二:AFL模糊测试的基本流程

AFL的优点是可以轻松部署,配置相对简单,测试效率相对较高。原生的AFL仅适配于C/C++程序的测试,不过目前已经衍生出很多分支,用于适配其他语言的模糊测试,如针对JAVA程序的Kelinci等。

04、用例变异方式

AFL是采用遗传算法,基于变异生成的测试用例,变异的主要类型有下面这几种:

· Bit flip,按位翻转,1变为0,0变为1

· Arithmetic,整数加/减算术运算

· Interest,把一些特殊内容替换到原文件中

· Dictionary,把自动生成或用户提供的token替换或插入到原文件中

· Havoc,又称“大破坏”,是前面几种变异的组合

· Splice,又称“绞接”,将两个文件拼接起来得到一个新文件

AFL需要一些初始输入数据(也称种子文件)作为模糊测试的起点,这些输入可以是毫无意义的数据。AFL通过上述方式自动确定文件的格式和结构。当输入队列中的全部文件都完成变异测试,则完成了一个Cycle(周期),如果用户不停止执行,种子文件将会不断变异下去。

图三:AFL监控台,显示当前为Cycle 6, Splice 12阶段

扎里斯基曾经给出一个有趣的例子,对djpeg(一个Linux系统上的图像处理程序)进行模糊测试,在仅初始输入“hello”字符串的情况下,最后凭空生成了大量jpeg的图像。

综上所述,我们简要介绍了模糊测试的概念以及开源工具AFL的测试流程,欢迎持续关注。

最后如果你想学习自动化测试和需要软件测试资料,欢迎加入笔者的交流群:320231853,里面会有很多测试资源和大佬答疑解惑,我们一起交流一起学习!

搜索

复制文章来源地址https://www.toymoban.com/news/detail-733869.html

到了这里,关于7年经验之谈 —— 什么是模糊测试?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 8年经验之谈 —— Android自动化测试中如何处理各种弹窗?

    在UI自动化测试中弹窗是影响自动化用例稳定性的一大因素,如何方便快捷的处理各种情况下的弹窗,是搞UI自动化测试必须要面临的问题. 安装APP时的系统弹窗 此类弹窗一般有两种,一种是自动化测试框初始化本身也需要安装一些APP,比如uiautomator2会安装atx-agent、com.github.

    2024年02月11日
    浏览(39)
  • 【控制项目风险经验之谈】

    项目风险是指在项目执行期间可能会影响项目目标、进度、成本或质量的不确定因素。在项目管理中,项目风险是不可避免的,因此需要采取措施来控制和管理项目风险。本篇文章将详细介绍如何控制项目风险的经验之谈。 一、确定风险管理计划 在项目启动阶段,应该制定

    2024年02月14日
    浏览(34)
  • 网络安全—入职大厂经验之谈

    大三想去实习,趁现在该干什么才能去大厂实习呢?想做一些事丰富一下自己的简历,只有打ctf?还是挖洞?非常迷茫。 或者入职转行网络安全行业应该怎么做?对于接下来的职业规划学习计划有什么打算? 1. 你的专业知识一定要学得扎实。这不是指要你考试考多高的分,

    2024年02月16日
    浏览(37)
  • 9大Python常用技巧 经验之谈

    整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「 Regex 」完成这项工作。但是如果问题很复杂,可能有更好的方法来解决: 在本例中,你可以看到空格符「 n 」和「 t 」都被替换成了单个空格,

    2024年02月03日
    浏览(40)
  • 程序员搞副业经验分享:卖书、做网课,探秘前同事的经验之谈

    为了更深入了解程序员如何进行创收,今天与一位曾在几年前成功通过卖书和网课获取收益的前同事进行了交流。由于他曾有过丰富的经验,我向他请教了一些相关经验,以下是我想获取的信息: 你目前还在通过做网课获得收益吗? 没有。不再从事网课的主要原因有两点:

    2024年03月09日
    浏览(63)
  • 局域网故障排除经验之谈 网卡故障居多

    局域网是网中各种系统运行的硬件平台,其故障影响着系统中各项工作的顺利进行。局域网的维护工作特别是故障的预防和及时排除是保证工作顺利进行的保障。现在谈一谈维护工作中故障排除的一点体会。 我们知道,网络故障可分为硬件故障和软件故障两大类。当排除了所

    2024年02月07日
    浏览(41)
  • 售前工程师,一个老网工的经验之谈

    晚上好,我是老杨。 老粉应该知道,我个人的职业发展是简单的,一开始做的是售后,后面接触了一段售前,就直接升到项目经理了。 可以说,我对售后和售前的岗位认知都是相对比较透彻的。 但在网络行业,其实岗位远不止这三个。 在4月初,团队伙伴开发了一个新选题

    2024年01月21日
    浏览(38)
  • Cmake:Error in configuration process,project files may be invalid.Qt编译opencv的经验之谈。

    Error in configuration process,project files may be invalid. 我这个是使用cmake来 编译opencv  +Qt。 Qt的这个路径 要放在环境变量的path中:E:Qt5Qt5.14.1Toolsmingw730_64bin 。 出错的原因是,没有按顺序操作Cmake界面按钮。 1.配置CMake编译条件 ①打开CMake(cmake-gui)。 ②选择OpenCV安装目录下的源码文

    2024年02月03日
    浏览(51)
  • 为什么近年来很多学校开设了集成电路专业?

    目录 1.什么是集成电路 2.中国集成电路的发展现状 3.美国对中国集成电路发展的打压 4.高校开设集成电路专业对中国芯片发展的影响         集成电路(Integrated Circuit,简称IC)是一种在半导体材料上集成了大量电子元件的电路。它通常由晶体管、电阻、电容等多种电子器

    2024年02月14日
    浏览(50)
  • 什么是汽车软件的模糊测试?

    汽车软件的模糊测试(fuzz testing)是一种在软件开发过程中用来发现潜在漏洞和缺陷的测试方法。它通过输入大量的随机、无效或异常数据来模拟真实环境中各种可能的异常情况,以测试软件的健壮性和稳定性。 1. 确定模糊测试的目标:确定要测试的软件模块或功能。对于汽

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包