首页 > 其他分享 >论模糊测试

论模糊测试

时间:2023-01-16 16:11:31浏览次数:52  
标签:灰盒 黑盒 白盒 覆盖率 模糊 测试 软件

最近重新在看一个很老的技术,模糊测试fuzz

一、基本背景

在探讨fuzz前,我们来回顾下软件测试的定义,软件测试的经典定义是:
在规定的条件下对思进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

其中软件测试按照技术可分为3类:

黑盒测试:

黑盒测试,顾名思义即为将软件测试环境模拟为不可见的“黑盒”。通过数据输入观察数据输出,检查软件内部功能是否正常。测试展开时,数据输入软件中,等待数据输出。数据输出时若与预计数据一致,则证明该软件通过测试,若数据与预计数据有出入,即便出入较小亦证明软件程序内部出现问题,需尽快解决。

白盒测试:

白盒测试相对于黑盒测试而言具有一定透明性,原理为根据软件内部应用、源代码等对产品内部工作过程进行调试。测试过程中常将其与软件内部结构协同展开分析,最大优点即为其能够有效解决软件内部应用程序出现的问题,测试过程中常将其与黑盒测试方式结合,当测试软件功能较多时,白盒测试法亦可对此类情况展开有效调试。

灰盒测试:

是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

 

在工作场景中(包括操作系统、工控、闭源商业软件、开源互联网软件等场景):

1)攻击方能得到源码的场景占比较少,大部分场景下以开展黑盒测试为主。

2)防守方则在拥有源码、测试环境的情况下,开展白盒和灰盒测试。

 

二、Web安全测试

中国随着互联网行业快速发展,web安全也伴生的开始逐步火热起来。

白盒:fortify、checkmarx的代码安全测试、部分0day则通过深度人工代码审计

黑盒:bp、xray为主以针对http协议的渗透测试

灰盒:利用插桩分析程序上下文

我们剖析一下背后的发展逻辑:

1)最早的web漏扫以爬虫为核心竞争力,因为有强大的web爬虫就代表着强大的逻辑覆盖率,谁能爬行更多的页面,谁就能发现更多的漏洞。

2)之后bp等手工工具开始火热,因为bp手工能开展一些漏扫不能覆盖的逻辑漏洞,虽然漏扫在之后也新增了相关越权漏洞的能力,但是在复杂金融支付、密码找回、身份变更等强逻辑流程中,漏扫只能败于bp等手工渗透工具。

3)而web漏扫为了解决爬虫覆盖率的问题,被动漏扫开始替代主动扫描逐步占据了市场,测试人员通过手工录入、镜像流程手段将正常请求进行变形,包括:payload插入、替换,随机特殊字符植入等,以开展安全测试。

被动漏扫是针对协议级的测试行为,通过http协议的传输标准对入参变形填补payload,其中各类paylaod都是人工测试总结出来的数据集,该技术目前已经相当成熟。插桩灰盒iast产品则在输入路径、逻辑上下文、覆盖率上产生了优势。

产品对比:

1)白盒测试中代码安全扫描覆盖率最佳,但是准确率不如动态测试精确、上下文信息详细。白盒测试中人工代码审计在挖掘深度逻辑漏洞方面明显由于代码安全扫描。

2)黑盒测试通用于攻击方和防守方,可以针对协议使用成熟的payload进行数据流安全测试,但是逻辑流安全测试的覆盖率会随系统设计上下浮动,逻辑漏洞主要通过人工渗透进行深度挖掘。

3)灰盒测试通过插桩技术确保数据输入点覆盖率和逻辑分支的覆盖率,该技术主要针对数据流安全测试不适用于逻辑流。

 

三、模糊测试

模糊测试是一种自动化、动态的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞。模糊测试的核心是自动或半自动的生成随机数据输入到应用程序中,同时监控程序的异常情况,如崩溃、代码断言失败等以此发现可能的程序错误或漏洞,如内存泄漏、缓冲区溢出等。模糊化是指自动生成和执行测试,模糊测试中输入的随机数据被称为“Fuzz”,随机数据的类型包括:超长字符串;随机数如负数,浮点数,超大数、特殊字符如~!@#$%等包含特殊含义的字符(web的CTF题基本以探测能用的特殊字符作为解题第一步),作为输入可能会引发报错。

其实模糊测试与web安全中的黑盒动态漏扫和灰盒插桩其实没有本质区别:

1)通过探针尽可能的搜集程序信息提供给测试人员,增加测试人员对程序异常的分析准确度和分析效率

2)极力输入变形数据保证测试的覆盖率(这个覆盖率是广义多维度的,包括代码覆盖率、边界覆盖率、数据覆盖率)

我认为模糊测试的两大特性让软件的质量得到了保证,尤其是通过大量变异输入,监控对应输出和程序上下文帮助测试人员挖掘程序异常。

 

本节总结:

尽可能的让程序执行各种可能性,通过详细的信息让开发人员高质量、高效率修复问题。

 

四、模糊测试的未来

我认为go语言和rust原生内置fuzz的行为非常符合未来软件的发展方向:

go fuzz 参考链接:https://mp.weixin.qq.com/s/-CRxppLwQbNcLmdNml3TqA

rust fuzz 参考链接:https://mp.weixin.qq.com/s/40pCP1A5LmOQyo8t5oei5g

 

目前开发安全工作中主要追求“左移”思想(其实就是安全生产中“成本法则”的新造词),将软件问题在研发过程中消灭。那么在开发过程中尽可能的将各种可能性都尝试一次,将会大大减少软测人员在数据流和部分逻辑流方面的投入。

尤其是go语言和rust本身是内存安全语言,该类语言开发的软件天生规避了部分内存安全问题,对成本方面也进一步得到了提高。

我认为未来的fuzz会深度结合单元测试,通过代码覆盖率、共享fuzz的测试代码减少软件问题、减少软测人力成本、增加开发速度。

 

谢谢

标签:灰盒,黑盒,白盒,覆盖率,模糊,测试,软件
From: https://www.cnblogs.com/k4n5ha0/p/17055256.html

相关文章

  • 几个《软件方法》测试链接,欢迎有空自测,争取做到全对
    几个《软件方法》测试链接,欢迎有空自测,争取做到全对!《软件方法》第1章测试1​​http://www.umlchina.com/book/quiz1_1.htm​​​《软件方法》第1章测试2​​http://www.uml......
  • MeterSphere 性能测试配置和参数说明
    1. 什么是性能测试性能测试即通过工具来模拟用户请求,达到查看服务性能是否能满足实际生产需求的目标。系统性能好坏是一个相对概念,核心思想是能满足生产需求,因此进行性能测......
  • 如何通过 API 触发 MeterSphere 测试计划
    1关于MS接口的API调用1、请求的HTTP头要设置两个值:accessKey和签名2、加密方式:对称加密3、加密算法:AES,加密模式:CBC,填充方式:PKCS5Padding4、签名中加了时间戳,也就是说......
  • RK3568工业级核心板高温运行测试
    Rockchip RK3568 是一款通用型MPU,产品集成GPU、NPU,支持4K、HDMI、LVDS、MIPI、PCIe3.0、USB3.0、千兆以太网、CAN-BUS、UART等丰富外设接口。 RK3568的高温工作情况如何......
  • MeterSphere接口测试模块中循环控制器的使用
    MeterSphere开源持续测试平台的“接口测试”模块具有灵活的接口场景编排设计,模块覆盖了多种接口协议,可自由组合接口自动化测试场景,为接口测试带来方便快捷的体验。其中,逻辑......
  • 电动自行车出欧盟需要做CE认证,EN15194标准测试
    电动滑板是以传统人力滑板为基础,加上电力套件的交通工具,目前的电动滑板一般分为双轮驱动或单轮驱动。电动滑板出口欧盟是需要办理CE认证的,电动滑板CE认证标准为EN15194:201......
  • RK3568工业级核心板高温运行测试
    Rockchip RK3568 是一款通用型MPU,产品集成GPU、NPU,支持4K、HDMI、LVDS、MIPI、PCIe3.0、USB3.0、千兆以太网、CAN-BUS、UART等丰富外设接口。 RK3568的高温工作情况如何......
  • python—web自动化(4)—测试框架之unittest2使用
    学习目标:自动化测试框架搭建需求分解:unittest2测试用例BaseTestCase:封装测试用例中相同的部分数据驱动测试(ddt):测试数据与操作分离生成测试报告:......
  • 不同方法合并文件时间测试
    名称含义用时(s)写文件总用时(s)单核写入全文 146146多核并行写入多(6)部分 101 cat合并linuxcat命令173274py......
  • 亚马逊上架打火机UL147测试标准
    最近很多客户过来咨询,亚马逊上有人投诉产品安全问题,亚马逊要求提供UL报告,怎么办?特别是安全电气类产品,很多卖家不约而同的提出同样的问题。不要着急,我司已经处理过很多类似产......