首页 > 其他分享 >7年经验之谈 —— 什么是模糊测试?

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

时间:2023-10-31 16:01:47浏览次数:35  
标签:AFL 变异 模糊 测试用例 经验之谈 测试 输入

背景:近年来,随着信息技术的发展,各种新型自动化测试技术如雨后春笋般出现。其中,模糊测试(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,里面会有很多测试资源和大佬答疑解惑,我们一起交流一起学习!

搜索

复制

标签:AFL,变异,模糊,测试用例,经验之谈,测试,输入
From: https://www.cnblogs.com/nhb1234/p/17800460.html

相关文章

  • 基恩士扫码枪配置及测试(RS232连接
       ......
  • 喜讯!东舟“实车测试机器人”发明专利通过国家知识产权局正式授权,创新成果获专利保护
    近日,东舟技术申报的《用于实车人机交互功能测试中的执行机构、PC上位机及测试方法》知识成果获得国家知识产权局授予发明专利!实车测试机器人是东舟技术在技术创新和研发方面取得的重要突破,该专利技术的应用将有效助力主机厂智能座舱实车测试工作效能提升。这项专利的授权不仅......
  • 使用网络测试仪对nfs服务进行挂载读写测试
    测试目的:Supernova网络测试仪是否支持对NFS服务进行测试测试拓扑:NFS服务器准备:开启NFS服务,并开放一个目录Supernova测试仪创建测试用例操作:测试结果验证:......
  • ffmpeg实现视频的分割生成测试用的图片视频和音频
    测试代码如下:#!/bin/bash#提示用户输入参数read-p"请输入要切分的MP4文件名:"filenameread-p"请输入要生成的视频数量:"video_countread-p"请输入视频文件的大小范围(单位MB,例如10-20):"video_size_rangeread-p"请输入要生成的图片数量:"image_countread-......
  • QECon大会亮相产品,支持UI自动化测试?RunnerGo
    最近在gitee上看见一款获得GVP(最有价值开源项目)的测试平台RunnerGo,看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用,果断使用了一下,对其中场景管理和性能测试印象深刻,之后也在公司自己安装使用,接下来和大家介绍一下RunnerGo的整体使用情况。RunnerGo......
  • QECon大会亮相产品,支持UI自动化测试?RunnerGo
    最近在gitee上看见一款获得GVP(最有价值开源项目)的测试平台RunnerGo,看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用,果断使用了一下,对其中场景管理和性能测试印象深刻,之后也在公司自己安装使用,接下来和大家介绍一下RunnerGo的整体使用情况。 Ru......
  • [-005-]-Python3+Unittest+Selenium Web UI自动化测试之页面滑动
    1.上下滑动a.滑动#滑动至页面底部:js1="window.scrollTo(0,document.body.scrollHeight)"self.driver.execute_script(js1)#滑动至页面顶部:js2="window.scrollTo(0,0)"self.driver.execute_script(js2)c.纵向滚动条通过scrollBy坐标来滚动#纵向滚动条通过scr......
  • 硬件测试常见仪器,线材,工具
    1,仪器:信号发生器:信号发生器是一个笼统的说法,实际上针对不同的电子产品,需要不同的信号发生器,信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信......
  • 硬件测试快速入门你必须了解的知识!
    硬件测试工程师这个职位越来越吃香,相对纯技术开发而言,要求不是那么高,但又需要一定技术含量。对于想从事技术领域,技术又不是那么自信的可以选择测试岗位,在测试中积累经验,晋升做技术开发,算是一个不错的过渡职位,对于想要从事技术领域的女生来说,也非常适合。测试工具的选择主要有以下......
  • 硬件测试
    硬件测试(1)测试含义在软硬件结合测试过程中,硬件的功能测试、性能测试、可靠性测试、兼容性测试、安全测试需要进行以下测试:功能测试:测试硬件是否按照设计要求正常工作。这包括对硬件的各种功能进行测试,以确保其符合预期的功能要求、确保硬件的正常工作。性能测试:测试硬件在各种......