Page 309 - 《软件学报》2025年第8期
P. 309
3732 软件学报 2025 年第 36 卷第 8 期
需要再引入输入信息, 由输入和输出共同决定协议进入了一个状态. 这里的输入指的是客户端发送给服务端的数
据包, 换言之是有限状态机学习程序发送给被测系统的数据包. 在这种情况下, 使用 Mealy 机更符合要求. 每个有
限状态机都可以用一个六元组来表示, 可写为公式 (1):
M = (S, s0,δ,λ,X,Y) (1)
其中, M 表示有限状态机 (FSM); S 表示所有状态的集合; X 是输入字典; Y 是输出字典; δ 函数是状态转移函数,
sj=δ(si, x) 表示从状态 si 出发, 输入 x 后转移到状态 sj, x∈X; λ 函数是输出函数, y=λ(si, x) 表示从状态 si 出发, 输入
x 后获得的响应 y, y∈Y. 所以, 一次完整的状态转移可以表示为一个三元组: (si, sj, x/y). 在确定了使用的有限状态机
类型之后, 需要确认有限状态机的字母表. 字母表指的是在有限状态机中会出现的输入信息和输出信息, 有限状态
机学习程序需要通过字母表才能了解它能够发送和可能接收到的信息.
AppDataEmpty
ClientHelloRSA Finished Empty
ServerHello/Certifi_ ClientKeyExchange ChangeCipherSpec ChangeCipher_
cate/ServerHelloDone Empty Empty Spec/Finished
0 1 3 4 5
AppDataEmpty AppDataEmpty Other
Alert Fatal (Illegal parameter)/ Alert Fatal (Illegal parameter)/ Alert Fatal (Unexpected message)/
ConnectionClosed ConnectionClosed ConnectionClosed
ChangeCipherSpec|AppData|HeartbeatRequest AppData
ConnectionClosed
AppData/ConnectionClosed
2
HeartbeatRequest
All ConnectionClosed
ConnectionClosed
ClientKeyExchange|EmptyCertificate|Finished ClientHelloRSA
Alert Fatal (Unexpected message)/ConnectionClosed Alert Fatal (Handshake failure)/ConnectionClosed
AppDataEmpty Other
Alert Fatal (Illegal parameter)/ConnectionClosed Alert Fatal (Unexpected message)/ConnectionClosed
图 3 OpenSSL 1.1.1k 的简化有限状态机
输入 有限状态机学习
被测系统
有限状态机 消息处理和
学习程序 映射模块
TLS 协议实现
模糊测试 有限状态机信息提取分析
有限状态机文件
路径提取 种子生成
有限状态机文件 状态转移路径 模糊测试种子
协议模糊
测试程序
图 4 SNETFuzzer 的系统框架图
以 TLS 版本 1.2 为例, 其官方文档 RFC 详尽地描述了一次完整的 TLS 握手过程中的消息流动. 整个过程启
动于客户端向服务端发送 ClientHello 握手请求消息, 携带着客户端支持的 TLS 版本信息、随机数、偏好的密码
套件列表及可选的 TLS 扩展信息. 接着, 服务端响应这一请求, 发送 ServerHello 消息, 选择并通报其确定使用的密
码套件、随机数、数字证书及进一步的信息 (包括可选的 TLS 扩展). 之后, 服务端继续发送包含其身份验证所用

