概念
云服务的对象存储是一种用于存储和管理大量非结构化数据的技术。它将数据分割成对象,每个对象包含数据和元数据。对象存储具有高可扩展性、高可用性和耐久性等特点。
对象存储的主要对象是文件、图片、视频、音频和日志等非结构化数据。它适用于各种应用场景,如备份和恢复、归档数据、大数据分析、内容存储和分发等。
云服务的对象存储具有以下特点:
- 高可扩展性:对象存储可以存储大量数据,并支持水平扩展,可以根据需求动态增加存储容量。
- 高可用性:对象存储在多个节点上进行数据复制,以提供数据冗余和容错能力,确保数据的高可用性。
- 耐久性:对象存储通过数据冗余和纠删码等技术来保护数据免受硬件故障和数据丢失的影响,提供数据的持久性存储。
- 低成本:对象存储通常采用分布式架构,可以在低性能硬件上运行,从而降低了成本。
- 高性能:对象存储提供了高度可定制的数据读写接口和高速网络传输,可以实现快速的数据存取。
云服务的对象存储在各个云服务提供商中得到了广泛应用,如Amazon S3、Microsoft Azure Blob Storage、Google Cloud Storage等。它们提供了可靠、安全、经济高效的存储服务,为用户提供了高度扩展的云存储解决方案。
各大云厂商的不同叫法
亚马逊AWS:Amazon S3(Simple Storage Service)
微软Azure:Azure Blob
谷歌云:GCS(Google Cloud Storage)
阿里云:对象存储OSS(Object Storage Service)
腾讯云:对象存储COS(Cloud Object Storage)
华为云:对象存储OBS(Object Storage Service)
IBM云:对象存储COS(Cloud Object Storage)
Bucket
在对象存储中,Bucket(存储桶)是用于组织和管理对象的基本容器。一个Bucket可以容纳任意数量的对象,并通过一个唯一的名称来进行标识。Bucket名称在整个存储系统中必须是唯一的。可以将Bucket视为一个文件夹或容器,用于存储相关对象。
Bucket具有以下特性:
-
命名空间唯一性:每个Bucket的名称在整个存储系统中必须唯一。
-
存储策略:Bucket可以设置不同的存储策略,例如数据冗余备份策略、数据保留时间等。
-
访问控制:Bucket可以设置访问权限,控制哪些用户或实体可以访问Bucket中的对象。
-
集合对象:Bucket中可以容纳多个对象,每个对象都有唯一的Key来标识。
-
元数据:Bucket可以存储一些与对象相关的元数据信息,例如文件大小、创建时间和修改时间等。
对象存储中的Bucket是一个很重要的概念,它提供了对存储系统中对象的组织和管理能力。使用Bucket可以方便地将相关的对象进行分组,并对其设置适当的访问权限和存储策略。
开通
本文以阿里云OSS举例,登录阿里云官网,找到“对象存储”
阿里云OSS是后付费模式,点击立即开通
创建Bucket,填好名称和地域(Bucket名称是全网唯一的)
这样,OSS就创建成功了,接下来就可以上传自己的文件资源了
安全问题
权限配置不当
阿里云OSS默认设置是阻止“公共访问”,也就是读写权限。
但是,有时开发者和运维人员为了方便开发调试,加上缺乏安全意识,会开启公共读写权限。
第一种情况是只读,但是开启了“ListObject”,类似于“目录索引”功能
这种情况就会导致一些安全问题:暴露敏感文件和信息、增加攻击面、便于攻击者信息收集
第二种情况,是开启了“写”的权限。默认情况未开启,PUT操作返回403
开启后,PUT返回200,成功上传文件
开启OSS的写权限可能会带来以下安全问题:
-
数据泄露:如果OSS的写权限被滥用或配置不当,攻击者可能会上传恶意文件或私密数据,导致数据泄露。
-
存储空间滥用:开启写权限后,攻击者可能会滥用存储空间,上传大量未经授权的文件,占用大量的存储资源,影响正常的业务运行。
-
恶意文件传播:攻击者可能会上传包含恶意代码的文件,通过网站或其他方式传播,导致用户系统感染恶意软件或病毒。
-
上传非法内容:开启写权限后,攻击者可能会上传非法或违规内容,如色情、暴力、恶意诋毁等,导致法律风险和声誉受损。
-
篡改数据:攻击者可能通过上传恶意文件或替换已有文件的方式,篡改网站的数据或页面内容,破坏用户信任和网站正常运行。
存储桶接管
阿里云OSS测试(目前阿里云已优化)
绑定域名
绑定域名后,可以通过自定义域名访问存储桶
并且可以解析桶内的静态资源
后续,如果使用者将做了域名绑定的存储桶(Bucket)删除,而未同时删除自定义域名,且自定义域名的域名解析处未删除CNAME记录
Bucket删除后,如果攻击者访问自定义域名,会有如下提示
但是,使用PING命令,会显示存储桶的标准域名,攻击者从中可以收集到以下信息
使用原存储桶标准域名访问,显示“NoSuchBucket”
于是,攻击者登录自己的OSS创建同样的存储桶
但是由于阿里云OSS多次优化,已无法绑定受害者的域名,需要txt记录值验证
目前该安全问题不算严重。通过域名访问显示“AccessDenied”
但是路由还会指向攻击者的存储桶
华为云OBS测试(成功复现)
使用一账户创建存储桶绑定域名后,再删除存储桶(这里缺几张截图,不补了,师傅可自行测试)
再次访问该域名显示“NoSuchBucket”
使用nslookup收集受害者信息
查询上图IP地理位置,即创建存储桶选择的地域
使用另一华为账户模拟攻击者账户,根据受害者信息仿造存储桶
配置域名解析,绑定受害者域名
再次访问该域名,成功接管受害者自定义域名存储桶!
成功解析攻击者上传的静态资源
危害
AccessKey泄露
AccessKey泄露并不是对象存储(如阿里云OSS、AWS S3)独有的安全问题,而是所有依赖API访问的云服务都会面临的潜在安全风险。AccessKey 是云服务中常用的身份认证凭证,如果泄露,攻击者可能会冒充合法用户进行操作,带来严重的安全隐患。
由于不是对象存储特有的安全问题,详细叙述的话涉及的篇幅可能较长,因此我计划在后续的文章中专门撰写一篇进行详细探讨。本篇文章将重点聚焦在对象存储相关性更高的安全问题上,不再赘述AccessKey泄露的问题。
结尾
写这篇文章的初衷是记录和分享我的学习心得,但技术的发展日新月异,如果各位大佬有不同的想法或建议,欢迎指正,也期待与您一起探讨交流!