Page 214 - 《软件学报》2026年第7期
P. 214

毛祥煜 等: 面向   Web  应用漏洞检测的多数据流静态分析方法                                              2899


                 能力时, 使用相关工作中常见的几类评估指标: 精确率                (Precision)、召回率 (Recall) 和  F1  分数 (F1-score). 其中, 精
                 确率表示检测出的漏洞中实际为漏洞的比例, 反映了检测结果的精确性; 召回率表示所有真实漏洞中被正确检测
                 出的比例, 衡量了检测系统的覆盖能力; F1 分数是精确率和召回率的调和平均数, 用于综合评估检测性能, 平衡精
                 确率和覆盖能力. 基于检测结果分类的            3  类评估指标计算方式如下所示:

                                            TP             TP            2×Precision×Recall
                                 Precision =    , Recall =     , F1-score =                           (8)
                                          TP+FP          TP+FN            Precision+Recall
                  4.2   RQ1: MultiFlow 基础分析性能评估
                    为了验证    MultiFlow  对基础  Web 安全漏洞的检测能力, 本节将使用基准漏洞数据集开展实验评估, 比较 MultiFlow
                 和现有方法针对不同类型         Web  漏洞的检测效果. 评估过程中使用如下测试配置.
                    ● 在评估   MultiFlow  时, 为各个漏洞类型独立编写其对应的基础污点分析规则, 其中包含基准漏洞数据集测试
                 用例涉及的所有污点源、污点汇与净化函数模式; 规则中关闭所有多数据流分析相关配置, 即不包含共享数据存
                 储/读取模式, 且仅为所有污点源指定单一类型的污染标签.
                    ● 在评估   Coverity  与  CodeQL  时, 分别基于其官方规则库   [29,30] 中对应类型的漏洞规则, 使用默认参数配置运
                 行分析; 在评估 Tai-e 时, 基于其官方代码库中提供的常见污点分析配置                  [31] 构建完整漏洞规则, 并补充基准漏洞数
                 据集涉及的污点源与污点汇模式, 以保障规则覆盖能力与其他方法一致; 在运行参数上, 使用默认的非上下文敏感
                 模式. 各方法使用的具体运行命令与参数配置见表                1.

                                              表 1 对比方法运行命令与参数设置

                  方法名称                                     运行命令与参数
                           cov-analyze --dir /path/to/benchmark --all --max-mem 1024 --include-java --fb-max-mem 6144 --android-security -j4
                           --enable-audit-checkers --webapp-security --enable DC.STRING_BUFFER --enable ENUM_AS_BOOLEAN --enable
                  Coverity  HARDCODED_CREDENTIALS --enable ORM_LOST_UPDATE --enable UNENCRYPTED_SENSITIVE_DATA
                           --enable FLOATING_POINT_EQUALITY --enable USER_POINTER --enable WEAK_GUARD --enable WEAK_
                           PASSWORD_HASH --enable XML_INJECTION
                   CodeQL  codeql database analyze /path/to/database ql/java/ql/src/Security/CWE/path/to/rule.ql --format=csv --output=result.csv
                           java -jar tai-e-all-0.5.1.jar -cp /path/to/benchmark/target/classes -acp/ path/to/benchmark/target/classes -java 8 -ap -a
                    Tai-e
                           pta=taint-config:/path/to/rules.yml;only-app:false;dump:false;cs:ci;timelimit:1200000

                    基准漏洞数据集的测试结果对比如表              2 所示. 在漏洞检测精确率上, 得益于精细化的污染传播建模, MultiFlow
                 取得了   90.52%  的出色表现, 相较于    Coverity、CodeQL  和  Tai-e 分别提高了  13.11%、12.15%  和 30.18%; 在漏洞
                 检测召回率上, 除      Tai-e  外, 各工具表现较为接近, MultiFlow     略优于   Coverity  和  CodeQL; 考虑  F1 分数时,
                 MultiFlow  相较于其他工具同样表现最佳. 需说明的是, Tai-e 作为一款学术研究领域的程序分析框架, 在污点分析
                 规则库成熟度上与       Coverity、CodeQL  等工具差距较大, 缺少对真实应用场景中常见污点传播模式的覆盖能力, 影
                 响了其整体表现. 综合而言, 上述结果表明, MultiFlow          作为一种    Web  安全漏洞检测方法, 对于传统污点分析算法
                 具备较强的兼容能力, 在检测准召率上表现优秀, 具备较强的实用性.

                                              表 2 基准漏洞数据集测试结果对比

                                              Coverity        CodeQL           Tai-e         MultiFlow
                     漏洞类型        CWE编号
                                           TP   FP    FN   TP   FP   FN    TP   FP   FN   TP    FP   FN
                    path traversal  CWE-22  133  75   0    133  66    0   109   92   24   133   22   0
                  command injection  CWE-78  115  67  11   83   29   43    98   80   28   126   20   0
                       XSS        CWE-79   246   68   0    246  90    0   194   87   52   246   48   0
                    SQL injection  CWE-89  272  128   0    272  87    0   193   121  79   272   36   0
                   LDAP injection  CWE-90  27    15   0    27   13    0    19   22   8     27   4    0
                  weak cryptography  CWE-327  130  0  0    130  27    0    -    -    -    130   0    0
                    weak hashing  CWE-328  89    0    40   -    -    -     -    -    -     89   0    40
                   weak randomness  CWE-339  218  0   0    218   0    0    -    -    -    218   0    0
   209   210   211   212   213   214   215   216   217   218   219