Page 315 - 《软件学报》2025年第8期
P. 315
3738 软件学报 2025 年第 36 卷第 8 期
(3) 边覆盖数 (new edges on): 边覆盖数指的是模糊测试程序中能够覆盖的边的数量. 在将程序视为流程图的
情境下, 每个图代表一个基本代码块, 而边则表示基本代码块之间的跳转. 该指标反映了代码覆盖率信息, 是模糊
测试中另一个重要的评估指标.
(4) 路径深度 (geometry[levels]): 路径深度表示通过引导模糊测试能够达到的路径深度. 初始种子被视为“级
别 1”, 而经过基于引导的模糊测试变异会使路径的级别逐渐上升. 该参数反映了模糊测试种子从引导方式中获得
的收益, 是模糊测试中的一个辅助指标.
(5) 路径稳定性 (geometry[stability]): 路径稳定性指模糊测试用例的稳定性. 随着模糊测试用例的有效性下降
而下降. 该参数反映了模糊测试用例的可用率, 是模糊测试当中的辅助指标.
表 3 实验环境的配置参数
配置 名称 参数
CPU型号 AMD EPYC 7742 64核处理器 2.25 GHz
GPU型号 NVIDIA GeForce RTX 3090
硬件配置
内存 256 GB
硬盘 16 TB SSD
操作系统 Ubuntu 18.04
Java JDK JDK 11
LearnLib 0.16.0
软件配置
Python 3.9
TLS协议实现 OpenSSL、GnuTLS、MatrixSSL、WolfSSL、MbedTLS
虚拟化环境 Docker Engine
利用模糊测试挖掘的 TLS 协议实现潜在安全漏洞主要分为以下两种.
(1) 独特的崩溃 (uniq crashes): 独特的崩溃指的是在模糊测试中导致程序出现独特崩溃的次数. 这一指标通过
去除重复的崩溃, 以获取唯一的崩溃事件数. 在模糊测试过程中, 独特的崩溃次数反映了程序在不同输入条件下产
生的各种崩溃类型. 这些独特的崩溃可能是潜在的安全漏洞迹象, 需要进一步深入分析和验证.
(2) 独特的挂起 (uniq hangs): 独特的挂起指的是在模糊测试中导致程序出现独特挂起的次数. 挂起表示程序
未能正常退出, 而是进入了无响应状态. 这种情况可能暗示着潜在的死锁、资源争用或其他与并发性质相关的问题.
4.3 实验数据和对比
AFLNET 是目前主流的协议模糊测试框架之一, 其提供的工具经常被用于有状态的协议模糊测试. 在同样进
行 24 h 的模糊测试的情况下, SNETFuzzer 和 AFLNET 在 5 个不同 TLS 协议实现 (OpenSSL、GnuTLS、MatrixSSL、
WolfSSL、MbedTLS) 的模糊测试中得到的指标数据如表 4 所示.
表 4 SNETFuzzer 与 AFLNET 的对比实验
TLS协议实现 测试方案 程序覆盖率 (%) 有趣的路径 边覆盖数 路径深度 路径稳定性 (%)
SNETFuzzer 15.71/19.70 199 289 26 81.7
OpenSSL
AFLNET 4.46/10.67 108 169 17 30.6
SNETFuzzer 4.89/8.71 158 241 8 73.68
GnuTLS
AFLNET 3.40/7.78 148 234 7 61.46
SNETFuzzer 4.85/9.71 230 384 36 60.42
MatrixSSL
AFLNET 6.32/7.89 124 190 10 74.91
SNETFuzzer 7.88/12.50 216 354 7 38.53
WolfSSL
AFLNET 4.23/10.66 143 230 12 30.02
SNETFuzzer 6.50/10.43 177 287 13 15.90
MbedTLS
AFLNET 5.23/9.84 129 228 16 17.75
实验数据表明, SNETFuzzer 在大部分性能指标上优于 AFLNET. 特别是在程序覆盖率方面, 如图 11 所示,
SNETFuzzer 在对 5 种 TLS 协议实现的测试中均展现出高于 AFLNET 的总体语料库覆盖率, 其针对当前输入的覆

