浅析云存储的攻击利用方式


本次的议题,就是关于云存储的一个攻击利用方式。为什么就是要讲这个云存储,因为就是就我们拿最直接的实战案例来说,我们在挖SRC中的一些漏洞,包括我们火线安全平台的众测,其实我们偶尔也会收到很多关于对象存储的一个劫持和权限配置的一些问题,所以其实对象存储在安全这一块也是一个不可忽略的方向。
然后首先我先自我介绍一下,我叫高鹏,来自火线云安全实验室,我们总共把议题分为四个部分。

首先第一个部分就是什么是对象存储。第二个部分,就是对象存储利用方式,在这一环节中,我们举例了大概有十种利用对象存储利用方式,然后最后我们再对它进行一个总结,然后我们在第二第三部分我们会,我们火线后台安全众测项目中真实的几个漏洞,奖金比较高的,跟对象存储有关的漏洞进行举例。
0x00、什么是对象存储

然后最后就是我们的问答与讨论,OK,那我们现在就先开始,我们先看一下什么是对象存储。可能没有了解过的,对这个东西没有一个概念,就好像对象存储是把自己的对象存储在云上,把自己的女朋友存在云上?或者说跟开发一样,自己new一个对象,其实并不是。我们可以看一下对象存储,它又叫做面向对象存储,不过也有很多厂商把它叫成云存储,就像aws上叫S3,但是国内叫oss或者obs,大家的叫法不同。

我们在国内常见的,比较大的对象存储提供商,然后还有就是包括国外的一些提供商,就是六大的,我们首先看一下,第一个就是腾讯云,然后第二个就是华为云,第三个就是阿里云,到国外的话,第一个肯定就是。亚马逊,然后就是微软的Azure,然后还有谷歌的Google cloud。

我们首先来看一下这六大云的一个对象存储的一个利用方式。

1、Bucket公开访问
OK,然后我们可以看到,首先第一个就是bucket的一个公开的一个访问,我们管理员在创建bucket的时候,其实它默认的是priavte的一个权限,但是如果在错误的一个配置下,比如说给了一个ListObject的一个权限,会导致存储桶的遍历

我们可以看一下,这是左边是aws的,然后右边是阿里云的。但是这里就存在两个问题,如果首先第一个问题是,如果我们只配置公有读或者公有读写的情况下,其实我们是无法正常的列出他所下面的一些Key,造成遍历存储桶的情况,我们先看一下,这是我们正常访问一个我们设置了公有读或公有读写的一个存储桶。但是这个存储桶我们访问的时候,他会告诉我们是Access Denied,但是我们可以通过访问它下面的一个key,或者对应就是我们通俗点来讲,就是访问它对应的一个文件,我们就能下载到这个文件。

然后我们如果想列出Object,那么就需要在Bucket的授权策略中,我们设置ListObject,我们在右边的图片就可以看到,它可以把这个所有的东西给列出来。

2、Bucket桶爆破
然后我们再看第二个,Bucket桶的爆破,我们在常规的渗透中,扫描目录,是通过返回的状态码来进行判断,而这里是通过页面返回不同的报错信息来进行判断,如下图

不过值得注意的是,在微软的Azure中,如果我们访问一个存在的存储账户下的一个容器,首先会提示我们,InvalidQueryParameterValue,但是如果不存在的话,会显示无法访问该网站
然后我们也可以通过CNAME,DNS解析的方式去获取域名的CNAME
3、特定的Bucket策略配置
第三部分为,如果我们访问一个bucket,如果存在某种限制,例如,UserAgent,IP等,管理员错误的配置了GetBucketPolicy的权限,我们可以通过获取Bucket的策略配置来获取存储桶中的内容

4、Bucket Object遍历
第四个为Bucket的遍历。就是如果设置了ListObject权限,然后我们就可以看到它上面所存在的东西,其实是在SRC,或者说在众测项目中是非常多的,我们可以通过ctrl get的方式去下载张图片。

5、任意文件上传与覆盖
第五个就是任意文件上传,也就是将任意文件上传至存储桶,或者说也可以覆盖存储桶上已经有的一个文件。这里主要关系到一个错误的配置策略,PutObject。

6、AccessKeyId,SecretAccessKey泄露
第六,我们可以通过反编译APK,小程序,查看JS代码中来获取泄露的AK等,稍后在第三个环节,我们也会通过实战案例来看AK泄露的问题


在JS代码中也可以找到泄露的Key
下图中提供了一款工具HaE

这里我们推荐一款Burp的插件,HaE,能够有效的在测试中帮助测试人员快速的发现存在泄露的AK,身份证,电话号码,邮箱等
7、Bucket劫持与子域接管
这是比较常见的,也是众测项目中比较多的,原理也很简单,bucket的名称只能有一个,如果管理员将Bucket设置了自定义域名,比如在域名中添加DNS解析,CNAME指向存储桶的域名,但是有一天管理员将存储桶删掉,但是并没有删掉在域名中的DNS解析,这种情况就会导致我们可以去注册同样的存储桶名称来劫持该域名,我们只需要上传任意的文件,就可以让这个域名或者存储桶显示我们想要的东西

不过需要注意的是,在腾讯云的对象存储中,我们无法造成以上的操作,因为在腾讯云的对象存储域名中,有一个APPID,这个APPID来自我们的账户信息中

随后我们再举例AWS下的存储桶劫持,原理同上


然后aws下是有一个比较有意思的地方,就是我们来判断aws存储桶的域名地址的时候,其实我们是可以直接很直接的来判断出来的,就比如说它的域名是huoxian.cn,那么后面加上.s3.地区.amazon.com就可以了,原因是因为,在AWS下,配置存储桶的时候,想使用自定义的域名,存储桶的名称必须跟域名的名称一样

我们再来看一下微软的Azure下的劫持,原理也同上



8、存储桶的配置可写
第八,存储桶的配置可写,我们访问一个存储桶时,如果提示我们Access Denied的话,如下图

我们发现,该存储桶错误的配置了PutBucketPolicy和GetBucketPolicy,此时我们就可以获取存储桶的配置,然后再修改写入配置即可

9、修改Bucket策略为Deny使业务瘫痪
当策略可写的时候,除了以上的一些操作,例如网站引入了某个S3上的资源,图片,JS等,我们可以通过修改Effect为Deny,导致网站无法获取这些资源随之瘫痪

10、修改网站引用的S3资源进行钓鱼
这里比较好理解,我们既然拥有上传的权限了,我们可以通过修改里面的资源,进行一个钓鱼或污染

11、六大公有云攻击方式统计表
我们总结了六大公有云的存储桶利用方式

12、Lambda函数执行命令

首先我们先创建一个Lambda函数,然后在选择触发器的时候选择我们创建的存储桶,并且触发事件,我们选择所有事件都会触发

我们使用Python编写函数,首先我们使用print将event中的信息输出到Cloud Watch,我们需要注意Object中的Key,假设一种情况,这里的KEY来自存储桶的文件名,如果管理员在编写代码是将文件夹当成命令或其他的方式进行处理,能否造成命令执行

很显然,是可以的,并且我们可以使用curl命令将信息外带出来
0x03 真实漏洞案例
在本环节中,我们挑选了,在火线安全众测项目中,漏洞奖金比较高的一些漏洞进行举例。

1、反编译小程序泄露AccessKey

该漏洞的奖金为6500,我们在图片中的IDEA中可以看到,这里通过ABD获取小程序的包反编译后在JS代码中找到的存储桶的KEY,随后连接上去,在存储桶中获取到了大量的敏感数据
2、JS文件中存在的AccessKey泄露

该漏洞的奖金为7000,在上图中可以看到,在JS代码中,找到了泄露的KEY,随后使用OSS浏览器连接上去,发现了大量的用户身份证图片等
3、阿里云存储桶劫持

该漏洞的奖金为2500,在第二张图我们可以看到,访问域名显示NoSuckBucket,在HostID中我们可以看到存储桶的域名,随后创建了一个跟这个名称一样的存储桶,并上传一个1.txt中包含test by huoxian,再次访问该域名可以发现成功劫持了该域名
4、GitHubAccessKey泄露

在上图中我们可以看到,通过关键字的搜索,可以在github中发现上传的AK,导致泄露敏感信息
0x04 问答环节

打一个小广告,火线安全目前正在招Golang,爬虫,Python,漏洞研究,销售,售前等岗位,如果有兴趣可以扫描右边的二维码咨询
