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, 为
                 模糊测试工具开发者提供多样化的对比平台.
   300   301   302   303   304   305   306   307   308   309   310