什么是模糊测试?
模糊测试(Fuzzing),又称为模糊测试技术,是—种动态应用安全测试方法,用于发现软件中 的漏洞和缺陷。在模糊测试中,通过向程序输入无效、意外或随机的数据,旨在揭示潜在漏洞 或导致应用程序崩溃的问题。
模糊测试在缓解缓冲区溢出、内存损坏、代码注入、拒绝服务以及其他在编程中常见的漏洞方面特别有效, 因此受到嵌入式软件工程师的广泛欢迎。
模糊测试已经发展为一种最有效的软件安全测试方法。Google利用模糊测试在chrome中找到 16000个漏洞,超过近几年全部漏洞数的80%;微软用模糊测试发现了Windows中的超过 1/3的百万美元级别的安全漏洞。
模糊测试核心机制与流程
模糊测试的核心原理是通过向目标系统输入非预期或异常构造的数据,触发潜在异常行为以识别系统缺陷。其技术框架通常包含三个核心模块:
变异器
负责构造畸形测试输入,其生成策略可分为三类:
- 随机生成:完全随机化数据注入,适用于快速覆盖输入空间。
- 基于变异的生成:在已知有效输入样本(如协议报文、文件格式)中引入异常值,并动态结合系统反馈(如代码覆盖率、崩溃日志)迭代优化变异策略。
- 基于模型的生成:依据目标协议/接口的规范(如API约束、文件结构)构建输入模型,系统性违反规则(如字段越界、类型混淆),精准触发深层逻辑漏洞。
输入传递器
根据测试场景选择输入测试数据的方式,例如:
- 直接调用目标程序的API接口
- 模拟网络协议交互
- 修改文件或内存数据流
核心目标是将生成的测试用例完整传递至目标系统的输入接口,覆盖真实交互路径。
监控器
通过多层次监控机制识别系统异常:
- 显性崩溃:程序中断、内存错误(如Segmentation Fault)
- 隐性缺陷:数据泄露、逻辑错误(如状态机紊乱)
- 资源异常:CPU/内存占用激增、文件描述符泄漏
检测结果需包含可复现的上下文信息(输入数据、环境状态、堆栈追踪),为漏洞定位与修复提供依据。
模糊测试的优点
- 在程序开发时尽早发现漏洞。模糊测试可以集成到开发流程中,在你有可执行程序后立即进行自动测试—包括集成测试和系统测试阶段。通过尽早利用模糊测试,你可以在医疗设备上市之前就发现漏洞和安全问题。
- 模糊测试是黑客挖掘漏洞的主要方式。据统计,超过60%的软件漏洞利用源于未公开的零日缺陷。模糊测试通过模拟攻击者行为,在恶意黑客发现漏洞前提前捕获问题,例如美国国家安全局(NSA)将模糊测试列为关键基础设施防护的核心工具。
- 模糊测试使用成本低见效快。高度自动化的特性,使模糊测试工具可以在没有人工干预的情况下持续运行,从而高效地发现程序中的错误,并且误报率低。
- 能够发现其他测试方式无法发现的漏洞。模糊测试可以随机生成各种不同的输入数据,可以增强测试的覆盖率,从而测试系统的容错性和鲁棒性,发现更多的潜在问题。由于模糊测试更接近系统的真实使用环境,覆盖更多的输入场景和边界条件,能够发现常规测试方法无法发现的问题(例如芯片以及驱动层的漏洞),并且发现的问题更有价值。
开源的模糊测试工具
目前市场上有非常多的开源模糊测试工具。AFL、honggfuzz、libFuzzer是三大最流行的覆盖率引导的模糊测试工具,很多人开发自己的模糊测试工具的时候都会参考他们的代码。boofuzz是一个网络协议模糊测试框架,它内置多协议支持,部署简单学习成本低是较好的网络协议模糊测试入门框架。syzkaller是google开源的linux内核fuzz工具。针对不同语言像golang可以用go-fuzz,js可以使用Jazzer.js,fuzz JVM可以使用Jazzer等等。也有一些专门针对密码学库的工具,像cryptofuzz。如此众多的开源模糊测试工具极大的丰富了模糊测试的使用场景,同时也降低了知识的获取成本,然而使用开源工具也会面临各种挑战。
- 发现漏洞能力有限。开源模糊测试工具算法简单,基于随机变异的“傻瓜式”模糊测试很难发现深层次的漏洞,例如,复杂协议解析器的深层状态机错误难以通过随机输入暴露。
- 配置与调优复杂性高。开源工具通常有较高的环境依赖,需要一定的专业只是才能将其运行起来。还有针对特定协议或文件格式的模糊测试,需要人工定义语法结构和变异规则,这通常需要深度的领域知识。
- 误报/漏报率高。开源工具通常监控手段单一,并且缺乏自动化验证机制工具输出的崩溃案例可能包含大量重复或无实际危害的误报,需结合人工分析才能确定有效漏洞。
中科固源提供的模糊测试
中科固源的Wisdom是一款业界领先的模糊测试工具,无需任何协议或模糊测试相关知识开箱即用,可以轻松发现并解决未知漏洞和缺陷。Wisdom对协议、文件格式、硬件接口有深入的理解和深厚的技术积累,有针对性的测试用例可以在用例数量尽可能少的情况下获得所需的模糊测试广度和深度。
Wisdom的优势:
- 检测关键漏洞和安全隐患:通过建立完整的协议数据交互模板以及状态转换流程,Wisdom最大化测试覆盖率并发现各种漏洞,包括深层次问题。每个监控到的问题都代表运行代码中的实际缺陷。可以检测到的关键漏洞,例如缓冲区溢出、越界读取/写入、空指针引用、资源耗尽等问题。
- 让您的工程师在几分钟内复现并修复问题:借助Wisdom, 每个被发现的漏洞都会附带具体的证明,包括触发的测试用例、程序的异常监控信息、可复现漏洞的修复包。这能帮助开发者轻松找到问题根本原因,快速修复漏洞并加速功能发。
- 让AI自动生成测试用例和漏洞分析:创建高质量的测试用例是充分利用模糊测试优势的关键,但对于开发人员来说也会带来显著的工作负担。Wisdom基于大语言模型(LLMs)自动生成测试用例,并可以根据监控日志分析漏洞原因,使您的团队更轻松地进行模糊测试。
- 轻松将模糊测试集成到您的CI/CD中:将Wisdom集成到您的CI/CD流水线中,可在每次编译部署时自动测试您的软件。这确保在产品上线之前,能够及时发现问题。
发表评论
您还未登录,请先登录。
登录