定制化白盒检测 | 越权漏洞的治理分享
字数 1721 2025-08-10 19:49:08
定制化白盒检测在越权漏洞治理中的应用
一、背景与挑战
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及以上等级的业务
七、实施效果
- 绝大部分业务线已接入白盒扫描
- 通过白盒扫描发现的越权漏洞数量和占比是所有发现方式中最高的
八、总结
该方案是针对业务特性开发的定制化检测规则,在开发过程中积累了大量经验。未来将持续迭代优化系统,特别是在多步鉴权方向深入探索。