定制化白盒检测 | 越权漏洞的治理分享
字数 1721 2025-08-10 19:49:08

定制化白盒检测在越权漏洞治理中的应用

一、背景与挑战

1.1 背景介绍

在漏洞扫描领域,主流的扫描方式分为黑盒扫描和白盒扫描。源代码安全检测(白盒扫描)是安全开发流程(SDLC)中非常重要的一部分。传统漏洞大多能通过工具检出,但对于越权漏洞,工具较难解决。

1.2 主要挑战

  1. 鉴权方式多样性:不同业务有不同的鉴权模型和方式(函数代码、中间件、网关插件、上下游RPC等)
  2. RPC仓库问题:API通过网关映射为HTTP接口,存在大网关嵌套小网关情况,影响API识别和污点跟踪
  3. 接口语义分析:传统白盒无法判断接口是否需要鉴权(如公共接口)

二、治理目标

开发一个整合各方业务数据的系统,通过以下关键点判断API是否存在越权风险:

  1. 该不该鉴权:语义分析判断API是否为公共接口或无需鉴权接口
  2. 有没有调鉴权函数:系统需要知道所有鉴权函数数据
  3. 有没有鉴对:校验API是否调用了正确的鉴权函数,防止鉴权不完整

三、系统架构与解决方案

3.1 系统架构

  1. API函数名识别模块:收集所有网关的API数据
  2. 脚本插件:爬取仓库的API数据(针对网关泛解析情况)
  3. 数据整合:三个模块的并集构成每个仓库对应的完整API数据

3.2 鉴权函数管理

  1. 协助业务研发梳理鉴权函数并对场景打标
  2. 将鉴权函数导入平台,调用中台白盒扫描接口
  3. 白盒引擎检查API函数调用链中的鉴权函数
  4. 生成API和鉴权函数的对应关系表
  5. 抽象通用规则,产生风险标签

3.3 告警识别引擎

包含五个关键模块:

1. 公共接口模块

  • 识别当前接口是否为公共接口
  • 如果是公共接口,给API的鉴权函数数据中加入"公共接口"标记

2. 空实现模块

  • 根据函数调用栈数量判断接口是否为空实现
  • 空实现接口不进行告警识别
  • 研发实现后重新激活进行告警识别

3. 网关鉴权插件模块

  • 扫描后拉取API在网关上的鉴权插件数据
  • 将数据加入API的鉴权函数数据中

4. RPC鉴权模块

  • 自研系统检查API是否在上下游调用指定鉴权函数
  • 将返回数据存入平台

5. 多步鉴权模块

包含多种检测插件,支持自定义配置:

(1) 基于http_path的检测插件
  • 检查特定路径前缀(如/admin/xxx)是否调用角色鉴权函数
  • 示例:/work/路径需调用管理员鉴权函数
(2) 基于入参的检测插件
  • 检查特定参数名(如project_key)是否调用对应鉴权函数
  • 示例:project_key参数需调用project_detect网关鉴权插件

3.4 鉴权分机制

  1. 计算方式:各项数据及对应比例系数求和
  2. 标准分:系统默认或仓库自定义配置
  3. 告警判断:总鉴权分低于标准分则判定为有风险
  4. 示例
    • 公共接口:比例系数1,总鉴权分=1(非告警)
    • 角色鉴权规则:鉴权分配置-5,未满足则总分-4(告警)

四、运营与测试流程

  1. 告警处理:SDLC对接人先运营告警,确认风险后再提交工单
  2. 测试流量集成:将API与测试流量关联
  3. Burp联动插件
    • 手动版:自动发送告警流量到Burp
    • 自动化版:配置租户池和角色池进行批量扫描

五、未来优化方向

  1. 准确率提升

    • AI方法分析告警和误报数据
    • 结合灰盒降低误报(检查参数是否影响SQL语句id)
  2. 多步鉴权检测能力

    • 深入分析各业务线权限模型
    • 推动接口打标与默认强制鉴权
  3. 流程改进

    • 重点业务线机器人通知
    • 代码发布阶段卡点(漏洞左移)

六、权限能力成熟度模型(CMM)

等级 描述
CMM0 无任何权限管控
CMM1 无统一权限组件,开发自行实现
CMM2 有统一权限组件,需手动调用
CMM3 默认所有接口强制鉴权,不需鉴权的手动加白
CMM4 在CMM3基础上,通过其他系统交叉验证

适用范围:白盒扫描适用于CMM2及以上等级的业务

七、实施效果

  • 绝大部分业务线已接入白盒扫描
  • 通过白盒扫描发现的越权漏洞数量和占比是所有发现方式中最高的

八、总结

该方案是针对业务特性开发的定制化检测规则,在开发过程中积累了大量经验。未来将持续迭代优化系统,特别是在多步鉴权方向深入探索。

定制化白盒检测在越权漏洞治理中的应用 一、背景与挑战 1.1 背景介绍 在漏洞扫描领域,主流的扫描方式分为黑盒扫描和白盒扫描。源代码安全检测(白盒扫描)是安全开发流程(SDLC)中非常重要的一部分。传统漏洞大多能通过工具检出,但对于越权漏洞,工具较难解决。 1.2 主要挑战 鉴权方式多样性 :不同业务有不同的鉴权模型和方式(函数代码、中间件、网关插件、上下游RPC等) RPC仓库问题 :API通过网关映射为HTTP接口,存在大网关嵌套小网关情况,影响API识别和污点跟踪 接口语义分析 :传统白盒无法判断接口是否需要鉴权(如公共接口) 二、治理目标 开发一个整合各方业务数据的系统,通过以下关键点判断API是否存在越权风险: 该不该鉴权 :语义分析判断API是否为公共接口或无需鉴权接口 有没有调鉴权函数 :系统需要知道所有鉴权函数数据 有没有鉴对 :校验API是否调用了正确的鉴权函数,防止鉴权不完整 三、系统架构与解决方案 3.1 系统架构 API函数名识别模块 :收集所有网关的API数据 脚本插件 :爬取仓库的API数据(针对网关泛解析情况) 数据整合 :三个模块的并集构成每个仓库对应的完整API数据 3.2 鉴权函数管理 协助业务研发梳理鉴权函数并对场景打标 将鉴权函数导入平台,调用中台白盒扫描接口 白盒引擎检查API函数调用链中的鉴权函数 生成API和鉴权函数的对应关系表 抽象通用规则,产生风险标签 3.3 告警识别引擎 包含五个关键模块: 1. 公共接口模块 识别当前接口是否为公共接口 如果是公共接口,给API的鉴权函数数据中加入"公共接口"标记 2. 空实现模块 根据函数调用栈数量判断接口是否为空实现 空实现接口不进行告警识别 研发实现后重新激活进行告警识别 3. 网关鉴权插件模块 扫描后拉取API在网关上的鉴权插件数据 将数据加入API的鉴权函数数据中 4. RPC鉴权模块 自研系统检查API是否在上下游调用指定鉴权函数 将返回数据存入平台 5. 多步鉴权模块 包含多种检测插件,支持自定义配置: (1) 基于http_ path的检测插件 检查特定路径前缀(如/admin/xxx)是否调用角色鉴权函数 示例:/work/路径需调用管理员鉴权函数 (2) 基于入参的检测插件 检查特定参数名(如project_ key)是否调用对应鉴权函数 示例:project_ key参数需调用project_ detect网关鉴权插件 3.4 鉴权分机制 计算方式 :各项数据及对应比例系数求和 标准分 :系统默认或仓库自定义配置 告警判断 :总鉴权分低于标准分则判定为有风险 示例 : 公共接口:比例系数1,总鉴权分=1(非告警) 角色鉴权规则:鉴权分配置-5,未满足则总分-4(告警) 四、运营与测试流程 告警处理 :SDLC对接人先运营告警,确认风险后再提交工单 测试流量集成 :将API与测试流量关联 Burp联动插件 : 手动版:自动发送告警流量到Burp 自动化版:配置租户池和角色池进行批量扫描 五、未来优化方向 准确率提升 : AI方法分析告警和误报数据 结合灰盒降低误报(检查参数是否影响SQL语句id) 多步鉴权检测能力 : 深入分析各业务线权限模型 推动接口打标与默认强制鉴权 流程改进 : 重点业务线机器人通知 代码发布阶段卡点(漏洞左移) 六、权限能力成熟度模型(CMM) | 等级 | 描述 | |------|------| | CMM0 | 无任何权限管控 | | CMM1 | 无统一权限组件,开发自行实现 | | CMM2 | 有统一权限组件,需手动调用 | | CMM3 | 默认所有接口强制鉴权,不需鉴权的手动加白 | | CMM4 | 在CMM3基础上,通过其他系统交叉验证 | 适用范围 :白盒扫描适用于CMM2及以上等级的业务 七、实施效果 绝大部分业务线已接入白盒扫描 通过白盒扫描发现的越权漏洞数量和占比是所有发现方式中最高的 八、总结 该方案是针对业务特性开发的定制化检测规则,在开发过程中积累了大量经验。未来将持续迭代优化系统,特别是在多步鉴权方向深入探索。