模糊测试究竟在干什么

2025-04-16 15:24:43·  来源:汽车MCU软件设计  
 

目录

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.常见工具总结

最后,汇总一下常见的模糊测试工具及使用场景。

图片


分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25