0x01 前言
如今越来越多的中小型公司选择使用云平台,诸如:阿里云、腾讯云、Amazon、Azure。使用云平台大大降低了企业的资源成本,另一方面随着公用云的普及,也存在着一些风险,当然不是由于云平台本身的安全性欠缺,而是由于使用者在调用API时没有注意安全性而导致的。最常见的问题就是AccessKey泄漏、配置不当。
正文
AccessKey(即访问密钥)是云平台用户在通过API访问云资源时用来确认用户身份的凭证,以确保访问者具有相关权限。AccessKey由云平台提供商(如亚马逊AWS、阿里云、腾讯云、华为云、京东云、金山云等)颁发给云主机的所有者,一般由AccessKeyID(访问密钥ID)和Secret Access Key(私有访问密钥)构成。
主账户/根用户的AccessKey具有主账户的完全权限,因此云厂商不建议直接使用主账户/根用户的AccessKey进行API调用,阿里云会建议你使用RAM子账户进行API的调用,当然这个账户是有相应权限限制的,而腾讯云cos服务除了可以生成子账户外还采用了一个CAM模型,用于生成 COS 的临时密钥。临时密钥有生效时间,作用与阿里oss的RAM子账号类似。
通过临时密钥方式,则可以方便、有效地解决权限控制问题。因为固定密钥计算签名方式不能有效地控制权限,同时把永久密钥放到客户端代码中有极大的泄露风险。从腾讯云COS secretkey泄露问题便可看出,下面会讲到这个问题。
OSS AccessKey泄露
对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务。
通过上面描述我们知道AccessKey如果泄露就会导致用户账户被控制,常见的泄露方式有以下几种:
- APK反编译后的配置文件。
- 小程序反编译后的配置文件
- GITHUB关键字、JS文件、FOFA等。
- spring未授权
- 7080端口
- 低权限的WEBSHELL查看网站的配置文件
拿到AccessKey后的利用方式
OSS Browser、OSSUTIL是官方阿里云官方提供的工具只能对于OSS进行操作,API调试或者第三方平台(行云管家)可以直接操作ECS,甚至重置服务器。
这里演示一下OSS Browser对OSS的操作
阿里云 access key ID 和 access key secret 是访问阿里云API的唯一凭证。Access key ID 是类似身份的标识,而 access key secret 的作用是签名你的访问参数,以防被篡改。Access key secret 类似你的登录密码。
登陆后便可访问文件服务,并对文件进行操作
COS Browser、COSCLI是官方阿里云官方提供的工具只能对于OSS进行操作,API调试或者第三方平台(行云管家)可以直接操作ECS,甚至重置服务器。
这里演示一下COS Browser对OSS的操作
腾讯云 secretid 和 secretkey 是访问腾讯云API的唯一凭证。SECRETID 是类似身份的标识,而 SECRETKEY的作用是签名你的访问参数,以防被篡改。SECRETKEY 类似你的登录密码。
登陆后便可访问文件服务,并对文件进行操作
通过行云管家这样的第三方平台,我们可以进一步进行操作。同样的我们需要access key ID 和 access key secret 。
通过行云管家,不仅可以访问OSS服务,还可以直接重置服务器密码,接管服务器,建立RAM用户等等操作。
COS服务 临时密钥泄露
对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。跟阿里云一样腾讯云的主机也有主账户和子账户之分,子账号是由主账号创建的实体,有确定的身份 ID 和身份凭证,拥有登录腾讯云控制台的权限。子账号默认不拥有资源,必须由所属主账号进行授权。与阿里云不同的是,腾讯云引入了临时密钥。
腾讯云COS 密钥泄露的方式有以下几种:
- Github关键字(TMPsecretid,tmpsecretkey)
- js文件
- 网页泄露
- spring未授权
- debug泄露、
- thinkphp报错泄露
临时密钥(临时访问凭证) 是通过 CAM 云 API 提供的接口,获取到权限受限的密钥。主要是为了解决固定密钥计算签名方式不能有效地控制权限,同时把永久密钥放到客户端代码中有极大的泄露风险的问题。
腾讯云获取临时密钥的过程如下:
在这里,第四步下发临时密钥,返回的字段主要包含以下三个字段:
TmpSecretId
TmpSecretKey
Token
然后利用这三个字段计算签名,获得签名后,客户端发送携带签名的请求给COS服务器,对Bucket 进行操作。
其中要是想对指定的Bucket 进行操作,我们还需要知道对应的Bucket 名称,以及所属地域Region
利用方法
1.Bucket 公开访问
腾讯云存储桶的访问权限默认为私有读写权限,且存储桶名称会带上一串时间戳:
账号中的访问策略包括用户组策略、用户策略、存储桶访问控制列表(ACL)和存储桶策略(Policy)等不同的策略类型。当腾讯云 COS 收到请求时,首先会确认请求者身份,并验证请求者是否拥有相关权限。验证的过程包括检查用户策略、存储桶访问策略和基于资源的访问控制列表,对请求进行鉴权。
上图我们仅配置了存储桶访问权限,于是因为设置了私有读写,无权访问该文件,Message显示为 "Access Denied."
2.Bucket Object 遍历
如果策略中允许了Object的List操作,则在目标资源范围下,会将所有的Bucket Object显示出来,这时,Key值可以理解为文件的目录,通过拼接可获取对应的文件:
3.Bucket 爆破
4.Bucket 接管 --- 而appid是在控制台用时间戳随机生成的,因此无法创建同名Bucket,故不存在Bucket 接管问题
我介绍一个工具aksk_tool(https://github.com/wyzxxz/aksk_tool),这个工具支持阿里云AK+SK,AK+SK+STS利用和腾讯云SECRETID+SECRETKEY,TmpSECRETID+TmpSECRETKEY+Tmptoken利用
以下是该工具支持的
阿里云
支持 AKSK认证,STS认证
支持 ECS, OSS, RDS, REDIS, RAM , DOAIM 的功能调用
1. ECS ECS详情查询,命令执行,安全组添加/删除
2. OSS OSS文件上传,下载,删除,查询
3. RDS RDS详情查询,数据库账号添加/删除,IP白名单修改
4. REDIS REDIS详情查询,密码修改
5. RAM RAM账号添加/删除
6. DOMAIN DOMAIN域名查询,子域名解析增删改查等
腾讯云
支持 AKSK认证,TOKEN认证
支持 CVM, DOAIM, COS 的功能调用
1. CVM CVM详情查询,实例启动,关闭,密码重置,命令执行(需要安装Agent)
2. DOMAIN DOMAIN域名查询
3. COS COS文件存储,文件的增删改查和临时url生成
案例
识别出北京有20台机子和多个城市有COS Bucket桶
我们进去看看
其它
上面讨论的是国内的厂商,当然国外的云厂商,如Amazon的AWS,也存在很多安全问题,例如S3存储桶配置不当,泄露AccessKey后,可对S3存储桶进行增删操作,这里的S3类似于OSS、Elastic Beanstalk中利用SSRF访问元数据,获取AccessKey等一些敏感信息等等。
AWS AccessKey的获取手段:
- Github关键词查找,
accessKeyId
、secretAccessKey
、AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
。
- 通过网站目录或者泄漏出来的源代码或者DEBUG信息。
- SSRF读取元数据。
- 前端页源代码。
AWS常见的漏洞类型:
- AmazonS3 Bucket允许任意文件上传和读取
- AmazonS3 bucket允许匿名访问
- AmazonS3 bucket允许列出文件
- AmazonS3 bucket允许盲上传
- AmazonS3 bucket允许任意读取/写入对象
- AmazonS3 bucket显示ACP/ACL