Page 308 - 《软件学报》2025年第8期
P. 308
袁斌 等: 基于有限状态机引导的网络协议模糊测试方法 3731
3 系统设计
3.1 问题提出
有限状态机在软件行为建模方面具有独特的优势, 尤其是在检查网络协议实现时. 通过对网络协议的有限状
态机模型进行检查, 可以发现潜在的逻辑漏洞, 例如状态转换不当或未处理的异常情况. 这样的做法为全面洞察协
议行为及其潜在的安全隐患提供了可能. 此外, 有限状态机还能够作为引导模糊测试的有效工具. 在对网络协议实
现进行有限状态机学习的过程中, 将其实现视为服务器端, 有限状态机学习程序则扮演客户端角色. 这表明, 通过
学习程序构建的状态机模型能够准确映射实际通信中可能出现的各种状态及其转换. 将这些学习到的状态机模型
与灰盒模糊测试技术结合起来, 可以更好地模拟实际网络通信场景, 并实现更高效的动态测试. 通过将有限状态机
学习和模糊测试相结合, 能够有效地解决传统模糊测试中状态空间探索不充分的问题. 这种组合方法不仅能够提
高代码覆盖率, 还能够更快地发现协议实现中的潜在漏洞. 与传统的灰盒模糊测试工具相比, 这种方法还可能发现
那些在传统模糊测试中难以察觉的安全漏洞. 具体而言, 在传统的模糊测试过程中, 新生成的测试用例往往仅依赖
于上一轮的测试用例, 这样的测试方法难以保证测试用例能够驱使系统到达特定的状态, 并测试该状态下的输入
对系统的影响, 因此, 传统模糊测试方法难以测试深层次的具有多级状态转移的漏洞. 而本文提出的基于状态机引
导的模糊测试, 可以基于状态机的状态转移信息, 事先输入特定的测试用例, 高效的驱使系统转移到任意状态, 并
在该状态下进行测试, 从而有效提升测试的覆盖率.
可将主要研究问题归纳为两个子问题.
(1) 如何生成 TLS 协议的有限状态机并使有限状态机尽可能丰富, 最大可能还原网络协议实现的真实行为.
尽管有限状态机可有效反映软件的行为模式, 但其生成的丰富性与准确度会受到所采用的学习算法、参数配置以
及环境设定等因素的影响. 据此, 设计一种能够全面呈现 TLS 协议的行为逻辑的有限状态机构成了本项工作需解
决的核心问题. 文章设计并实现一种针对 TLS 协议的有限状态机学习系统, 其中主要采用了 Angluin’s L*算法作
为核心学习算法. 通过依据 TLS 协议的标准文件 (RFC) 定制字母表, 并对协议的各个握手阶段进行详细的行为分
析, 确保了学习结果的精确与完整. 此外, 实现了一个专用的 TLS 协议消息处理与映射程序, 确保学习系统能深入
理解待测 TLS 实现的特点与逻辑结构.
(2) 如何利用生成的 TLS 协议实现有限状态机来引导模糊测试的进行. 由于灰盒模糊测试程序本身无法直接
访问有限状态机的内部信息, 必须将有限状态机提供的数据转换成模糊测试程序能识别和利用的格式. 执行的策
略是从有限状态机中导出程序状态的转移路线, 并依据这些路线信息构建测试案例作为初始种子输入模糊测试.
这一做法使模糊测试在理解了系统状态空间的基础上进行. 例如, 参照后文图 3 所呈现的 OpenSSL 某版本的状态
机, 传统灰盒模糊测试工具仅限于对红色路线上的路径进行变异操作. 但这种做法可能遗漏那些在状态机图中以
黑色标示、未被测试程序知晓的状态转移. 与之相反, 如果利用 TLS 协议的有限状态机指引模糊测试, 就会像向
测试程序透露了所有可能的状态转移路线一样. 这将大大提高程序检测的广度, 因为模糊测试得以更深入地探究
系统的状态空间. 并且, 随着初始种子种类的增多, 模糊测试的效能也相应提升, 这促进了更迅速地揭露可能的未
知安全漏洞.
针对这两个子问题, 本文提出了一个基于有限状态机引导的网络模糊测试原型系统 SNETFuzzer. 该系统能够
学习并建立一个完备的有限状态机模型, 这一模型精确地映射了 TLS 协议的实现行为逻辑. 利用这一有限状态机,
SNETFuzzer 引导模糊测试的执行, 旨在扩大代码的检测覆盖面并提升模糊测试的效率. 后文图 4 展示了 SNET-
Fuzzer 的系统架构图.
3.2 TLS 协议有限状态机模型设计
为使 SNETFuzzer 生成的有限状态机尽可能贴近 TLS 协议真实的系统行为, 需要提前设计一个适合描述
TLS 协议的有限状态机模型. 有限状态机模型可以被分为两类: Moore 机和 Mealy 机. Moore 机的状态仅和输出有
关, Mealy 机的状态和输出和输入都有关. 然而在网络协议当中, 仅以输出来判定程序进入一个状态是不充分的,

