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  扩展). 之后, 服务端继续发送包含其身份验证所用
   304   305   306   307   308   309   310   311   312   313   314