Page 316 - 《软件学报》2025年第8期
P. 316
袁斌 等: 基于有限状态机引导的网络协议模糊测试方法 3739
盖率也呈现出优势, 除了在 MatrixSSL 实验对比中以 23% 的差距稍落后外, 在其他实现中均占领先地位. 整体而
言, SNETFuzzer 在当前输入覆盖率方面比 AFLNET 提高了 76%, 而在总体语料库覆盖率方面则高出了 29%. 在探
索有趣路径的能力指标上, SNETFuzzer 同样表现出色, 其平均表现比 AFLNET 高出 53%. 在边覆盖数方面,
SNETFuzzer 平均超过 AFLNET 51%. 特别是在 OpenSSL 上, SNETFuzzer 不仅在程序覆盖率上大幅领先, 同时在
其他各类性能指标上也呈现出显著的领先优势.
在辅助指标路径深度, SNETFuzzer 在 OpenSSL、GnuTLS、MatrixSSL 的路径深度好过 AFLNET, AFLNET
则在另外两个 TLS 实现当中领先; 类似的, SNETFuzzer 在 OpenSSL、GnuTLS、WolfSSL 的路径稳定度好过
AFLNET, AFLNET 则在另外两个 TLS 实现当中领先. 这证明 SNETFuzzer 虽然在程序覆盖率上领先, 但是不能证
明 SNETFuzzer 的模糊测试种子从引导方式中获得了比 AFLNET 更多的收益.
25
当前输入覆盖率 语料库总覆盖率
20
程序覆盖率 (%) 15
10
5
0
SNETFuzzer AFLNET SNETFuzzer AFLNET SNETFuzzer AFLNET SNETFuzzer AFLNET SNETFuzzer AFLNET
OpenSSL GnuTLS MatrixSSL WolfSSL MbedTLS
图 11 不同方法的程序覆盖率对比
4.4 实验数据分析
实验结果表明, 在大部分实验环境中, SNETFuzzer 比现有的主流协议模糊测试工具 AFLNET 更为出色, 在多
个重要指标上都取得了不错的成绩. 尤其是在能反映代码覆盖率的指标中, 如语料库总覆盖率、有趣路径和边覆
盖数等, 均高于目前主流的工作.
表 5 展示了 SNETFuzzer 与 AFLNET 在 OpenSSL 实验当中的部分数据对比. 在 OpenSSL 1.0.1b 版中,
SNETFuzzer 在完成有限状态机学习后, 发现了其中存在的 12 个不同状态和 108 个状态转移. 基于这些发现,
SNETFuzzer 生成了初始种子集合, 用以映射这些状态转换, 在模糊测试阶段, 它进一步识别了 3 个新增状态和 7
个状态转移. 相比之下, AFLNET 默认配置下的初始种子反映了正确握手过程中的 6 个不同状态和 5 个状态转移,
在随后的模糊测试阶段, 它额外发现了 6 个状态和 10 个状态转移. 尽管 AFLNET 在模糊测试过程中识别出了比
SNETFuzzer 更多的状态和状态转移, 但鉴于 SNETFuzzer 已经通过预先的有限状态机学习步骤发掘了众多状态
和转移, 因此 SNETFuzzer 在模糊测试中相较于 AFLNET 在反映代码覆盖率的多个关键指标上领先. 综上所述,
SNETFuzzer 一共识别了 15 个状态和 115 次状态转移, 而 AFLNET 在默认设定下则仅发现 12 个状态和 15 次状
态转移, 这些显著的差异同样体现在代码覆盖率的相关指标上.
表 5 SNETFuzzer 与 AFLNET 在 OpenSSL 实验当中的部分数据对比
方法 初始的状态/状态转移数 新发现的状态/状态转移数 共发现的状态/状态转移数
SNETFuzzer 12/108 3/7 15/115
AFLNET 6/5 6/10 12/15
SNETFuzzer 比 AFLNET 多发现了 3 个状态和 100 个状态转移. 从有限状态机的角度来看, 这意味着在模糊
测试中, SNETFuzzer 实际上呈现了比 AFLNET 多出了 3 个状态节点和 100 条状态转移的边. 这些额外的状态和
状态转移可能代表了更多的函数调用、更多的条件判断或者更多的变量赋值等. AFLNET 虽然同样能够识别和追
踪网络协议的状态变化, 但是其在不依赖协议字母表的前提下, 所发送的数据包随机性很强, 探索新状态更为随机

