云安全第一天

本文章仅供学习使用,不能用于非法途径,否则后果自负

云上攻防分为两个部分

第一部分是云服务

第二部分是云原生

知识点:

1、云服务-对象存储-权限配置不当

2、云服务-对象存储-域名解析接管

3、云服务-对象存储-Accesskey泄漏

章节点:

云场景攻防:公有云、私有云、混合云、虚拟化集群、云桌面等

云厂商攻防:阿里云、腾讯云、华为云、亚马云、谷歌云、微软云等

云服务攻防:对象存储、云数据库、弹性计算服务器、VPC&RAM等

云原生攻防:Docker、Kubernetes(k8s)、容器逃逸、CI/CD等

演示案例

云服务-对象存储-权限配置不当

云服务-对象存储-域名解析接管

云服务-对象存储-AccessKey泄漏

云服务对象存储攻防挖掘案例

云服务,顾名思义就是云上服务,在云厂商上购买的产品服务

国内有阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等

国外有亚马逊的AWS、Google的GCP、微软的Azure、IBM云等

各个云厂商对云服务的叫法都不统一,这里统一以AWS为例

S3 对象存储Simple Storage Services,简单的说就是一个类似网盘的东西

EC2 即弹性计算服务Elastic Compute Cloud,简单的说就是在云上的一台虚拟机

RDS 云数据库Relational Database Services,简单的说就是云上的一个数据库

IAM 身份和访问管理 Identity and Access Management,简单的说就是云控制台上的一套身份管理服务,可以用来管理每个子账号的权限

对象存储各大云名词

阿里云: OSS  腾讯云: COS 华为云: OBS

谷歌云: GCS  微软云: Blob  亚马逊云: S3

对象存储:

1、权限配置错误

- 公共读或公共读写: 可完整访问但不显示完整结构

- 权限 Bucket 授权策略: 设置Listobject显示完整结构

- 权限 Bucket 读写权限: 公共读写直接 PUT 文件任意上传

2、域名解析Bucket接管

Bucket存储桶绑定域名后,当存储桶被删除而域名解析未删除,可以尝试接管!

当Bucket显示NoSuchBucket说明是可以接管的,如果显示AccessDenied则不行。

原理:

正常情况:用户创建一个Bucket(存储桶),并将其与一个域名绑定,通过域名访问Bucket中的内容

漏洞产生:当Bucket被删除,但域名解析记录未删除时,域名仍指向该Bucket,攻击者可以尝试创建同名Bucket进行接管

接管流程:

1、确认域名绑定存储桶:通过ping命令或访问域名,查看是否返回对象存储的解析地址

2、获取关键信息:通过域名访问存储桶,若提示NoSuchBucket,则获取存储桶名称、云存储厂商和所在地域

3、创建同名存储桶:在对应厂商和地域创建同名存储桶

4、绑定域名:将新创建的存储桶与目标域名绑定,实现接管

防护措施:

1、及时更新域名解析记录:删除Bucket后,及时删除或更新对应的域名解析记录

2、定期审查DNS记录:检查DNS记录,确保无指向不存在资源的记录

3、启用多因素认证:在域名管理平台启用多因素认证,防止未经授权的更改

4、监控域名状态:使用自动化工具监控域名解析记录和状态,及时发现并修复问题

3、AccessKeyId,SecretAccessKey泄漏

-APP、小程序、JS中泄漏导致

AccessKey标识特征整理-查找

https://wiki.teamssix.com/CloudService/more/

以阿里云为例

首先进入到阿里云的对象存储OOS界面

然后点击Bucket,进入到Bucket列表,这个Bucket列表就相当于这个对象存储桶,也就是阿里云OOS存储对象的容器

然后点击创建Bucket

然后填写Bucket名称,注意创建成功后不能进行修改,然后去填写地域,然后就是读写权限,以及后面有一些高级功能

这是创建出来的Bucket列表,举个例子,如下图所示,然后点击确定

创建成功之后进入到我们所创建的Bucket列表

 进入之后如下图所示

 然后发现有上传文件的功能

既然有文件上传的功能,我们就可以上传任意文件,文件名为vpc5-8.txt,后面扫描文件成功,然后点击上传文件

 点击上传文件之后,发现上传成功

进入到文件列表后,看见了我们上传文件,然后点击那个文件,里面有一个URL,也就是文件存储的路径

 然后我们进行访问,发现权限不够,是因为我们设置的Bucket列表的读写属性是私有,所以一般的普通用户是无法进行访问的

 然后点击读写权限,将读写权限修改公共读

 然后我们再去访问,发现可以进行访问了

当然在我们创建的Bucket里面也有一些配置会造成一些问题

就是权限控制中的Bucket授权策略,如下图所示

 ListObject操作就是目录显示操作

只读(不包含ListObject操作):允许用户对Bucket中的对象进行读取操作,但不允许用户列出Bucket中的所有对象

只读(包含ListObject操作):允许用户对Bucket中的对象进行读取操作,同时也允许用户列出Bucket中的所有对象

选择只读(包含ListObject操作),然后点击确定

之前访问这个目录是访问不到的,但现在可以访问到,意思就是可以访问到我们当前目录下的文件

同时,我们也可以创建一个新的目录,然后在该目录里面上传新的文件

 上传成功之后我们可以去访问这个目录下的所有文件,包括我们上传的文件

我们也可以去测试一下它的任意文件上传,需要用到的工具就是bp

抓到数据包的时候将其发送到Reperter模块中

然后点击send,发现和我们访问的时候是一样的

接下来我们就进行一个简单的修改

我们回到我们的新创建的Bucket列表中,将读写权限设置为公共读写权限

设置完之后,我们在抓包的页面点击send

发现上传成功,返回到我们的Bucket列表中进行查看

 现在我们来进行域名解析Bucket接管操作

我们先去找一个页面,就比如下图所示的这个页面

然后将其上传上去

当我们的访问的时候,发现是下载而非解析

原因是阿里云的OSS是不解析的,所以和传统的文件上传不一样,它本来的作用就是做存储的,一旦去访问就是下载下来

 我们为其配置一个域名,如下图所示

 成功绑定

 然后进入到云解析->域名解析->解析设置,发现已经被记录下来了

解析得需要几分钟时间,所以我们等一会,然后使用ping命令去进行验证

我们去访问OSS下的那个index.html文件,发现访问之后提醒我们要下载

但是在域名底下访问就可以直接访问到

进行实际案例的操作

我们去ping一下我们刚刚绑定的域名,就会出现对象存储的解析地址

 然后将对象存储的解析地址复制到数据包的Host那里,然后点击那个笔进行编辑,将我们复制的对象存储的解析地址复制到里面,然后点击OK

send之前我们先去访问一下我们所想要上传的那个文件,发现无法访问到

上传成功

然后我们再重新去访问一下,告诉我们要进行下载,说明上传成功

 什么叫做Bucket接管呢,接下来进行操作来理解Bucket接管的概念

我们先去创建一个新的Bucket列表,列表名称叫做xiaodi8

然后我们为该Bucket列表绑定一个域名,也就达到了访问该域名就相当于去访问该Bucket列表的一个目的,域名为xiaodi8.xiaodi8.com

我们为其上传一个html文件

上传成功

 我们去访问一下这个刚刚上传的文件

 这个页面说明这个域名已经被解析了,但是用户没有权限去访问该存储桶

我们去将该Bucket桶给删除,但是提示我们要将该桶里的所有文件都删除才能将Bucket桶删除

所以我们现在要做的就是将Bucket桶中的文件都删除了

然后去删除这个存储桶

我们去ping一下这个xiaodi8.xiaodi8.com,然后会给我们指向xiaodi8.oss-cn-hongkong.aliyuncs.com这个地址

所以接管是什么意思呢,就是我们找到一个域名的时候,它就会请求到oss这个域名上去了

我们现在根据返回的OSS域名来新建一个Bucket列表,名称和地域都依照返回的域名进行填写

 至于说为啥能够在删除的情况下还能访问到,是因为我们仅仅只是删除了Bucket列表,而并没有去删除其对应的解析记录,所以会导致此现象的发生

所以为了完全起见,如果要删除Bucket桶的话,我们就要连同其对应的解析记录也给删除,也能够有效防止信息泄漏

 

接下来我们进行AccessKey的学习

首先先找到AccessKey的入口,AccessKey也就是凭据

 我们先来创建AccessKey

 然后登入进去
 然后就进入到了OSS浏览器里面,里面有我们所创建的Bucket桶,里面存储的东西我们都可以通过OSS浏览器看到

很多人为了让自己的程序接入到这个OSS里面去,目的是为了用到OSS这个服务,所以就会去创建一个AccessKey,然后在自己的程序里面配置AccessKeyID和AccessKeySecret,然后进行连接,这些东西一旦出现在程序里面就会出现信息泄漏,一旦这两个重要的东西泄漏,攻击者就会利用这两个重要条件去登入到OSS浏览器,从而达到了掌控了OSS资源的权限了

(?i)((access_key|access_token|admin_pass|admin_user|algolia_admin_key|algolia_api_key|alias_pass|alicloud_access_key|amazon_secret_access_key|amazonaws|ansible_vault_password|aos_key|api_key|api_key_secret|api_key_sid|api_secret|api.googlemaps AIza|apidocs|apikey|apiSecret|app_debug|app_id|app_key|app_log_level|app_secret|appkey|appkeysecret|application_key|appsecret|appspot|auth_token|authorizationToken|authsecret|aws_access|aws_access_key_id|aws_bucket|aws_key|aws_secret|aws_secret_key|aws_token|AWSSecretKey|b2_app_key|bashrc password|bintray_apikey|bintray_gpg_password|bintray_key|bintraykey|bluemix_api_key|bluemix_pass|browserstack_access_key|bucket_password|bucketeer_aws_access_key_id|bucketeer_aws_secret_access_key|built_branch_deploy_key|bx_password|cache_driver|cache_s3_secret_key|cattle_access_key|cattle_secret_key|certificate_password|ci_deploy_password|client_secret|client_zpk_secret_key|clojars_password|cloud_api_key|cloud_watch_aws_access_key|cloudant_password|cloudflare_api_key|cloudflare_auth_key|cloudinary_api_secret|cloudinary_name|codecov_token|config|conn.login|connectionstring|consumer_key|consumer_secret|credentials|cypress_record_key|database_password|database_schema_test|datadog_api_key|datadog_app_key|db_password|db_server|db_username|dbpasswd|dbpassword|dbuser|deploy_password|digitalocean_ssh_key_body|digitalocean_ssh_key_ids|docker_hub_password|docker_key|docker_pass|docker_passwd|docker_password|dockerhub_password|dockerhubpassword|dot-files|dotfiles|droplet_travis_password|dynamoaccesskeyid|dynamosecretaccesskey|elastica_host|elastica_port|elasticsearch_password|encryption_key|encryption_password|env.heroku_api_key|env.sonatype_password|eureka.awssecretkey)[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|:|<=|=>|:).{0,5}['\"]([0-9a-zA-Z\-_=]{8,64})['\"]

我们可以直接将上面的正则表达式添加到bp的插件规则里面

一旦我们进行抓包的时候,只要在源代码或者页面中发现了关键字的触发点,然后bp就会给我们进行提示,比如下图,接下来的操作就是去数据包里面去搜索

云服务对象存储攻防挖掘案例

案例1:对象存储任意文件上传

1、打开xxx.xxx.com 显示目录遍历一般肯定是公共可读写

2、尝试获取解析oos的url地址

3、尝试对oss的url地址进行put上传

 案例2:对象存储解析域名劫持

1、访问该域名显示NoSuchBucket,那么只需要去阿里云存储桶重新创建一个与HostID一样的存储域名名称即可

 2、随后只需要上传文件,就可以让该域名显示我们上传的任意文件

案例3:对象存储泄漏AccessKey

1、在JS文件中找到存在泄漏的AccessKey

2、在托管平台找到存在泄漏的AccessKey

3、在第三方组件配置不当导致泄漏AccessKey

常见场景:/actuator/heapdump 堆转储文件泄漏SecretId/SecretKey

4、在APP、小程序反编译中泄漏AccessKey

5、利用官方OOS工具连接

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值