Page 312 - 《软件学报》2025年第8期
P. 312
袁斌 等: 基于有限状态机引导的网络协议模糊测试方法 3735
照协议要求、被测系统 IP 和端口、数据包结构生成一个发送 Certificate 请求的数据包, 这个数据包是合法的并且
能够被被测系统接收的. 消息处理和映射程序本质上还是一个 TLS 客户端, 需要具有向指定 IP 和端口的对象发
送数据包、发起握手、发送 ClientHello 消息、接收 ServerHello 消息、验证服务器证书、发送 ClientKeyExchange
消息、发送 ChangeCipherSpec 消息、完成握手、发送 ApplicationData 等基本功能.
表 2 TLS 协议关键字段十六进制值及其含义
字段名 十六进制 含义
0x14 ChangeCipherSpec
0x15 Alert
ContentType 0x16 Handshake
0x17 Application
0x18 Heartbeat
0x0300 SSL3.0
0x0301 TLS1.0
Version 0x0302 TLS1.1
0x0303 TLS1.2
0x0304 TLS1.3
0x00 HelloRequest
0x01 ClientHello
0x02 ServerHello
0x0b Certificate
MessageType
0x0c ServerKeyExchange
0x0e ServerHelloDone
0x10 ClientKeyExchange
0x14 Finished
学习程序最后会输出描述被测系统的有限状态机文件, 格式为 dot. 有限状态机文件描述了一个图结构, 该图
结构包含多个节点和多条单向边. 文件中每一行数据都代表了图中的一次状态转移.
在图 7 中, 第 1 行代码表示从状态 1 到状态 4 的转移, 客户端发送了一个空证书 (CertificateEmpty) 用于身份
认证, 之后服务端没有回复; 第 2 行代码表示从状态 1 到状态 2 的转移, 代表客户端发送了一个 ClientKeyExchange
请求数据包并且选择的加密方式是 ECDH, 之后服务端回复了一个表示发生错误的数据包, 具体错误原因是
“UNEXPECTED_MESSAGE”, 也就是服务端并没有预料到客户端会在状态 1 下直接发送这个请求, 并且中断了握
手, 所以返回了“ALERT_FATAL_UNEXPECTED_MESSAGE”这条消息.
…
s1->s4 [label="CertificateEmpty/-"];
s1->s2 [label="ClientKeyExchangeECDH/ALERT_FATAL_UNEXPECTED_MESSAGE|x"];
…
图 7 有限状态机文件实例
在不经过处理的情况下, TLS 有限状态机的图复杂且难阅读, 其经过简化之后的示意图如图 3 和后文图 8.
3.4 有限状态机信息提取
在获得了有限状态机之后, 需要对有限状态机中的信息进行提取并且分析, 然后生成模糊测试能够使用的模
糊测试种子以指导模糊测试的进行. 如图 9 所示, 在已有工作当中常以一轮正常握手的数据包作为种子, 这些种子
所能触发的状态和状态转移有限.
然而通过学习程序生成的有限状态机所描述的状态和状态转移明显更加复杂 (如图 8), 更能够反映系统行为,
并可能覆盖更多的代码. 为最大限度利用有限状态机引导模糊测试的进行, 需要提取有限状态机的每一条从握手
开始到握手结束的状态路径.

