浅谈云上攻防——对象存储攻防矩阵

阅读量    505189 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

前言

对象存储是云厂商提供的一种用来存储海量文件的分布式存储服务,可用于大规模存储非结构化数据。因为其具有高扩展性、低成本、可靠安全等优点,所以成为许多IT产业向云原生的开发和部署模式转变过程中不可或缺的一部分。

随着云上业务的蓬勃发展,作为云原生的一项重要能力,对象存储服务同样也面临着一系列的安全挑战。纵观近些年来的云安全漏洞,与对象存储服务相关的数据泄露事件比比皆是,以2017美国国防部承包商数据泄露为例:

“Booz Allen Hamilton公司(提供情报与防御顾问服务)在使用亚马逊S3服务器存储政府的敏感数据时,由于使用了错误的配置,从而导致了政府保密信息可被公开访问。经安全研究人员发现,公开访问的S3存储桶中包含47个文件和文件夹,其中三个文件可供下载,内部包含了大量“绝密”(TOP SECRET)以及“外籍禁阅”(NOFORN)文件。”

因此,全方面的了解关于对象存储服务的攻击手段以及途径,这将有效的帮助云平台以及云租户在面对这些风险时精准的识别风险并采取相应的防护措施,保护对象存储服务以及其中存储的数据安全。

 

对象存储服务攻防矩阵概览

本文将详细介绍《云安全攻防矩阵v1.0》中关于对象存储服务攻防矩阵部分内容,以帮助开发、运维以及安全人员了解对象存储服务的安全风险。

对象存储服务攻防矩阵

 

初始访问

云平台主API 密钥泄露

云平台主API 密钥重要性等同于用户的登录密码,其代表了账号所有者的身份以及对应的权限。

API 密钥由SecretId和SecretKey组成,用户可以通过API密钥来访问云平台API进而管理账号下的资源。在一些攻击场景中,由于开发者不安全的开发以及配置,或者一些针对设备的入侵事件,导致云平台主API 密钥泄露,攻击者可以通过窃取到的云平台主API 密钥,冒用账号所有者的身份入侵云平台,非法操作对象存储服务并篡改、窃取其中的数据。

对象存储SDK泄露

云平台所提供的对象存储服务,除了拥有多种 API 接口外,还提供了丰富多样的SDK供开发者使用。

在SDK初始化阶段,开发者需要在SDK中配置存储桶名称、路径、地域等基本信息,并且需要配置云平台的永久密钥或临时密钥,这些信息将会被编写在SDK代码中以供应用程序操作存储桶。但是,如果这些承载着密钥的代码片段不慎泄露,比如开发者误将源码上传至公开仓库或者应用开发商在为客户提供的演示示例中未对自身SDK中凭据信息进行删除,这些场景将会导致对象存储凭据泄露,进而导致对象存储服务遭受入侵,攻击者通过冒用凭据所有者身份攻击对象存储服务。

存储桶工具配置文件泄露

在对象存储服务使用过程中,为了方便用户操作存储桶,官方以及开源社区提供了大量的对象存储客户端工具以供用户使用,在使用这些工具时,首先需要在工具的配置文件或配置项中填写存储服务相关信息以及用户凭据,以便工具与存储服务之间的交互。在某些攻击场景下,例如开发者个人PC遭受钓鱼攻击、开发者对象存储客户端工具配置文件泄露等,这些编写在存储服务工具配置文件中的凭据以及存储桶信息将会被泄露出来,攻击者可以通过分析这些配置文件,从中获取凭据,而在这些工具中配置的,往往又是用户的云平台主API密钥,攻击者通过这些信息可以控制对象存储服务,在一些严重的场景,攻击者甚至可以控制用户的所有云上资产。

前端直传功能获取凭据

在一些对象存储服务与Web开发以及移动开发相结合的场景中,开发者选择使用前端直传功能来操作对象存储服务,前端直传功能指的是利用iOS/Android/JavaScript等SDK通过前端直接向访问对象存储服务。前端直传功能,可以很好的节约后端服务器的带宽与负载,但为了实现此功能,需要开发者将凭据编写在前端代码中,虽然凭据存放于前端代码中,可以被攻击者轻易获取,但这并不代表此功能不安全,在使用此功能时,只要遵守安全的开发规范,则可以保证对象存储服务的安全:正确的做法是使用临时密钥而非永久密钥作为前端凭据,并且在生成临时密钥时按照最小权限原则进行配置。但是实际应用中,如果开发人员并未遵循安全开发原则,例如错误的使用了永久密钥,或为临时凭据配置了错误的权限,这将导致攻击者可以通过前端获取的凭据访问对象存储服务。攻击者通过分析前端代码,或者通过抓取流量的方式,获得这些错误配置生成的凭据,并以此发起攻击。

云平台账号非法登录

云平台提供多种身份验证机制以供用户登录,包括手机验证、账号密码验证、邮箱验证等。在云平台登录环节,攻击者通过多种手法进行攻击以获取用户的登录权限,并冒用用户身份非法登录,具体的技术包括使用弱口令、使用用户泄露账号数据、骗取用户登录手机验证码、盗取用户登录账号等。攻击者使用获取到的账号信息进行非法登录云平台后,即可操作对象存储服务。

实例元数据服务未授权访问

云服务器实例元数据服务是一种提供查询运行中的实例内元数据的服务,云服务器实例元数据服务运行在链路本地地址上,当实例向元数据服务发起请求时,该请求不会通过网络传输,但是如果云服务器上的应用存在RCE、SSRF等漏洞时,攻击者可以通过漏洞访问实例元数据服务。通过云服务器实例元数据服务查询,攻击者除了可以获取云服务器实例的一些属性之外,更重要的是可以获取与实例绑定的拥有操作对象存储服务的角色,并通过此角色获取对象存储服务的控制权。

 

执行

使用云API执行命令

攻击者利用初始访问阶段获取到的拥有操作对象存储服务的凭据后,可以通过向云平台API接口发送 HTTP/HTTPS 请求,以实现与对象存储后台的交互操作。

对象存储服务提供了丰富的API接口以供用户使用,攻击者可以通过使用这些API接口并构造相应的参数,以此执行对应的对象存储服务操作指令,例如下载存储对象、删除存储对象以及更新存储对象等。

使用对象存储工具执行

除了使用云API接口完成对象存储服务的执行命令操作之外,还可以选择使用对象存储工具来化简通过API接口使用对象存储服务的操作。

在配置完成存储桶信息以及凭据后,攻击者可以使用对象存储工具执行对象存储服务相应的操作名:通过执行简单的命令行指令,以实现对存储桶中对象的批量上传、下载、删除等操作。

持久化

针对对象存储服务的持久化攻击阶段,主要依赖于业务中采用的代码自动化部署服务将植入后门的代码自动部署完成。

在一些云上场景中,开发者使用云托管业务来管理其Web应用,云托管服务将使用者的业务代码存储于特定的存储桶中,并采用代码自动化部署服务在代码每次发生变更时都进行构建、测试和部署操作。

在这些场景中,攻击者可以在存储桶中存储的Web应用代码内安插后门代码或后门文件,并触发代码自动化部署服务将后门部署至服务器以完成持久化操作。这些存储着恶意后门将会持久的存在于Web应用代码中,当服务器代码迁移时,这些后门也将随着迁移到新的服务器上部署。

 

权限提升

通过Write Acl提权

对象存储服务访问控制列表(ACL)是与资源关联的一个指定被授权者和授予权限的列表,每个存储桶和对象都有与之关联的ACL。

如果错误的授权给一个子用户操作存储桶ACL以及对象ACL的权限,即使该用户并未被赋予读取存储桶、写入存储桶、读取对象、写入对象的权限,这并不表示此用户不可以执行上述操作,该用户可以通过修改存储桶以及对象的ACL,将目标对象设置为任意读取权限,从而获取了存储桶以及存储对象的操作权限。因此,赋予子用户操作存储桶ACL以及对象ACL的权限,这个行为是及其危险的。

通过访问管理提权

错误的授予云平台子账号过高的权限,也可能会导致子账号通过访问管理功能进行提权操作。

与通过Write Acl提权操作不同的是,由于错误的授予云平台子账号过高的操作访问管理功能的权限,子账号用户可以通过访问管理功能自行授权策略,例如授权QcloudCOSFullAccess策略,此策略授予子账号用户对象存储服务全读写访问权限,而非单纯的修改存储桶以及存储对象的ACL。

通过此攻击手段,拥有操作对象存储服务权限的子账号,即使子账号自身对目标存储桶、存储对象无可读可写权限,子账号可以通过在访问管理中修改其对象存储服务的权限策略,越权操作存储桶中资源。

 

窃取凭证

云服务凭证泄露

在一些云上场景中,云服务会依托对象存储服务存储用户Web应用代码,用以自动化托管用户的Web应用程序。在这些场景中,用户的Web应用程序源码将会存储于存储桶中,并且默认以明文形式存储,在泄露的Web应用程序源码中,往往存在着Web应用开发者用来调用其他云上服务的凭据,甚至存在云平台主API密钥,攻击者可以通过分析泄露的Web应用程序源码来获取这些凭据。

用户账号数据泄露

在一些场景中,开发者使用对象存储服务存储其业务中的用户数据,例如用户的姓名、ID号码、电话等敏感数据,当然也会包含用户账号密码等凭据信息。

攻击者通过对存储桶中用户数据的提取与分析以窃取这些用户的凭据数据,并通过获取的信息进行后续的攻击。

 

横向移动

窃取云凭据横向移动

通过存储桶中Web应用程序源代码的分析,攻击者可能会从Web应用程序的配置文件中获取的应用开发者用来调用其他云上服务的凭据。攻击者利用获取到的云凭据,横向移动到用户的其他云上业务中。如果攻击者获取到的凭据为云平台主API密钥,攻击者可以通过此密钥横向移动到用户的所有云上资产中。

窃取用户账号攻击其他应用

攻击者通过从存储桶中窃取的用户账号数据,用以横向移动至用户的其他应用中,包括用户的非云上应用。

 

影响

窃取存储桶内项目源码

当开发者使用对象存储服务存储项目源码时,攻击者可以通过执行下载存储桶中的存储对象指令,获取到存储于存储桶中的项目源码,造成源码泄露事件发生,通过对源码的分析,攻击者可以获取更多的可利用信息。

窃取存储桶内用户数据

当用户使用存储服务存储用户数据时,攻击者通过攻击存储服务,以窃取用户敏感数据,这些信息可能包含用户的姓名、证件号码、电话、账号信息等,当用户敏感信息泄露事件发生后,将会造成严重的影响。

破坏存储数据

攻击者在获取存储桶操作权限之后,可能试图对存储桶中存储的数据进行删除或者覆盖,以破坏用户存储的对象数据。

篡改存储数据

除了破坏存储服务中的用户数据之外,攻击者也可能会对存储对象进行篡改操作,通过篡改存储桶中代码、文本内容、图片等对象以达到攻击效果。

在一个常见的场景中,用户使用对象存储服务部署静态网站,攻击者通过篡改其中页面内的文本内容以及图片,对目标站点造成不良的影响。

植入后门

攻击者通过在对象存储服务中存储的Web应用代码中插入恶意代码,或者在项目目录中插入后门文件,当这些植入后门的Web应用代码被部署至云服务器时,攻击者可以利用这些后门发起进一步的攻击。当用户对存储桶中的Web应用代码进行迁移时,这些恶意代码也将随着业务代码一同迁移。

拒绝服务

当攻击者拥有修改存储桶以及其中对象Acl访问控制列表时,攻击者可能会对存储对象的 Acl进行修改,将一些本应该公开访问的存储对象设置为私有读写,或者使一些本应有权限访问的角色无权访问存储对象。

攻击者可以通过此技术手段完成针对对象存储服务的拒绝服务攻击,从而影响目标资源的可用性。

 

写在后面

对象存储服务作为一项重要的云上服务,承担了存储用户数据的重要功能,深入了解对象存储服务所面临的风险点以及对应的攻击技术,可以有效的确保云上存储服务安全性。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多