乐趣区

关于安全:腾讯云COS对象存储攻防

文章首发于:前线 Zone 社区

01

Bucket 公开拜访

腾讯云存储桶的拜访权限默认为公有读写权限, 且存储桶名称会带上一串工夫戳:

账户中的拜访策略包含用户组策略、用户策略、存储桶访问控制列表(ACL)和存储桶策略(Policy)等不同的策略类型。

当腾讯云 COS 收到申请时,首先会确认请求者身份,并验证请求者是否领有相干权限。验证的过程包含检查用户策略、存储桶拜访策略和基于资源的访问控制列表,对申请进行鉴权。

– 摘自腾讯云官网文档

上图咱们仅配置了存储桶拜访权限,于是因为设置了公有读写,无权拜访该文件,Message 为“Access Denied.”

02

Bucket Object 遍历

如果策略中容许了 Object 的 List 操作,则在指标资源范畴下,会将所有的 Bucket Object 显示进去,这时,Key 值能够了解为文件的目录,通过拼接可获取对应的文件:

乏味的是,在腾讯云的拜访策略体系中,如果存储桶拜访权限为公有读写,且 Policy 权限为匿名拜访,那么 Policy 权限的优先级高于存储桶拜访权限。

如果控制台配置了 Policy 权限,默认是对所有用户失效,并且容许所有操作,这时即便存储桶拜访权限配置为公有读写,匿名用户也可通过遍历 Bucket Object,获取对应的文件。

03

Bucket 爆破

当拜访的存储桶不存在时,Message 为“NoSuchBucket”,通过响应包返回内容的比照,能够筛选出已存在的存储桶域名。

04

Bucket 接管

因为 Bucket 接管是因为管理人员未删除指向该服务的 DNS 记录,攻击者创立同名 Bucket 进而让受益域名解析所造成的,关键在于攻击者是否可创立同名 Bucket,腾讯云有特定的存储桶命名格局,即 -+http://cos.ap-nanjing.myqclou…:

而 appid 是在控制台用工夫戳随机生成的,因而无奈创立同名 Bucket,故不存在 Bucket 接管问题:

05

任意文件上传与笼罩

因为 Bucket 不反对反复命名,所以当匿名用户领有写入权限时,可通过任意文件上传对原有文件进行笼罩,通过 PUT 申请可上传和笼罩任意文件。

06

用户身份凭证(签名)泄露

通过 RESTful API 对对象存储(Cloud Object Storage,COS)能够发动 HTTP 匿名申请或 HTTP 签名申请。匿名申请个别用于须要公开拜访的场景,例如托管动态网站;此外,绝大部分场景都须要通过签名申请实现。

签名申请相比匿名申请,多携带了一个签名值,签名是基于密钥(SecretId/SecretKey)和申请信息加密生成的字符串。SDK 会主动计算签名,您只须要在初始化用户信息时设置好密钥,无需关怀签名的计算;对于通过 RESTful API 发动的申请,须要依照签名算法计算签名并增加到申请中。– 摘自官网文档

代表腾讯云用户签名的参数为:SecretId/SecretKey,在开发过程中可能有如下几处操作失误会导致 SecretId/SecretKey 泄露,获取到 SecretId/SecretKey 相当于领有了对应用户的权限,从而操控 Bucket。

Github 中配置文件中泄露凭证

小程序 \APP 反编译源码中泄露凭证

谬误应用 SDK 泄露凭证

常见场景:代码调试时不时从服务器端获取签名字符串,而是从客户端获取硬编码的签名字符串。

官网 SDK 应用文档:

https://cloud.tencent.com/doc…

第三方组件配置不当导致泄露凭证

常见场景:/actuator/heapdump 堆转储文件泄露 SecretId/SecretKey

07

Bucket ACL 可读 / 写

列出 Bucket Object 提醒无权拜访:

查看 Bucket 的 ACL 配置,发现有 http://cam.qcloud.com/groups/… 下有 FULL_CONTROL 权限

GET /?acl HTTP/1.1

官网文档中有对 ACL 权限配置参数的阐明:https://cloud.tencent.com/doc…

FULL_CONTROL 代表匿名用户有齐全管制权限,于是在通过 PUT ACL 写入策略,将存储桶的拜访权限配置为私有读写:

退出移动版