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

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



                                   MultiFlow        CodeQL      MultiFlow        CodeQL

                                         11         2                 17        7
                                               4                           4
                                  TP                           TP
                                  FP                           FP
                                               1                           0
                                          5         1                 1         1

                                         20 NPM packages              10 JavaScript Apps
                                          图 10 MultiFlow  与  CodeQL  检测漏洞交集关系

                  4.5   RQ4: MultiFlow 分析效率评估
                    本节评估    MultiFlow  在不同类型  Web  漏洞检测场景下的分析效率表现.
                  4.5.1    基础分析效率
                    本节将比较 MultiFlow   与  3  种现有方法在   Web  漏洞检测任务中的基础分析效率. 具体步骤为基于第                4.2  节所
                 述各方法的漏洞规则集与运行参数不变, 对扫描流程重复执行                     5  次统计总运行时间, 取平均值后得到各工具的平
                 均分析时间开销. 在运行时间统计标准上, 对于              MultiFlow、Coverity  与  Tai-e, 统计其端到端扫描过程的总用时;
                 考虑到   CodeQL  的分析对象为基于程序代码预先构建的数据库, 故分别统计其数据库构建和漏洞规则扫描两部分
                 用时, 合并作为总时间开销.
                    各个方法的分析总用时统计数据如表              8  所示. 得益于采用抽象语法树遍历的数据流分析实现方式, MultiFlow
                 在分析效率上均存在显著优势, 相较于            CodeQL  和  Tai-e 的提速比分别为   2.56  和  3.53  倍, 相较于  Coverity  的提速
                 比则高达 19.98 倍. Coverity  在扫描前需要首先完成代码编译操作, 同时在工具设计上更偏向于通用化的分析模
                 式, 这些因素共同决定了其在         Web  应用场景下高昂的分析开销; 对于          CodeQL  与  Tai-e, 影响其分析开销的核心因
                 素在于, 其分析所需数据的全量预构建步骤 (如              CodeQL  的代码数据库构建、Tai-e 的中间表示         IR  生成与全局指
                 针分析) 均需要较长时间完成, 对于大型项目而言尤其如此; MultiFlow               选择基于抽象语法树的分析策略, 预构建步
                 骤开销较小. 综合而言, 相较于现有漏洞检测方法, MultiFlow            可更加高效地完成漏洞检测分析任务.

                                             表 8 OWASP benchmark  分析效率对比

                                                              分析总用时 (s)
                                     代码行总数
                                                 Coverity  CodeQL     Tai-e   MultiFlow
                                      191 612    1 680.01   215.17    296.74    84.10

                    考虑   MultiFlow  的分析时间与程序代码规模的关系, 计算可知, 在基准漏洞数据集上分析用时平均值为
                 0.439 ms/LOC (每代码行  0.439 ms); 后续实验中将继续使用该指标, 评估        MultiFlow  使用的两类多数据流分析方法
                 在分析效率上的表现.
                  4.5.2    多数据流方法分析效率
                    本节评估多标签数据流分析方法在两种应用场景下的分析效率表现, 评估时仍遵循如第                             4.3、4.4  节所述实验
                 步骤不变, 运行时间统计标准与第            4.5.1  节相同. 在评估原型链污染漏洞检测场景时, 考虑到               MultiFlow  针对
                 JavaScript 项目与第三方组件的漏洞规则存在一定的差异, 运行时间将基于不同应用分组进行统计; 此外, 将同时
                 评估  CodeQL  的分析效率进行对比.
                    各个扫描任务的分析时间开销详细数据如表                9  所示. 在数据库存储型漏洞检测任务中, MultiFlow        使用的多段
                 数据流分析方法平均每代码行分析用时为               0.466 ms, 相较基础污点分析存在      6.08%  的额外开销, 这部分额外开销
                 主要来源于算法      1  中与共享数据相关的迭代分析过程, 以及二者的分析目标差异                  (前者为基准用例, 后者为工业级
                 真实  Web  应用). 这证明了 MultiFlow  的多段数据流分析方法能够在不产生过多额外开销的前提下, 将分析能力扩
                 展至异步过程场景, 满足工业界真实场景下的轻量级                 Web  漏洞扫描需求.
   213   214   215   216   217   218   219   220   221   222   223