云服务安全-腾讯云的第一篇!
//云安全笔记系列为根据火线安全/twiki等知识库所作的笔记摘要,在这感谢大手子们搭建知识库分享技术(*^_^*)
本篇针对腾讯云对象存储(COS)自身的策略/机制/配置等原因可能引起的安全风险做一些总结,下一篇针对结合实际服务的原因引发的云安全风险做总结
腾讯云安全策略
腾讯云的账户中的访问策略包括:
- 用户组策略
- 用户策略
- 存储桶访问控制列表(ACL)
- 和存储桶策略(Policy)
等不同的策略
当腾讯云的 COS 收到请求时,首先会确认请求者身份,并验证请求者是否拥有相关权限。
首先会进行检验检查用户策略、存储桶访问策略和基于资源的访问控制列表进行鉴权。

//图片来自腾讯云官方文档
鉴权不通过返回内容中的 Message 为 Access Denied.
Attention:
在腾讯云的访问策略体系中,如果存储桶访问权限为私有读写,且 Policy 权限为匿名访问,那么 Policy 权限的优先级高于存储桶访问权限。 如果控制台配置了 Policy 权限,默认是对所有用户生效,并且允许所有操作,这时即使存储桶访问权限配置为私有读写,匿名用户也可通过遍历Bucket Object,获取对应的文件。
COS 对象存储
COS(Cloud Object Storage),并非cosplay(
本篇笔记主要记录针对腾讯云 COS 的一些安全事项和攻防技巧
同阿里云的 OSS 一样,这是腾讯云的对象存储
//一些涉及到的基本概念不再赘述啦
Bucket 公开访问
配置不当导致的安全风险。
腾讯云存储桶的访问权限默认为私有读写权限,且存储桶名称的后面会带上一串时间戳:
时间戳实际上是腾讯云账户的 appid,腾讯云特有的一个东西

//图片来自火线安全知识库
上图名称后面的 – 加数字 ↑
如果修改了默认配置,设置为公有读私有写,或者公有读写,就会造成对应的信息泄露/篡改风险
Bucket Object 遍历
配置不当导致的安全风险
如果存储桶策略中允许了 Object 的 List 操作(get bucket请求),则在目标资源范围下,会直接将所有的 Bucket Object 显示出来。

//图片来自火线安全知识库
其中的 key 键值对(上图中的<Key>1.jpg</Key>)
为存储文件路径,对路径进行 url 拼接可以直接获取对应文件
Bucket 爆破
访问的桶不存在时 ,回显内容是 “No Such Bucket”,以此为依据就可以进行爆破,筛选出来所有的桶
Bucket接管
腾讯云对象存储,不存在 Bucket 问题
与亚马逊的 AWS 不同,腾讯云存在一个 appid (上文提到过)
Bucket 接管的核心操作是利用“桶已经删除,但是解析记录没有删除”创建同名桶进行接管
而腾讯云的桶命名格式是
<bucketname>-<appid>+cos.ap-nanjing.myqcloud.com
appid 是创建桶的时候,在控制台通过时间戳随机生成的,这就导致无法达成创建同名桶进行接管的操作了
任意文件覆写
腾讯云的对象存储桶不允许存在重复命名,所以当拥有写入权限时,可以通过构造重复文件名的请求进行文件覆写
构造 PUT 请求上传文件内容便可覆写
//具体操作同传统 web 攻防,不再赘述
Bucket ACL 可读/写
配置不当
控制 Bucket 的 ACL 本身有被篡改的风险
当访问一个桶发现拒绝访问(Access Denied)
对当前桶下 /?acl 进行 get 请求,回显内容中 <Permission>字段若为 FULL_CONTROL,意味着 ACL 访问控制为任意可读可写
官方文档中对 ACL 的 Permisson 解释:

FULL_CONTROL 代表匿名用户有完全控制权限,于是在通过 PUT ACL 写入策略,将存储桶的访问权限配置为公有读写:
PUT 请求包中添加:
x-cos-acl:public-read-write
便可以修改 ACL ,让存储桶的权限变为公共可读可写
