云上攻防之对象存储服务漏洞挖掘探索
字数 2568 2025-08-23 18:31:17
华为云对象存储服务(OBS)安全漏洞挖掘与防护指南
1. OBS权限控制机制概述
华为云OBS提供多种权限控制方式,每种方式有不同的应用场景:
| 方式 | 说明 | 应用场景 |
|---|---|---|
| IAM权限 | 作用于云资源的权限定义,控制允许和拒绝的访问操作 | 控制整个云资源、所有OBS桶和对象或指定资源的权限 |
| 桶策略 | 作用于配置的OBS桶及桶内对象,提供精确的操作权限控制 | 允许其他华为云账号访问OBS资源;为不同IAM用户授予不同的访问控制需求 |
| 对象ACL | 基于账号或用户组的对象级访问控制 | 需要对单个对象进行单独授权时使用 |
| 桶ACL | 基于账号或用户组的桶级访问控制 | 授予指定账号桶读取/写入权限,用于共享桶数据或挂载外部桶 |
2. ACL访问控制详解
2.1 ACL特点
- 对租户和租户下的用户都生效
- 桶和对象拥有者相同时,桶ACL默认对桶及桶中对象都生效
- 可在创建/上传时携带ACL,也可后续单独设置
- 基于账号级别的读写权限控制,细粒度不如桶策略和IAM权限
2.2 被授权用户类型
- 特定用户:通过账号授予桶/对象访问权限
- 拥有者:创建桶的账号默认拥有所有桶访问权限;上传对象的账号默认拥有对象所有权限
- 匿名用户:未注册华为云的普通访客
3. 桶策略模板分析
华为云OBS提供多种预置桶策略模板:
3.1 常用桶策略模板
| 模板名称 | 被授权用户 | 资源范围 | 模板动作 |
|---|---|---|---|
| 桶只读 | 待指定 | 当前桶和所有对象 | Get/List/HeadBucket |
| 桶读写 | 待指定 | 当前桶和所有对象 | 除DeleteBucket/PutBucketPolicy/PutBucketAcl外的所有动作 |
| 目录只读 | 待指定 | 指定对象前缀 | 列举/获取对象相关操作 |
| 目录读写 | 待指定 | 指定对象前缀 | 列举/获取/修改对象相关操作 |
| 公共读 | 匿名用户 | 当前桶和所有对象 | 列举/获取对象相关操作 |
| 公共读写 | 匿名用户 | 当前桶和所有对象 | 完整的上传/下载/修改权限 |
3.2 对象策略模板
| 模板名称 | 被授权用户 | 资源范围 | 模板动作 |
|---|---|---|---|
| 只读模式 | 待指定 | 选定对象 | 获取对象内容/元数据/ACL等 |
| 读写模式 | 待指定 | 选定对象 | 完整的上传/下载/修改权限 |
| 公共读 | 匿名用户 | 选定对象 | 获取对象内容/元数据 |
| 公共读写 | 匿名用户 | 选定对象 | 完整的上传/下载/修改权限 |
4. 权限控制冲突原则
- 默认拒绝:权限控制策略结果默认为Deny
- 显式Deny优先:Deny始终优先于Allow
- 权限叠加:新增Allow策略会在原权限基础上叠加;新增Deny策略会根据Deny优先原则调整权限
权限冲突解决优先级:
- 显式Deny
- 显式Allow
- 隐式Deny
5. 安全评估与漏洞挖掘
5.1 Bucket暴力猜解
访问规则差异:
- Bucket不存在:返回"NoSuchBucket"
- Bucket存在且允许列对象:返回对象列表
- Bucket存在但不允许列对象:返回"AccessDenied"
暴力猜解方法:
根据上述差异枚举可能的Bucket名称,通过响应判断Bucket是否存在。
5.2 防盗链机制
配置要点:
- 支持白名单和黑名单两种方式
- Referer规则:
- 最大1024字符
- 支持通配符(*)和问号(?)
- 多个Referer换行隔开
- 包含http/https时必须明确指定
测试技巧:
- 当遇到"AccessDenied"时,尝试修改Referer头部
- 测试不同头部组合可能绕过限制
5.3 对象遍历漏洞
常见错误配置:
- 错误配置ListBucket权限
- 桶策略与ACL配置冲突
测试方法:
直接访问桶域名,观察是否返回对象列表
5.4 Bucket策略冲突
典型场景:
- 桶策略ListBuck,桶ACLs禁止匿名用户桶访问 → 可列举对象
- 桶策略ListBuck,桶ACLs允许匿名用户桶访问 → 可列举对象
- 桶策略无ListBuck,桶ACLs允许匿名用户桶访问 → 可列举对象
- 桶策略无ListBuck,桶ACLs禁止匿名用户桶访问 → 不可列举对象
安全建议:
- 避免同时配置ListBucket和匿名访问权限
- 定期检查策略配置一致性
5.5 Bucket配置可写漏洞
危险配置:
- 匿名用户具有写ACL权限
- 错误配置Everyone组的FULL_CONTROL权限
利用方法:
- 检查ACLs权限
- 尝试修改ACLs策略
- 验证权限变更效果
5.6 Bucket策略缺陷案例
案例描述:
- 配置了IP限制的List权限
- 但可通过X-Forwarded-For伪造IP绕过
测试步骤:
- 直接访问桶域名被拒绝
- 添加X-Forwarded-for:172.16.0.1头部
- 成功获取对象列表
修复建议:
- 严格限制List权限
- 避免使用过于宽松的策略
6. 安全防护最佳实践
- 最小权限原则:按需分配权限,避免使用通配符(*)
- 定期审计:检查桶策略、ACL和IAM权限配置
- 禁用匿名访问:除非业务必需,否则禁用匿名访问权限
- 策略冲突检查:确保不同权限控制方式之间无冲突
- 防盗链配置:合理设置Referer白名单/黑名单
- 敏感数据加密:对敏感数据启用服务器端加密
- 日志监控:启用访问日志记录,监控异常访问行为
7. 总结
华为云OBS的安全配置需要综合考虑多种权限控制机制,特别注意:
- 不同权限控制方式(桶策略、ACL、IAM)之间的交互和冲突
- 匿名访问权限的风险
- ListBucket权限的潜在危害
- 策略配置错误可能导致的数据泄露
安全测试人员应关注:
- 权限配置的全面检查
- 策略冲突的深入分析
- 各种绕过手法的尝试
- 最小权限原则的落实验证