当前位置: 首页 > news >正文

模糊测试究竟在干什么

目录

1.软件漏洞和缺陷

2.模糊测试与传统测试

3.汽车领域中的模糊测试

 4.常见工具总结


1.软件漏洞和缺陷

提单、上票、拒收,这是开发和测试的日常博弈。大多数时候,我们是根据自己对需求的理解来进行开发和测试,这基本是属于功能层级。

这种方式验证出来的问题叫软件缺陷,通俗叫Bug,一般是在开发时由于编码错误、逻辑错误或者需求理解错误造成程序无法正常运行或者用户体验受损。

但还有一种缺陷,叫做软件漏洞,它可以被攻击者加以利用,破坏系统安全策略、窃取数据或执行恶意操作,这一般是开发者不曾考虑的范畴,通常是由安全团队介入,进行信息安全相关的测试,例如渗透测试、漏洞扫描、以及今天要聊的模糊测试。

换句话讲,漏洞是缺陷的子集,但并非所有缺陷都是漏洞,只有那些可能被恶意利用的缺陷才会被归类为漏洞。

我们都知道,软件不可能没有缺陷或者漏洞,这可能也就意味着即使安全团队挖掘并修复了很多漏洞,但仍旧存在很多未知的漏洞,有一张图很形象,我们看得到的漏洞可能就是冰山一角:

 除了已知漏洞和未知漏洞之外,还存在一类漏洞,叫零日漏洞,它通常指还没有补丁的安全漏洞。“零日”(0-day)来源于漏洞被公开后,补丁未出现的天数。

漏洞被公开当天,很难及时推出补丁,所以称为零日漏洞;如果N日后仍然没有补丁,则称为N日漏洞。所以,我们常听到的“零日攻击”就可以理解为针对此漏洞的攻击出现在漏洞公开当天,以此类推。当然,这不是今天的主题,仅作延伸。

2.模糊测试与传统测试

我们最常接触的测试手段主要就包括静态测试和动态测试,而动态测试主要分为白盒、灰盒和黑盒。白盒测试,顾名思义我们了解待测对象的内部结构,以此为基础进行测试;黑盒测试,就是只能通过给定输入,来观察输出是否符合预期;灰盒测试则介于白盒和黑盒之间,不仅关注输入输出,还关注目标内部状态。

很明显,这类测试手段依赖测试人员的专业素质、预定义模式,针对公开漏洞的测试有一定优势,但很难挖掘出未公开的攻击方法和漏洞。

为此,模糊测试站了出来。

模糊测试(Fuzz Test)通过大量生产随机或者变异的输入数据,有一定几率能够模拟攻击者行为,从而触发软件系统中隐藏的漏洞或者缺陷。

为啥叫模糊了,大概是因为其模糊的特征的。

模糊测试最初被称为"猴子测试",灵感来源于猴子随机敲击键盘的行为(1983年Steve Capps开发的Mac测试工具),这种测试方法就像"蒙眼投飞镖"——不依赖测试人员对程序逻辑的深入理解,而是通过随机生成输入数据触发异常,输入路径不可预测、输入数据无规律;

此外,模糊测试的模糊还体现在测试数据的生成逻辑,主要有三种:

  • 结构模糊:变异型模糊测试(Mutation-based)会破坏正常数据的格式,例如将PDF文件格式.PDF改为.PDQ
  • ​语义模糊:生成型模糊测试(Generation-based)虽遵循协议规范,但会故意违反字段约束,例如在HTTP请求中插入未定义的协议版本号
  • ​边界模糊:针对数值型字段注入极端值(如超长字符串、负数、浮点溢出值),打破程序预设的输入假设

 在实际的模糊测试里,大致可分为四个步骤:

(1)识别待测对象和输入:主要包括识别被测对象类型,是Bin还是源码,是否有公开漏洞记录,在此基础上识别是由可能的输入向量,有助于提高测试覆盖;

(2)基于规则生成模数测试数据,包括现有数据变异、临时数据生成、边界值生成等等;

(3)执行测试:通过自动化工 具,大规模地生成和执行测试用例,从而提高测试效率和覆盖率;

(4)观察行为、记录漏洞:在模糊测试过程中,通过自动化工具来实时观察系统行为的异常,包括参数值和返回值收集等等;如果发现了潜在缺陷,首先是多次复现,其次是评估该缺陷是否能进一步升级为漏洞,判断会被恶意利用,最后记录和修复。

3.汽车领域中的模糊测试

汽车网络安全已被提到了一个高度,因此网络安全测试是汽车整车开发中必不可少的部分。

在ISO21434中明确提高,除了常见的功能测试,还需要漏洞扫描、模糊测试和渗透测试,在开发早期尽可能识别潜在漏洞,从而提升汽车的鲁棒性。

由于汽车本身是一个多学科融合的复杂工作,其攻击面涵盖了几乎我们能想到的产品,安全团队的测试人员完全可以利用模糊测试对WIFI、蓝牙、CAN、V2X、充电桩、NFC等进行协议模糊测试,除此之外,在智驾领域,任何漏洞或者缺陷都可能造成严重后果,因此针对雷达、摄像头等输入数据进行模糊测试,也是非常有必要的。

 4.常见工具总结

最后,先汇总一下常见的模糊测试工具。

工具类型工具名称核心功能与特点典型应用场景
覆盖率引导型AFL/AFL++基于遗传算法优化测试路径,插桩获取覆盖率反馈,擅长发现内存损坏错误C/C++程序、网络协议
LibFuzzer集成于LLVM编译链,直接测试库函数,无需进程间通信开源库(如OpenSSL加密模块)
协议与文件测试Peach Fuzzer通过XML定义数据模型生成结构化输入,支持复杂协议和文件格式(如PDF、JPEG)工控Modbus、车载CAN总线
BoofuzzPython编写的网络协议框架,继承自Sulley,支持自定义协议规范TCP/UDP协议测试
Radamsa通用变异型模糊测试,生成随机异常输入(文本/二进制)复杂输入处理程序
智能生成型Fuzzilli生成语法合法的JavaScript代码,针对JS引擎(如Chrome V8)JavaScript引擎漏洞挖掘
LLM-Fuzzer利用大语言模型(如GPT-4)生成符合语义的测试用例(如SQL注入)Web应用逻辑漏洞
操作系统内核测试syzkaller随机化系统调用序列测试内核,支持Linux/Android内核驱动、系统调用漏洞
kAFL基于AFL改进,结合虚拟化技术隔离测试环境Linux内核模块
Web服务测试Burp Suite支持自定义攻击向量(XSS、SQL注入),参数化模糊测试Web应用安全审计
WFuzz针对URL、表单、头部多维度注入异常数据HTTP接口测试
云端与分布式OSS-FuzzGoogle提供的持续测试服务,集成AFL/LibFuzzer,覆盖开源项目(如Linux内核、OpenSSL)大规模开源项目漏洞挖掘

相关文章:

  • 41、web前端开发之Vue3保姆教程(五 实战案例)
  • 结合大语言模型整理叙述并生成思维导图的思路
  • C语言--常用的链表操作
  • 分布式存储怎样提高服务器数据的安全性?
  • Vue3+Vite+TypeScript+Element Plus开发-09.登录成功跳转主页
  • CentOS8.5 LLaMA-Factory训练模型
  • ChatDBA:一个基于AI的智能数据库助手
  • 基于C8051F340单片机的精确定时1S的C程序
  • 代码随想录算法训练营--打卡day8
  • 状态同步梳理
  • 如何精准控制大模型的推理深度
  • 解密工业控制柜:认识关键硬件(PLC)
  • NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
  • Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录
  • Java接口性能优化面试问题集锦:高频考点与深度解析
  • 【设计模式】访问者模式
  • 微软庆祝它成立整整50周年
  • 将图片按照指定大小批量进行裁剪(可设置步长_python)
  • 怎样使用Python编写的Telegram聊天机器人
  • Android compose源码浅析——Modifier
  • 长白山网站学做管理平台/友博国际个人中心登录
  • 曹县做网站建设/描述建设一个网站的具体步骤
  • 淘宝客建设网站/宁波免费建站seo排名
  • 外包公司做网站价格/网站seo的优化怎么做
  • 网站主页 优帮云/今日的头条新闻
  • 做网站的登陆功能/免费刷赞网站推广qq免费