概念
云服务的对象存储是一种用于存储和管理大量非结构化数据的技术。它将数据分割成对象,每个对象包含数据和元数据。对象存储具有高可扩展性、高可用性和耐久性等特点。
对象存储的主要对象是文件、图片、视频、音频和日志等非结构化数据。它适用于各种应用场景,如备份和恢复、归档数据、大数据分析、内容存储和分发等。
云服务的对象存储具有以下特点:
-
高可扩展性:对象存储可以存储大量数据,并支持水平扩展,可以根据需求动态增加存储容量。
-
高可用性:对象存储在多个节点上进行数据复制,以提供数据冗余和容错能力,确保数据的高可用性。
-
耐久性:对象存储通过数据冗余和纠删码等技术来保护数据免受硬件故障和数据丢失的影响,提供数据的持久性存储。
-
低成本:对象存储通常采用分布式架构,可以在低性能硬件上运行,从而降低了成本。
-
高性能:对象存储提供了高度可定制的数据读写接口和高速网络传输,可以实现快速的数据存取。
云服务的对象存储在各个云服务提供商中得到了广泛应用,如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具有以下特性:
1.命名空间唯一性:每个Bucket的名称在整个存储系统中必须唯一。
2.存储策略:Bucket可以设置不同的存储策略,例如数据冗余备份策略、数据保留时间等。
3.访问控制:Bucket可以设置访问权限,控制哪些用户或实体可以访问Bucket中的对象。
4.集合对象:Bucket中可以容纳多个对象,每个对象都有唯一的Key来标识。
5.元数据:Bucket可以存储一些与对象相关的元数据信息,例如文件大小、创建时间和修改时间等。
对象存储中的Bucket是一个很重要的概念,它提供了对存储系统中对象的组织和管理能力。使用Bucket可以方便地将相关的对象进行分组,并对其设置适当的访问权限和存储策略。
开通
本文以阿里云OSS举例,登录阿里云官网,找到“对象存储”
阿里云OSS是后付费模式,点击立即开通
创建Bucket,填好名称和地域(Bucket名称是全网唯一的)
这样,OSS就创建成功了,接下来就可以上传自己的文件资源了
安全问题
权限配置不当
阿里云OSS默认设置是阻止“公共访问”,也就是读写权限。
但是,有时开发者和运维人员为了方便开发调试,加上缺乏安全意识,会开启公共读写权限。
第一种情况是只读,但是开启了“ListObject”,类似于“目录索引”功能
这种情况就会导致一些安全问题:暴露敏感文件和信息、增加攻击面、便于攻击者信息收集
第二种情况,是开启了“写”的权限。默认情况未开启,PUT操作返回403
开启后,PUT返回200,成功上传文件
开启OSS的写权限可能会带来以下安全问题:
1.数据泄露:如果OSS的写权限被滥用或配置不当,攻击者可能会上传恶意文件或私密数据,导致数据泄露。
2.存储空间滥用:开启写权限后,攻击者可能会滥用存储空间,上传大量未经授权的文件,占用大量的存储资源,影响正常的业务运行。
3.恶意文件传播:攻击者可能会上传包含恶意代码的文件,通过网站或其他方式传播,导致用户系统感染恶意软件或病毒。
4.上传非法内容:开启写权限后,攻击者可能会上传非法或违规内容,如色情、暴力、恶意诋毁等,导致法律风险和声誉受损。
5.篡改数据:攻击者可能通过上传恶意文件或替换已有文件的方式,篡改网站的数据或页面内容,破坏用户信任和网站正常运行。
存储桶接管(该问题阿里云已优化)
阿里云OSS绑定域名
绑定域名后,可以通过自定义域名访问存储桶
并且可以解析桶内的静态资源
后续,如果使用者将做了域名绑定的存储桶(Bucket)删除,而未同时删除自定义域名,且自定义域名的域名解析处未删除CNAME记录
Bucket删除后,如果攻击者访问自定义域名,会有如下提示
但是,使用PING命令,会显示存储桶的标准域名,攻击者从中可以收集到以下信息
使用原存储桶标准域名访问,显示“NoSuchBucket”
于是,攻击者登录自己的OSS创建同样的存储桶
由于阿里云OSS多次优化,已无法绑定受害者的域名,需要txt记录值验证
目前该安全问题不算严重。通过域名访问显示“AccessDenied”
但是路由还会指向攻击者的存储桶
AccessKey泄露
AccessKey泄露并不是对象存储(如阿里云OSS、AWS S3)独有的安全问题,而是所有依赖API访问的云服务都会面临的潜在安全风险。AccessKey 是云服务中常用的身份认证凭证,如果泄露,攻击者可能会冒充合法用户进行操作,带来严重的安全隐患。
-
什么是 AccessKey?
AccessKey 通常包括以下两个部分:
AccessKey ID (AK ID):用于标识用户身份。
AccessKey Secret (AK Secret):用于验证身份,类似密码。
它们用于用户通过编程接口(API/SDK)访问云服务时的身份认证。
-
AccessKey 泄露的风险
-
攻击者可以访问或删除 Bucket 内的资源(例如文件、图片、视频等)。
-
如果 Bucket 有公网读取权限,还可能利用你的存储资源作为恶意文件的分发渠道。
-
如果有写入权限,可能存储非法内容,导致法律或合规问题。
-
AccessKey 泄露途径
1.源代码存储库:如果您的源代码存储库(如GitHub或Bitbucket)公开了您的代码,其中可能包含了云服务access key,攻击者可以通过查看代码获取这些敏感信息。
2.日志文件:如果您将云服务access key写入日志文件中,并且这些日志文件被公开访问或者被攻击者获取到,那么他们可以利用这些信息进行未经授权访问云服务。
3.配置文件:如果您的应用程序或系统配置文件中明文存储了云服务access key,并且这些配置文件被不恰当地共享、存储或传输,攻击者也可以通过获取这些配置文件来获取access key。
4.开发环境和测试环境:在开发和测试环境中,通常需要使用云服务access key来进行调试和测试。如果这些环境没有得到适当的保护,攻击者可以获取到这些敏感信息。
5.APP/小程序编译打包时被嵌入:在应用程序或小程序的编译打包过程中,如果access key被不适当地嵌入到二进制文件、APK或IPA中,攻击者可以通过解析这些文件来获取access key。
6.第三方应用程序:如果您使用了第三方应用程序或服务来管理和监控云服务,这些应用程序可能会要求您提供云服务access key,如/actuator/heapdump。如果这些应用程序没有得到适当的保护或者存在安全漏洞,攻击者可以通过攻击这些应用程序获取到云服务access key。
-
如何避免
-
将云服务access key存储在安全的地方,比如密码管理工具或加密存储中。
-
避免在源代码存储库、日志文件和配置文件中明文存储access key。
-
使用适当的访问控制和权限设置来限制对云服务access key的访问。
-
定期审查和更新云服务access key,以确保其安全性。
-
尽量避免在开发和测试环境中使用真实的云服务access key,可以使用临时凭证或虚拟账号来进行测试和调试。
-
仔细评估并选择可信赖的第三方应用程序,并确保其有良好的安全措施来保护云服务access key。
原文始发于微信公众号(仇辉攻防):【云安全】云服务-对象存储-安全问题分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论