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

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


                 扩展了与多数据流分析方法相关的配置项, 进一步提升规则可扩展性. 具体而言, 对于多段数据流分析规则, 可配
                 置应用中涉及的共享数据访问操作 (包括存储与读取两类操作模式); 对于多标签数据流分析规则, 可声明污染标签
                 集合, 并为污点源、污点汇和净化函数模式关联特定标签, 或声明跨标签传播、敏感操作判断等自定义条件谓词.

                   输入              基础分析                     多数据流污点分析                      漏洞报告生成
                                                        传统污点分析
                                 抽象语法树生成                                                 漏洞追踪树构建
                 待分析应用
                                                        多段数据流分析
                                                                                          漏洞信息汇总

                                  抽象语法树

                                  调用图分析                 多标签数据流分析
                                  入口函数收集
                                                                                        安全漏洞    漏洞报告
                 多数据流                 ...
                 漏洞规则                                                                        输出
                                                  图 8 MultiFlow  工作流程

                  3.2   基础分析
                    该阶段主要完成漏洞检测的前期准备工作, MultiFlow             首先为应用程序代码生成抽象语法树, 并基于此构建调
                 用图、初始化全局辅助数据结构, 从而为后续跨函数分析提供支持. 如第                      1.2  节中所述, 作为  Web  应用程序分析中
                 的一个重要概念, 入口函数是连接外部请求与应用内部业务逻辑的关键节点. 考虑到攻击者在利用安全漏洞时必
                 然通过入口函数触发漏洞相关代码, MultiFlow          在基础分析阶段将综合考虑待分析程序的编程语言、开发框架等
                 信息, 收集程序中的所有入口函数, 并以此为起点执行后续污点分析, 避免报告外部不可达或无法实际利用的安全
                 漏洞.
                  3.3   多数据流污点分析
                    该阶段为    MultiFlow  的核心构成部分, 集成了支持域敏感、流敏感与上下文敏感的基础污点分析算法, 并扩
                 展两种类型的多数据流污点分析能力. 在实际分析场景中, MultiFlow                将根据目标漏洞类型灵活调用相应的分析模
                 块. 在污点分析算法的具体实现上, MultiFlow        针对如第    1.2  节中所述的  Web  应用安全特性, 采用基于抽象语法树
                 的深度优先遍历方法, 并对循环语句和递归调用等代码结构进行单次展开, 忽略控制流中的回边. 该处理方式的核
                 心思想是将程序控制流图转化为有向无环图 (directed acyclic graph, DAG), 从而避免传统迭代数据流分析的高复
                 杂度问题, 可在检测精确度损失较小的前提下, 令分析复杂度与代码规模呈线性关系, 显著提升了整体分析效率.
                 此外, 考虑到传统静态污点分析不易覆盖现代               Web  应用中的诸多数据传播方式, MultiFlow       针对性建模了多种类
                 型的细粒度污点传播策略, 例如          Java 线程类中  start 与  run  方法的跨过程数据流、各类字符串处理方法, JavaScript
                 中的原型修改、异步回调函数等. 在分析过程中, MultiFlow             使用污染传播图存储分析得到的中间信息, 其定义为

                 有向图  G = (N,E). 其中, 节点集  N ⊆ V taint  用于记录分析到的污染变量, 边集    E ⊆ V taint ×V taint  用于记录污点在程序中
                 的传播路径. 基于污染传播图, MultiFlow      即可在后续漏洞报告生成阶段中, 构建可追溯的漏洞触发路径信息.
                  3.4   漏洞报告生成
                    该阶段中, 对于检测到的所有安全漏洞, MultiFlow          将汇总分析信息, 为漏洞生成详细报告, 包含漏洞代码具体
                 位置、危险参数以及漏洞追踪树等关键信息, 帮助开发者快速定位问题并进行修复. 其中, 漏洞追踪树基于污染传
                 播图进行构建. 具体而言, MultiFlow     在污染传播图中以漏洞触发点为起点, 执行反向深度优先遍历, 直至污点源变
   207   208   209   210   211   212   213   214   215   216   217