Page 315 - 《软件学报》2025年第8期
P. 315

3738                                                       软件学报  2025  年第  36  卷第  8  期


                    (3) 边覆盖数   (new edges on): 边覆盖数指的是模糊测试程序中能够覆盖的边的数量. 在将程序视为流程图的
                 情境下, 每个图代表一个基本代码块, 而边则表示基本代码块之间的跳转. 该指标反映了代码覆盖率信息, 是模糊
                 测试中另一个重要的评估指标.
                    (4) 路径深度   (geometry[levels]): 路径深度表示通过引导模糊测试能够达到的路径深度. 初始种子被视为“级
                 别  1”, 而经过基于引导的模糊测试变异会使路径的级别逐渐上升. 该参数反映了模糊测试种子从引导方式中获得
                 的收益, 是模糊测试中的一个辅助指标.
                    (5) 路径稳定性   (geometry[stability]): 路径稳定性指模糊测试用例的稳定性. 随着模糊测试用例的有效性下降
                 而下降. 该参数反映了模糊测试用例的可用率, 是模糊测试当中的辅助指标.

                                                  表 3 实验环境的配置参数

                               配置              名称                          参数
                                              CPU型号            AMD EPYC 7742 64核处理器 2.25 GHz
                                              GPU型号                NVIDIA GeForce RTX 3090
                              硬件配置
                                               内存                         256 GB
                                               硬盘                        16 TB SSD
                                              操作系统                      Ubuntu 18.04
                                              Java JDK                    JDK 11
                                              LearnLib                    0.16.0
                              软件配置
                                               Python                      3.9
                                            TLS协议实现       OpenSSL、GnuTLS、MatrixSSL、WolfSSL、MbedTLS
                                             虚拟化环境                      Docker Engine

                    利用模糊测试挖掘的        TLS  协议实现潜在安全漏洞主要分为以下两种.
                    (1) 独特的崩溃   (uniq crashes): 独特的崩溃指的是在模糊测试中导致程序出现独特崩溃的次数. 这一指标通过
                 去除重复的崩溃, 以获取唯一的崩溃事件数. 在模糊测试过程中, 独特的崩溃次数反映了程序在不同输入条件下产
                 生的各种崩溃类型. 这些独特的崩溃可能是潜在的安全漏洞迹象, 需要进一步深入分析和验证.
                    (2) 独特的挂起    (uniq hangs): 独特的挂起指的是在模糊测试中导致程序出现独特挂起的次数. 挂起表示程序
                 未能正常退出, 而是进入了无响应状态. 这种情况可能暗示着潜在的死锁、资源争用或其他与并发性质相关的问题.

                 4.3   实验数据和对比
                    AFLNET  是目前主流的协议模糊测试框架之一, 其提供的工具经常被用于有状态的协议模糊测试. 在同样进
                 行  24 h 的模糊测试的情况下, SNETFuzzer 和   AFLNET  在  5 个不同  TLS  协议实现  (OpenSSL、GnuTLS、MatrixSSL、
                 WolfSSL、MbedTLS) 的模糊测试中得到的指标数据如表            4  所示.

                                            表 4 SNETFuzzer 与  AFLNET  的对比实验

                   TLS协议实现       测试方案       程序覆盖率 (%)      有趣的路径       边覆盖数      路径深度       路径稳定性 (%)
                                SNETFuzzer    15.71/19.70     199        289        26          81.7
                    OpenSSL
                                 AFLNET       4.46/10.67      108        169        17          30.6
                                SNETFuzzer     4.89/8.71      158        241        8          73.68
                     GnuTLS
                                 AFLNET        3.40/7.78      148        234        7          61.46
                                SNETFuzzer     4.85/9.71      230        384        36         60.42
                    MatrixSSL
                                 AFLNET        6.32/7.89      124        190        10         74.91
                                SNETFuzzer    7.88/12.50      216        354        7          38.53
                    WolfSSL
                                 AFLNET       4.23/10.66      143        230        12         30.02
                                SNETFuzzer    6.50/10.43      177        287        13         15.90
                    MbedTLS
                                 AFLNET        5.23/9.84      129        228        16         17.75
                    实验数据表明, SNETFuzzer 在大部分性能指标上优于              AFLNET. 特别是在程序覆盖率方面, 如图           11  所示,
                 SNETFuzzer 在对  5  种  TLS  协议实现的测试中均展现出高于       AFLNET  的总体语料库覆盖率, 其针对当前输入的覆
   310   311   312   313   314   315   316   317   318   319   320