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

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


                 应用中常用的数据库框架 MyBatis       [22] 为例, 介绍多段数据流分析方法在检测存储型            Web  漏洞中的具体应用方式.
                    在图  5  所示的代码片段示例中, 多段数据流分析方法在首轮迭代时检测到                     commentMapper.insertComment 调
                 用了数据库插入语句       (即共享数据存储操作). 结合域敏感的污染传播分析结果可知, 用户输入参数 request 将传播
                 至  comment.content 字段, 进一步分析得到该字段对应的存储位置为            comment 表的  content 列, 从而生成如下共享
                 数据存储记录: {table: “comment”, column: “content”}.

                 @PostMapping                                     <!-- CommentMapper.xml -->
                 public Integer createComment(@RequestBody CommentDTO request) {     <mapper namespace=“CommentMapper”>
                   ...                                             ...
                   Comment comment = new Comment();                <insert id=“insertComment” parameterType=“Comment”>

                   comment.setContent(request.getContent());        INSERT INTO comment (user_id, content, created_at)
                   ...                                              VALUES (#{userId}, #{content}, #{createdAt})
                   commentMapper.insertComment(comment);           </insert>
                 }                                                 ...
                                                                   <update id=“updateByUserIdAndCommentId”>
                                                                    UPDATE comment SET content = #{content}
                 @GetMapping(“/user/{userId}”)
                                                                    WHERE id = #{commentId} AND user_id = #{userId}
                 public List<CommentDTO> getComments(@PathVariable Integer userId) {
                                                                   </update>
                   List<Comment> comments = commentMapper.selectByUserId(userId);
                                                                      ...
                   for (Comment comment: comments) {
                                                                   <select id=“selectByUserId” resultType=“Comment”>
                    String content = comments.getContent();
                     ...                                            SELECT * FROM comment WHERE user_id = #{userId}
                     }                                             </select>
                 }                                                </mapper>
                                                   图 5 共享数据分析过程

                    随后, 算法扫描同一命名空间下的所有数据库操作, 关联该记录对应的共享数据读取操作. 此处存在一个基本
                 假设: 同一命名空间下配置的所有          SQL  查询均针对同一数据库. 通过关联分析, 算法发现              selectByUserId  调用将读
                 取上述污染数据, 因此在下一轮分析中将其标记为污点源. 后续轮次分析中, 在执行污点源匹配调用操作时, 方法
                 同样支持域敏感的污点分析能力, 即标记             selectByUserId  调用返回对象的  content 字段为污染变量, 保证后续污染
                 传播追踪的精确率.
                  2.2.2    越权访问
                    访问控制缺陷 (broken access control), 又称越权访问漏洞, 指系统在身份认证与权限校验机制设计或实现层面
                 存在安全隐患, 导致攻击者可通过非授权路径绕过访问控制约束, 执行超出当前权限的操作. 漏洞产生根源为程序
                 代码逻辑在处理敏感请求时, 未对请求主体的权限属性与请求客体的所需权限实现完善的一致性验证. 根据实际
                 攻击方式, 越权访问漏洞可被进一步细分为垂直越权 (vertical privilege escalation)、水平越权 (horizontal privilege
                 escalation) 等子类型. 前者主要体现为低权限实体通过未授权接口调用获取更高特权, 如普通用户访问管理后台;
                 后者的常见表现形式为攻击者通过篡改请求参数, 访问其他同等级实体的私有数据.
                    越权访问漏洞检测的核心挑战源于其漏洞成因与业务逻辑的高度耦合性, 即漏洞触发条件通常依赖特定业务
                 逻辑中的上下文信息, 而传统污点分析算法在建模复杂语义关联方面的能力较弱, 导致在检测越权访问漏洞时面
                 临较大困难. 具体而言, 能否准确识别现代            Web  应用中多样化的鉴权实现方式, 进而判断未受鉴权逻辑保护的敏
                 感操作, 直接决定了静态分析技术对于越权访问的检测性能. 本文通过对大量真实应用分析发现, 许多鉴权逻辑的
                 实现中都涉及由      Web  应用服务端安全框架或会话管理机制生成的用户身份信息相关变量, 例如会话信息中的登
                 录态用户标识参数. 为便于描述, 下文统一使用“可信源 (trusted source)”概念指代此类变量. 可信源的特点在于其
                 数据来源不可篡改, 通常与用户身份认证状态和访问控制策略直接关联, 可作为权限判定的核心依据. 因此, 在分
                 析过程中重点关注可信源与用户输入参数的交互逻辑, 即可有效识别此类鉴权操作. 以下将介绍基于多标签数据
                 流分析的越权访问漏洞检测算法实现.
                    ● 污染标签配置. 越权访问漏洞规则使用如下污染标签集合:                   T = {t input ,t trust }, 除基本的用户输入污染标签  t input
                 外, 为可信源变量设置一类独立的污染标签             t trust .
                    ● 污点源匹配. 对于用户输入类型污点, 采取            Web  应用中常见的用户输入模式          (如  HTTP  请求参数); 可信源
                 的来源模式与应用具体实现相关, 且单个应用中通常采取若干固定的可信源类型. 在实际分析中, 需结合                                 Web  应
   203   204   205   206   207   208   209   210   211   212   213