Page 305 - 《软件学报》2025年第8期
P. 305
3728 软件学报 2025 年第 36 卷第 8 期
(2) 针对 TLS 协议设计了一套较为全面的有限状态机学习方法. 本文根据 TLS 协议的各个细节设计了一个详
尽的有限状态机模型, 该模型能够更好地反映 TLS 协议的系统行为特征.
(3) 实现了原型系统 SNETFuzzer. SNETFuzzer 在 5 个开源 TLS 协议实现中的模糊测试表现均优于 AFLNET,
并且成功发现了两个新漏洞.
本文第 1 节介绍网络协议模糊测试的相关工作. 第 2 节介绍本文相关基础知识. 第 3 节介绍原型系统 SNET-
Fuzzer 的设计及实现方法. 第 4 节介绍用于测试 SNETFuzzer 的实验及分析. 第 5 节总结全文.
1 相关工作
1.1 模糊测试技术
软件测试可以分为两种主要类型: 静态测试和动态测试. 静态测试是在不执行程序的情况下对软件进行检查
和分析的方法 [3] , 主要关注软件的静态属性, 如代码、设计、文档等. 而动态测试 [4] 则是在执行程序的情况下对软
件进行检查和分析, 重点关注软件的动态属性, 如运行结果、记录反馈、行为和性能表现等. 模糊测试技术属于动
态测试的范畴, 其在工业界和学术界都已经有许多相关工作. 模糊测试能够模拟真实世界中的攻击场景, 通过不断
变异输入数据, 模糊测试可以触发系统中潜在的边界条件错误、内存泄漏、缓冲区溢出等问题, 从而揭示系统中
的未知漏洞. 通过及时发现并修复这些漏洞, 可以有效提高软件的安全性和可靠性, 防止黑客利用这些漏洞对系统
进行攻击. 模糊测试技术已经被广泛应用在各个细分领域的安全测试当中, 包括但不限于因特网、工业互联网 [5] 、
[6]
IoT 、车联网 [7] 、深度学习 [8] 等领域.
模糊测试可以大致分为 3 类, 白盒模糊测试、黑盒模糊测试和灰盒模糊测试. 白盒模糊测试的优势在于其能
够开源精确测试代码路径和逻辑, 但前提是要求测试人员掌握被测系统源代码和相关文档. Godefroid 等人开发的
[9]
白盒测试工具 SAGE 发现了存在于 Windows 应用系统中的 20 多个未知漏洞. SAGE 是首个在 x86 系统上运行
的动态符号执行模糊测试软件, 它运用符号执行技术深入理解程序内部结构, 并生成测试用例以发现潜在的漏洞.
Stephens 等人提出了 Driller [10] , 这是一种混合漏洞挖掘工具, 它结合了白盒模糊测试技术. Driller 采用了模糊测试
和选择性混合执行技术, 以避免混合执行的路径爆炸和模糊测试的不充分性问题. 黑盒模糊测试的优势在于其无
需对被测系统有深入了解就可以进行测试, 然而正是因为其对于被测系统内部结构一无所知, 导致难以对系统进
行深入测试. Snipuzz [11] 是一个用于 IoT 设备的黑盒模糊测试工具, 它通过消息段推断来实现自动化测试, 并且成
功发现了 5 个零日漏洞.
灰盒模糊测试技术则是融合了黑盒和白盒的特点, 会在对被测程序有限了解的情况下, 生成输入测试数据进
行测试. 相对于黑盒测试, 灰盒模糊测试具有明显的优势, 其测试深度可达一定水平, 且无需白盒测试所需的专业
知识. AFL 一直以来都是模糊测试领域最著名的工具之一 [12] , 被认为是“模糊测试事实上的标准”. 用户需提供至
少一个初始种子输出给 AFL, 随后 AFL 会运用变异算法对输入进行变异, 生成新的种子. 该工具利用覆盖率来指
导生成新的变异输入, 因此需要获得程序的覆盖率. AFL 提出了基于代码覆盖率的模糊测试算法, 这一算法影响
了许多其他灰盒模糊测试工具. AFLGo [13] 则是基于 AFL 的改进工作, 旨在通过一种基于模拟退火的资源分配规
则, 使输入有效地到达给定的目标程序位置. Gan 等人提出了 CollAFL [14] , 旨在减少 AFL 的路径冲突并优化性能
表现. 与 AFL 相比, CollAFL 的路径冲突率大幅降低, 测试性能显著增强, 并且在代码覆盖率和漏洞发现方面表现
优异. 特定的变异策略和变异引导策略也能够显著改善 AFL 的模糊测试效果, 目前也有相关工作在此方面展开 [15,16] .
Fioraldi 等人总结了现有的最先进的模糊测试研究, 并将其整合成 AFL++ [17] . AFL++有望成为当前研究的新基准
工具, 帮助研究人员了解自己的工作与最新工作之间的差异. 作者发现, 尽管每种新颖的模糊测试方法都具有其特
点, 能够提高在某些目标或环境下的性能, 但也会降低其他目标的性能. 有些工作将其他技术与模糊测试技术结
合, 如在静态检测中常用的符号执行技术 [18] , 也获得了相当不错的成果. 为了更好地综合比较这些模糊测试工具
的效果, Metzman 等人提出了开源的模糊测试评估平台 Fuzzbench [19] , 该平台集成了多个模糊测试工具的 API, 为
模糊测试工具开发者提供多样化的对比平台.

