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

举报
火线安全 发表于 2022/03/21 11:58:28 2022/03/21
【摘要】 作者:高鹏高鹏,火线云安全实验室成员,今天分享的主题是《浅析云存储的攻击利用方式》。本次的议题,关于云存储的一个攻击利用方式,在SRC漏洞挖掘,或在火线安全平台的众测项目中,我们也会收到很多关于对象存储的一个劫持和权限配置的一些问题,对象存储在安全这一块也是一个不可忽略的方向。我们总共把议题分为四个部分。首先第一个部分是什么是对象存储,第二个部分对象存储利用方式,在这一环节中,我们举例了大概...


作者:高鹏

高鹏,火线云安全实验室成员,今天分享的主题是《浅析云存储的攻击利用方式》。



本次的议题,关于云存储的一个攻击利用方式,在SRC漏洞挖掘,或在火线安全平台的众测项目中,我们也会收到很多关于对象存储的一个劫持和权限配置的一些问题,对象存储在安全这一块也是一个不可忽略的方向。


我们总共把议题分为四个部分。



首先第一个部分是什么是对象存储,第二个部分对象存储利用方式,在这一环节中,我们举例了大概有十种利用对象存储利用方式,然后最后我们再对它进行一个总结,然后我们在第二第三部分,我们精心挑选了火线后台安全众测项目中真实的几个漏洞,并且奖金较高的,与对象存储有关的漏洞进行举例,最后就是我们的问答与讨论。



先看一下什么是对象存储。可能没有了解过的,对这个东西没有一个概念,就好像对象存储是把自己的对象存储在云上,把自己的女朋友存在云上?或者说跟开发一样,自己new一个对象,其实并不是。



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



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



1、Bucket公开访问


首先第一个就是bucket的一个公开的一个访问,管理员在创建bucket的时候,默认的是priavte的一个权限,如果在错误的一个配置下,例如说给了一个ListObject的一个权限,会导致存储桶的遍历。



这是左边是aws的,然后右边是阿里云的。但是这里就存在两个问题1、如果首先第一个问题是,如果我们只配置公有读或者公有读写的情况下,其实我们是无法正常的列出他所下面的一些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,或者说在众测项目中是非常多的,我们可以通过curl get的方式去下载张图片。



5、任意文件上传与覆盖


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



6、AccessKeyId,SecretAccessKey泄露


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



在JS代码中也可以找到泄露的Key

下图中提供了一款工具HaE

github.com/gh0stkey/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命令将信息外带出来。



在本环节中,我们挑选了,在火线安全众测项目中,漏洞奖金比较高的一些漏洞进行举例。


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,导致泄露敏感信息。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。