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), 更能够反映系统行为,
                 并可能覆盖更多的代码. 为最大限度利用有限状态机引导模糊测试的进行, 需要提取有限状态机的每一条从握手
                 开始到握手结束的状态路径.
   307   308   309   310   311   312   313   314   315   316   317