• 浅谈模糊测试


    浅谈模糊测试

    简要介绍模糊测试的概念及简单的运用

    1. 模糊测试简介

    模糊测试(fuzz testing, fuzzing) 是一种自动或半自动的软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏等。其中用于输入的随机数据和不合法的数据被称为“FUZZ”。
    

    Fuzzing 技术可以追溯到1950年,当时计算机的数据主要保存在打孔卡片上,计算机程序读取这些卡片的数据进行计算和输出。如果碰到一些垃圾卡片或一些废弃不适配的卡片,对应的计算机程序就可能产生错误和异常甚至崩溃,这样,Bug就产生了。1988年,在威斯康星大学的一个关于研究UNIX的模糊测试的项目中,正式使用了“Fuzzing” 这个词。

    关于模糊测试的定义,有很多种说法。有人认为Fuzzing 是软件测试中的随机测试技术;有人认为Fuzzing 的重要组成部分是暴力测试;有人认为 Fuzzing 是一种简单的黑盒测试技术;也有人认为Fuzzing 是黑盒测试技术中的边界测试技术;还有人认为Fuzzing 是黑盒测试、错误注入、压力测试技术的融合等。

    总体来说,可以把这几种说法结合起来,大致认为Fuzzing 是把随机测试和边界测试技术、协议和软件知识、具体执行和试探性攻击结合在一起的测试技术。

    2. 模糊测试的意义

    通常,我们在进行测试设计的时候,针对被测对象的特性,一般会采用错误猜测或其他技术设计一些异常的用例,检验被测对象在非正常情况下处理异常的能力,以发现被测对象中潜在的缺陷。采用这种方式进行测试设计时,会面临一个问题,测试用例通常是不确定的、模糊的,为什么会有不确定的测试用例,可能的原因如下:

    • 在有限的时间内无法穷举所有的异常输入。我们在进行测试设计时,一般会考虑正向测试、反向测试、边界值、超长、超短等场景,但我们无法在有限的时间内把所有异常的输入都遍历一遍。
    • 在有限的时间内无法想到所有可能的异常场景。由于脑力的限制,我们没有办法想到所有可能的异常组合,尤其是对于越来越依赖于操作系统、中间件、第三方组件的系统,这些系统中潜在的bug 或者组合后形成的bug,是我们无法预知的。

    随着软件复杂度的增加,可选的输入可以认为有无限个组合,所以即使是使用软件在有限的时间内来遍历测试也是不现实的。在应对这类问题上,模糊测试有一定的优势。

    • Fuzzing 技术是一种自动或半自动化的技术,即软件可自动执行相对随机的测试用例。因为是依靠计算机软件自动执行,所以测试效率相对人来讲远远高出几个数量级。比如,一个测试人员一天执行的测试用例数量,使用Fuzzing 工具可能几分钟就执行完了。

    • Fuzzing 技术本质是依赖随机函数生成随机测试用例,随机性意味着不重复、不可预测,可能有意想不到的输入和结果。

    • 根据概率论里面的“大数定律”,只要重复的次数够多、随机性够强,那些概率极低的偶然事件就必然会出现。Fuzzing 技术就是大数定律的典范应用,足够多的测试用例和随机性,就可以让那些隐藏的很深很难出现的bug 成为必然现象。

    • Fuzzing 技术可以用于检测软件的脆弱性,这也是使其成为安全性测试常用的一种手段的原因。

    当然,模糊测试只是相当于对系统的行为做了一个随机采样,所以在许多情况下通过了模糊测试只是说明软件可以处理异常以避免崩溃,而不能说明该软件的行为完全正确。这表明模糊测试更多是一种对整体质量的保证,并不能替代全面的测试或者形式化方法。作为一种粗略的可靠性度量方法,模糊测试可以提示程序哪些部件需要特殊的注意。对于这些部件可以进一步使用代码审计,静态分析以及代码重写。

    3. 模糊测试的执行流程

    模糊测试的执行流程一般包括以下几个步骤:

    • 明确测试对象
    • 分析测试输入
    • 生成模糊数据
    • 使用模糊数据进行测试
    • 监控系统行为
    • 记录缺陷

    4. 模糊测试在接口安全性测试中的简单应用介绍

    接口测试中,通常针对不同的输入字段,我们会设计正向的测试用例和反向的测试用例,上述内容中也提高过,执行的效率较差。采用Fuzzing 技术进行测试时,一般借助工具来执行测试,以快速的生成测试数据,快速的进行测试,以发现安全缺陷。
    

    以下介绍下我们常用的SoapUI 工具在进行模糊测试时的简单使用。

    我们以 http://www.httpbin.org/get?key1=foo&value1=bar 为例来进行简单的测试执行,以查看这个工具在进行Fuzzing Scan 时创建的一些测试数据。
    
    • 创建功能测试用例

    • 功能测试用例流程调通后,创建安全测试用例

    • 执行Fuzzing Scan

    从工具执行时输入的两个参数 key1 和 value1 的值可以看出,参数值都是随机生成的。这也体现了Fuzzing 的思想,自动生成随机数据。
    上述介绍只是这个工具关于Fuzzing Scan 的一种简单用法,其支持更多的操作,更多的内容可以参考官网的介绍。

    4. 参考

    https://www.cnblogs.com/LittleHann/articles/3130946.html
    https://www.freebuf.com/sectool/76861.html
    http://www.sohu.com/a/218884614_723268
    https://blog.csdn.net/weixin_34040079/article/details/93931030?utm_source=distribute.pc_relevant.none-task
    https://blog.csdn.net/qq_33414271/article/details/101321331
    https://blog.csdn.net/wcventure/article/details/82085251
    https://blog.csdn.net/bopzhou/article/details/5831122
    
    种一棵树最好的时间是十年前,其次是现在!
  • 相关阅读:
    28,intellij idea工程包含scala代码这样打包
    1、调侃程序员
    2 20个常用正则表达式
    27 Java动态加载第三方jar包中的类
    26 查看文件内容有多少行?
    25 读取jar包内log4j.properties文件方法
    MySQL表类型
    Hibernate-检索策略
    Hibernate-Native SQL
    Hibernate-Criteria Queries
  • 原文地址:https://www.cnblogs.com/gaozhidao/p/12313390.html
Copyright © 2020-2023  润新知