OSS安全攻防

一、基本介绍

阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过阿里云OSS文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。

对象存储作为云原生的一项重要功能,面临着一系列安全挑战。但在对象存储所导致的安全问题中,绝大部分是由于用户使用此功能时错误的配置导致的。据统计,由于缺乏经验或人为错误导致的存储桶错误配置所造成的安全问题占所有云安全漏洞的16%。例如2017年美国新闻与金融信息公司道琼斯(Dow Jones & Company)发生用户数据泄露事件,安全研究人员在亚马逊云服务器上发现440万道琼斯客户的细节信息,被泄露信息包含客户姓名、ID、住址、订阅细节、信用卡后四位和部分电话号码。道琼斯公司已确认此事,称有220万客户数据受影响,数据泄露的主要原因是道琼斯公司对服务器的权限配置错误。

下面将介绍下对象存储OSS产品中涉及的几个基本概念,方便后续对其涉及到的安全风险更好的了解。

1.1 存储空间(Bucket)

存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

1.2 对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。对象的生命周期是从上传成功到被删除为止。在整个生命周期内,除通过追加方式上传的Object可以通过继续追加上传写入数据外,其他方式上传的Object内容无法编辑。

1.3 ObjectKey

在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg。

1.4 Region(地域)

Region表示OSS的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的Region访问速度更快。Region是在创建Bucket的时候指定的,一旦指定之后就不允许更改。该Bucket下所有的Object都存储在对应的数据中心,目前不支持Object级别的Region设置。

1.5 Endpoint(访问域名)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。例如杭州Region的外网Endpoint是oss-cn-hangzhou.aliyuncs.com,内网Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。

1.6 AccessKey(访问密钥)

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKey Secret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

AccessKey包含以下三种:

  • Bucket的拥有者申请的AccessKey。
  • 被Bucket的拥有者通过RAM授权给第三方请求者的AccessKey。
  • 被Bucket的拥有者通过STS授权给第三方请求者的AccessKey。

二、常见风险点

常见的OSS安全风险点有如下几种,下面将会分别进行介绍。

2.1、存储空间访问权限

存储空间(Bucket)是存储对象(Object)的容器。对象都隶属于存储空间,存储空间的访问权限(ACL)有以下三类:

访问权限 描述 访问权限值
私有 存储空间的拥有者和授权用户有该存储空间内的文件的读写权限,其他用户没有权限操作该存储空间内的文件。 Aliyun::OSS::ACL::PRIVATE
公共读 存储空间的拥有者和授权用户有该存储空间内的文件的读写权限,其他用户只有该存储空间内的文件的读权限。请谨慎使用该权限。 Aliyun::OSS::ACL::PUBLIC_READ
公共读写 所有用户都有该存储空间内的文件的读写权限。请谨慎使用该权限。 Aliyun::OSS::ACL::PUBLIC_READ_WRITE

在上传文件(Object)时未指定文件的ACL,则文件的ACL均默认继承Bucket ACL。故申请OSS Bucket一般禁止申请公共读写。公共读写意味着互联网上任何用户都可以对该Object进行访问,并且向该Object写入数据。这有可能造成数据的外泄以及费用激增,若被人恶意写入违法信息还可能会影响公司商誉。

如果想加速文件访问,可以配置OSS 私有Bucket回源。但需要注意,开启OSS私有Bucket回源授权后,即授权CDN对您所有Bucket的只读权限,不只是对当前Bucket授权

2.2、AccessKey泄露

阿里云AccessKey是用户访问内部资源最重要的身份凭证。用户调用API时的通信加密和身份认证会使用API凭证(即基于非对称密钥算法的鉴权密钥对)。API凭证是云上用户调用云服务API、访问云上资源的唯一身份凭证。API凭证相当于登录密码。在阿里云,用户可以使用AccessKey(简称AK)构造一个API请求(或者使用云服务SDK)来操作资源。AccessKey包括AccessKey ID和AccessKey Secret。其中AccessKey ID用于标识用户,AccessKey Secret是用来验证用户身份合法性的密钥。AccessKey Secret必须保密。

但在实际开发过程中,部分开发人员意识不强。前端开发者有些会直接使用阿里云SDK上传,硬编码AccessKey进行上传,这种方式极其危险,前端禁止使用该操作上传文件。可以让后端上传,或者通过STS服务颁发一个临时访问凭证。该临时访问凭证可在规定时间内访问OSS资源。临时访问凭证无需透露长期密钥,使OSS资源访问更加安全。

OSS安全攻防

2.3、文件覆盖

如果在配置存储桶时,管理员错误的将存储桶权限,配置为可写,这将会导致攻击者可上传任意文件到存储桶中,或覆盖已经存在的文件。OSS安全攻防

如果错误配置权限,可以通过去除掉PutObject权限方式解决。但如果必须使用到该权限,该如何做呢?

在Web、App等应用开发中,经常会发生此类问题。例如场景:在一个Web应用使用对象存储来存储用户上传视频,且通过客户端直传的方式将用户上传的视频上传至Bucket中,并希望在存储桶/app/路径中存储桶用户的头像,由于后端开发时为了方便而进行了不规范的存储桶Policy配置,在生成用户用以上传视频的临时密钥时直接将此临时密钥允许访问的 resource 指定为 acs:oss:::app/image/*路径。这样以来,系统为每个用户所生成的用以上传的临时密钥虽然不相同,但是这个临时密钥都拥有acs:oss:::app/image/*路径中的所有资源的读写权限,这将会带来严重的安全问题。

此时可通过控制Policy,限制生成的临时认证权限。通过每个用户的用户标识来为每一个用户设置一个独用的路径,例如可以在为用户生成临时密钥时,将policy中resource 指定为 acs:oss:::app/image/${user_id}/

2.4、XSS风险

如果目标的对象存储支持 html 解析,那就可以利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作,常见的文件有SVG、html等文件,会被OSS解析。研发在使用对象存储时,需要根据业务需要在服务端先校验文件后缀类型,再校验Content-Type是否属与此后缀类型相匹配;阿里云储存方需要对文件后缀类型与文件MIME强关联,例如禁止jpeg后缀的文件MIME变成text/html。OSS安全攻防

2.5、内容安全

除了常见的OSS应用安全之外,还有上传内容安全也值得注意。随着业务的急剧发展,上面的数据呈现爆炸式增长。上传大量的的视频、图片,这些日益增长的内容中充斥着各种不可控的风险因素,例如色情视频和图片、涉政暴恐内容、各种垃圾广告等。随着政府监管的日渐严格,网站及平台需要加强对网站内容的管理和检测。所以对于上传文件的输入点,需要接入风控进行审核,或者开启阿里云OSS内容审核功能。注意:如果在OSS违规检测设置中应用了默认的冻结方式(即修改文件访问权限),那么在以下情况下,即使OSS中的违规图片被冻结,仍然可以被外部访问:

  • 开启了CDN私有Bucket回源授权。更多信息,请参见OSS私有Bucket回源。
  • OSS违规图片本身设置了私有访问权限。

三、思考

OSS服务作为一项重要的云上服务,承担了存储用户数据的重要功能。对象存储服务提供了细粒度的访问权限控制功能,以保证用户数据的安全性。如果使用OSS服务时安全意识不足或对访问权限以及访问策略错误理解,将会导致数据被非法访问或篡改,严重的话,将会导致公司APP下架或者面临相关整改。

因此,深入了解OSS服务所提供的访问权限以及访问策略评估机制,并始终遵循最小权限原则,将会为存储桶中存储的数据安全构筑立体防护体系的一道坚固的门锁。

最后再提一句,磨刀不误砍柴工,在日常开发中,一定要事前考虑到一个产品的安全、稳定、兼容等方方面面问题。

参考文档:

1、https://help.aliyun.com/document_detail/31817.html 

2、https://www.freebuf.com/articles/database/284588.html


原文始发于微信公众号(洋洋自语):OSS安全攻防

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/272904.html

(0)
明月予我的头像明月予我bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!