云安全(二):对象存储

admin 2025年2月11日00:38:13评论10 views字数 4922阅读16分24秒阅读模式

0x00 Concept

在“云安全(一)”中简单的介绍过对象存储的概念,本篇章中将详细的说明对象存储相关的概念,以及其存在的安全风险。个人才疏学浅,有未阐述清楚或遗漏的地方,还请谅解,相关的内容可自行搜索。注:以下所有的内容都是以阿里云为例。

1. 对象存储

对象存储的官方介绍:阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务。可以简单的理解为,将要存储的数据以对象的形式来存储在远程服务器集群上(也就是所谓的云端),那么问题来了,什么是对象、对象由哪些部分组成以及为什么要以对象的形式存储?

首先,什么是对象?在对象存储的服务模式中,数据被抽象为一个个对象,以对象为单位进行处理、存储和检索,也就说对象是一种数据存储单元,可能是图片、视频、文件等。对象由三部分组成:Data(数据本身)、Metadata(元数据,包含了对象的描述信息,包括:类型、大小、校验值、自定义信息等)以及 Key(全局唯一标识符,用于对象的快速检索)。并且在处理大量非结构化的数据是,对象存储具有很明显的优势,对象存储可以说是非常适合云环境。

2. 存储桶

不同于传统的层级目录结构,对象存储在一个扁平化的地址空间中,比如:image/1.png 和 2.png 在同一个目录中,没有层级关系。这个扁平化的地方就是存储桶,也叫 Bucket。数据以对象的形式上传到 Bucket 中,并指定 Key 作为其唯一的标识。Bucket 具有各种属性,包括:地域、访问权限、存储类型等。Bucket 在 OSS 范围内必须是全局唯一的,且创建后,名称将无法修改。

全局唯一表示在阿里云所有用户创建的 Bucket 名称都不能相同,比如 A 用户创建 example 的 Bucket,其他用户就无法在创建名为 example 的 Bucket。

云安全(二):对象存储

3. AK/SK

AccessKey ID 和 AccessKey Secret 简称为 AK/SK,当访问对象时,通过使用 AccessKey ID 和 AccessKey Secret 对称加密的方法来验证某个请求的发送者身份。

  • AccessKey ID 用于标识用户
  • AccessKey Secret 是用于加密签名字符串和  OSS 用来验证签名字符串的密钥

0x01 Usage

简单的介绍了对象存储的相关概念,如下会具体演示怎么创建 Bucket,并且在 Bucket 中存储对象。OSS 控制台:https://oss.console.aliyun.com/

1. 创建 Bucket

首先点击“Bucket 列表”->“创建 Bucket”。

云安全(二):对象存储

填写“Bucket 名称”,这里的名称必须是全局唯一的。选择“地域属性”,这里选择的地域表示 OSS 数据中心的物理位置,一般而言,距离越近访问越快,创建后无法修改。Endpoint 表示 OSS 对外服务的访问域名,根据不同的地理位置、内外网环境,域名也有所不同。比如下图中的 cn-hangzhou 表示数据中心在中国杭州。

云安全(二):对象存储

其他暂时用不到,默认即可。在“完成创建”后,就可以在“Bucket”列表中看到了。

云安全(二):对象存储

2. 上传对象

在“Bucket 列表”中选择新建的 Bucket,然后在“文件列表”中“上传文件”。

云安全(二):对象存储

点击上传的文件,即可看到详情。

云安全(二):对象存储

直接访问文件会被拒绝(默认是私有权限),可以修改其访问权限来实现“公共读”。

云安全(二):对象存储

首先关闭“阻止公共访问”。

云安全(二):对象存储

点击详情右边的三个点来“设置读写权限”,修改为“公共读”即可。注:这里设置的只是单个文件的权限。

云安全(二):对象存储

除此之外,还可以在“读写权限”中将 Bucket 的访问权限设置为“公共读”。注:这里设置的 Bucket 的权限。

云安全(二):对象存储
云安全(二):对象存储

3. 创建 AK/SK

将鼠标移至头像处,随后点击“AccessKey”来创建密钥。

云安全(二):对象存储
云安全(二):对象存储

0x02 Vulnerability

TerraformGoat 是一个支持多云的云场景漏洞靶场搭建工具,目前支持阿里云、腾讯云、华为云、Amazon Web Services、Google Cloud Platform、Microsoft Azure 六个云厂商的云场景漏洞搭建。如下所有案例都以阿里云为主。靶场下载地址:https://github.com/HXSecurity/TerraformGoat

1. 环境搭建

TerraformGoat 使用 Docker 部署,需要 Docker Engine 的支持,所以首先得安装 Docker Engine。安装参考:https://docs.docker.com/engine/install/,如下以 Ubuntu 来进行演示。

# 设置 Docker 的 apt 存储库for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkgdonesudo apt updatesudo apt install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.ascecho"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt update# 安装 Dockersudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 验证 Docker 是否成功安装,如下图所示sudo docker run hello-world
云安全(二):对象存储

安装完 Docker 以及 Docker Engine 后,可以通过如下命令来拉取 TerraformGoat 镜像(如下以阿里云为例)。

# 拉取镜像sudo docker pull registry.cn-hongkong.aliyuncs.com/huoxian_pub/terraformgoat_aliyun:0.0.7# 创建容器sudo docker run -itd --name terraformgoat_aliyun_0.0.7 registry.cn-hongkong.aliyuncs.com/huoxian_pub/terraformgoat_aliyun:0.0.7# 开启容器sudo docker start ID# 进入容器sudo docker exec -it terraformgoat_aliyun_0.0.7 /bin/bash# 停止容器sudo docker stop ID

进入对应容器后,再次进入对应的靶场,这里以“unrestricted_file_upload”为例。

云安全(二):对象存储

在开启靶场的第一步,需要配置 AK/SK(配置一次即可)。首先输入命令:aliyun configure

云安全(二):对象存储

配置好 AK/SK 后,通过 terraform 工具(后续文章会详细介绍)来搭建靶场。

terraform initterraform apply

提示 Enter a value:,输入 yes 并回车,成功后会返回 Bucket 的链接,如此靶场搭建成功。

云安全(二):对象存储

为避免云服务持续产生费用,在复现完后及时销毁靶场。销毁靶场命令:terraform destroy

云安全(二):对象存储

2. 任意文件上传

如果 Bucket 的权限配置为“公共读写”,那么就可以通过 PUT 方法覆盖或上传任意文件。

云安全(二):对象存储
云安全(二):对象存储

如果支持 HTML 解析,那么就可以利用文化上传进行钓鱼、暗链等操作。除此之外,如果其他机器与当前 Bucket 存在数据的交互,那么可以构造恶意内容来实现投毒。

3. Bucket 对象遍历

如果目标策略配置了 ListObject 策略,会造成 Bucket 的目录遍历,泄露 Bucket 的相关信息。

云安全(二):对象存储

搭建完成后,直接访问 Bucket,可以看到列出了当前 Bucket 下的所有对象。

云安全(二):对象存储
云安全(二):对象存储

4. Object ACL 可读

如果在“Bucket 授权策略”配置了 GetObjectAcl 的权限,则可以通过 ?acl 来查看对象的 ACL 权限。

云安全(二):对象存储
云安全(二):对象存储

5. Object ACL 可写

如果在“Bucket 授权策略”配置了 PutObjectAcl 权限,那么修改对象的 ACL 来实现未授权访问。

云安全(二):对象存储

直接访问 flag.txt 会被拒绝。

云安全(二):对象存储

由于目标配置了 GetObjectAcl 的权限,可以通过 ?acl 来查看对象的 ACL 权限,显示是私有。

云安全(二):对象存储

通过 PUT 方法将对象的 ACL 修改为“公共读”,添加头部 x-oss-object-acl: public-read

云安全(二):对象存储
云安全(二):对象存储

6. Bucket 策略可读

如果在“Bucket 授权策略”配置了 GetBucketPolicy 权限,那么可以通过 ?policy 来列出支持的策略。

云安全(二):对象存储
云安全(二):对象存储

7. Bucket 策略可写

如果在“Bucket 授权策略”配置了 PutBucketPolicy 策略,表示可以通过 PUT 方式修改 Bucket 的 policy。

云安全(二):对象存储

直接访问被拒绝。

云安全(二):对象存储

查看支持的策略,发现目标支持 PutBucketPolicy 策略。

云安全(二):对象存储

通过 PUT 方法来添加 ListObjects 策略,实现目录遍历。

云安全(二):对象存储
云安全(二):对象存储

8. 特殊的 Bucket 策略

如果设置了某些特定的 IP 或 UA 才能访问 Bucket,且错误的配置了 GetBucketPolicy 策略,那么可以先通过官方工具 aliyun cli 来查看存储桶的特定配置,然后构造请求以绕过限制实现访问 Bucket。要想使用 aliyun cli 工具来获取 Bucket 相关信息,需要配置 AK/SK,当然如果有了 AK/SK 可使用相关工具直接接管存储桶,这里只是为了演示 aliyun cli 工具的使用。

直接访问被拒绝。

云安全(二):对象存储

首先,通过官方工具 aliyun cli 来查看 Bucket 的策略。命令:aliyun oss bucket-policy --method get oss://hx-cloud-security-vspsf

云安全(二):对象存储

可以看到,只要 UA 头部为 HxSecurityLab 可以列出所有对象。

云安全(二):对象存储

9. 存储桶爆破

当存储桶存在时,会返回“AccessDenied”,如下:

云安全(二):对象存储

而存储桶不存在时,会返回“InvalidBucketName”或“NoSuchBucket”,如下:

云安全(二):对象存储

返回“InvalidBucketName”,表示存储桶的命名不符合规范。

云安全(二):对象存储

如此,当不知道 Bucket 的名称时,可通过爆破并根据其返回内容来判断 Bucket 是否存在。除此之外,还可以爆破 Bucket 对应的 Key 来获取目标的数据和资源,也就是所谓的目录爆破

10 存储桶接管

具体可以参考链接:

https://blog.vidocsecurity.com/blog/aws-s3-bucket-takeover/

https://wiki.teamssix.com/CloudService/S3/bucket-takeover.html

0x03 Reference

https://help.aliyun.com/zh/oss/

https://zone.huoxian.cn/d/918-oss

https://github.com/HXSecurity/TerraformGoat/blob/main/README_CN.md

https://x1lys.github.io/2024/07/16/%E6%B5%85%E6%9E%90OSS%E5%AD%98%E5%82%A8%E6%A1%B6%E6%BC%8F%E6%B4%9E/index.html

原文始发于微信公众号(JJ1ng):云安全(二):对象存储

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日00:38:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   云安全(二):对象存储https://cn-sec.com/archives/3663158.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息