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关键词查找,accessKeyIdsecretAccessKeyAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  • 通过网站目录或者泄漏出来的源代码或者DEBUG信息。
  • SSRF读取元数据。
  • 前端页源代码。

AWS常见的漏洞类型:

  • AmazonS3 Bucket允许任意文件上传和读取
  • AmazonS3 bucket允许匿名访问
  • AmazonS3 bucket允许列出文件
  • AmazonS3 bucket允许盲上传
  • AmazonS3 bucket允许任意读取/写入对象
  • AmazonS3 bucket显示ACP/ACL
2 个月 后
7 个月 后

师傅能否给个联系方式,在下有篇文章引用了您的一些内容,想私信致谢

    9 个月 后

    大佬 腾讯云的sts临时密钥泄露还是没懂 能否再讲讲

      说点什么吧...