云上攻防之对象存储服务漏洞挖掘探索
字数 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 被授权用户类型

  1. 特定用户:通过账号授予桶/对象访问权限
  2. 拥有者:创建桶的账号默认拥有所有桶访问权限;上传对象的账号默认拥有对象所有权限
  3. 匿名用户:未注册华为云的普通访客

3. 桶策略模板分析

华为云OBS提供多种预置桶策略模板:

3.1 常用桶策略模板

模板名称 被授权用户 资源范围 模板动作
桶只读 待指定 当前桶和所有对象 Get/List/HeadBucket
桶读写 待指定 当前桶和所有对象 除DeleteBucket/PutBucketPolicy/PutBucketAcl外的所有动作
目录只读 待指定 指定对象前缀 列举/获取对象相关操作
目录读写 待指定 指定对象前缀 列举/获取/修改对象相关操作
公共读 匿名用户 当前桶和所有对象 列举/获取对象相关操作
公共读写 匿名用户 当前桶和所有对象 完整的上传/下载/修改权限

3.2 对象策略模板

模板名称 被授权用户 资源范围 模板动作
只读模式 待指定 选定对象 获取对象内容/元数据/ACL等
读写模式 待指定 选定对象 完整的上传/下载/修改权限
公共读 匿名用户 选定对象 获取对象内容/元数据
公共读写 匿名用户 选定对象 完整的上传/下载/修改权限

4. 权限控制冲突原则

  • 默认拒绝:权限控制策略结果默认为Deny
  • 显式Deny优先:Deny始终优先于Allow
  • 权限叠加:新增Allow策略会在原权限基础上叠加;新增Deny策略会根据Deny优先原则调整权限

权限冲突解决优先级:

  1. 显式Deny
  2. 显式Allow
  3. 隐式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策略冲突

典型场景

  1. 桶策略ListBuck,桶ACLs禁止匿名用户桶访问 → 可列举对象
  2. 桶策略ListBuck,桶ACLs允许匿名用户桶访问 → 可列举对象
  3. 桶策略无ListBuck,桶ACLs允许匿名用户桶访问 → 可列举对象
  4. 桶策略无ListBuck,桶ACLs禁止匿名用户桶访问 → 不可列举对象

安全建议

  • 避免同时配置ListBucket和匿名访问权限
  • 定期检查策略配置一致性

5.5 Bucket配置可写漏洞

危险配置

  • 匿名用户具有写ACL权限
  • 错误配置Everyone组的FULL_CONTROL权限

利用方法

  1. 检查ACLs权限
  2. 尝试修改ACLs策略
  3. 验证权限变更效果

5.6 Bucket策略缺陷案例

案例描述

  • 配置了IP限制的List权限
  • 但可通过X-Forwarded-For伪造IP绕过

测试步骤

  1. 直接访问桶域名被拒绝
  2. 添加X-Forwarded-for:172.16.0.1头部
  3. 成功获取对象列表

修复建议

  • 严格限制List权限
  • 避免使用过于宽松的策略

6. 安全防护最佳实践

  1. 最小权限原则:按需分配权限,避免使用通配符(*)
  2. 定期审计:检查桶策略、ACL和IAM权限配置
  3. 禁用匿名访问:除非业务必需,否则禁用匿名访问权限
  4. 策略冲突检查:确保不同权限控制方式之间无冲突
  5. 防盗链配置:合理设置Referer白名单/黑名单
  6. 敏感数据加密:对敏感数据启用服务器端加密
  7. 日志监控:启用访问日志记录,监控异常访问行为

7. 总结

华为云OBS的安全配置需要综合考虑多种权限控制机制,特别注意:

  • 不同权限控制方式(桶策略、ACL、IAM)之间的交互和冲突
  • 匿名访问权限的风险
  • ListBucket权限的潜在危害
  • 策略配置错误可能导致的数据泄露

安全测试人员应关注:

  • 权限配置的全面检查
  • 策略冲突的深入分析
  • 各种绕过手法的尝试
  • 最小权限原则的落实验证
华为云对象存储服务(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权限的潜在危害 策略配置错误可能导致的数据泄露 安全测试人员应关注: 权限配置的全面检查 策略冲突的深入分析 各种绕过手法的尝试 最小权限原则的落实验证