Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】AWS渗透测试(Part 1):S3 Buckets

$
0
0
【技术分享】AWS渗透测试(Part 1):S3 Buckets

2017-09-26 15:00:21

阅读:1890次
点赞(0)
收藏
来源: virtuesecurity.com





【技术分享】AWS渗透测试(Part 1):S3 Buckets

作者:興趣使然的小胃





【技术分享】AWS渗透测试(Part 1):S3 Buckets

译者:興趣使然的小胃

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

亚马逊云服务平台(AWS,Amazon Web Services)面向现代Web应用提供了一套非常强大又非常可靠的基础架构。随着Web服务不断涌现新的功能,我们也需要更新安全理念。对于渗透测试人员来说,有时候某些AWS服务可能会给渗透测试带来挑战。

在这一系列文章中,我们会详细分析AWS服务、常见的漏洞以及错误配置情况,也会介绍如何使用自动化工具对每个服务进行全方位的安全测试。希望渗透测试人员阅读本文后,可以使用我们研发的AWS BurpSuite扩展来评估AWS S3 buckets的安全性。

我们研发了一个BurpSuite插件:AWS Extender,这个插件可以从代理流量中识别并评估S3 buckets。此外,该插件也可以识别身份池(identity pools)、Google Cloud以及微软Azure服务。


【技术分享】AWS渗透测试(Part 1):S3 Buckets

工具下载地址为:

AWS Extender Burp插件

AWS Extender CLI


二、Amazon Simple Storage Service (S3)

自2006年3月推出以来,亚马逊S3(简单云存储服务)已经成为非常受欢迎的对象(object)存储服务,S3提供了可扩展的存储架构,目前正托管数万亿个对象。尽管S3可以托管静态网站,但它本身并不支持代码执行或者任何编程功能。S3只能通过REST、SOAP以及BitTorrent web接口来提供存储服务,支持静态文件的读取、上传以及删除。

亚马逊为S3 bucket提供了多种不同的访问控制机制,包括访问控制列表(ACL)、bucket策略以及IAM(Identity and Access Management)策略。默认情况下,亚马逊在创建S3 bucket时会为它设置一个默认ACL,以便bucket所有者掌握该bucket的所有权限。


三、S3渗透测试基础

每个web应用渗透测试人员都应该注意以下几个要点:

所有的S3 bucket都共享一个全局命名方案,因此无法阻止对bucket的枚举遍历。

所有的S3 bucket都有一个DNS入口,形式为[bucketname].s3.amazonaws.com。 我们可以通过bucket的HTTP 接口(https://[bucketname].s3.amazonaws.com)来访问bucket,当然也可以使用非常强大的AWS CLI来访问: apt-getinstallawscli awss3lss3://mybucket

四、常见的S3漏洞

如果你是AWS或者S3的新手,你需要注意以下几种常见漏洞:

Bucket未授权访问:顾名思义,经过错误配置后,匿名用户就可以列出、读取或者写入S3 bucket。

Bucket半公开访问:经过配置后,“通过身份认证的用户”就可以访问S3 bucket。这就意味着只要经过AWS的认证,任何人都可以访问这些资源。我们需要拥有有效的AWS access key以及secret才能测试这种情况。

ACL权限错误:Bucket的ACL也有相应的权限,然而许多情况下所有人都可以读取这个信息。这并不代表bucket本身出现错误配置情况,然而我们可以借此了解哪些用户拥有什么类型的访问权限。


五、访问控制列表(ACL)

S3访问控制列表(ACL)可以应用在bucket层以及对象层。ACL通常支持如下几种权限:

读取(READ)

在bucket层,该权限允许用户列出bucket中的对象。在对象层,该权限允许用户读取对象的内容及元数据。

写入(WRITE)

在bucket层,该权限允许用户创建、覆盖以及删除bucket中的对象。

读取访问控制策略(READ_ACP)

在bucket层,该权限允许用户读取bucket的访问控制列表。在对象层,该权限允许用户读取对象的访问控制列表。

写入访问控制策略(WRITE_ACP)

在bucket层,该权限允许用户设置bucket的ACL。在对象层,该权限允许用户设置对象的ACL。

完全控制(FULL_CONTROL)

在bucket层,该权限等同于向用户许可“READ”、“WRITE”、“READACP”以及“WRITEACP”权限。在对象层,该权限等同于向用户许可“READ”、“READACP”以及“WRITEACP”权限。

在这里,待授权的用户可以是独立的AWS用户,由用户ID以及邮箱来标识,也可以是如下某个预定义的组:

认证用户组(The Authenticated Users Group)

该组代表所有的AWS用户,对应“http://acs.amazonaws.com/groups/global/AuthenticatedUsers” 这个URI。

所有用户组(The All Users Group)

代表所有用户(包括匿名用户),对应“http://acs.amazonaws.com/groups/global/AllUsers” 这个URI。

日志传输组(The Log Delivery Group)

仅用于访问日志记录,对应“http://acs.amazonaws.com/groups/s3/LogDelivery” 这个URI。

ACL示例如下所示:

<?xmlversion="1.0"encoding="UTF-8"?> <AccessControlPolicyxmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>***Owner-Canonical-User-ID***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Granteexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>***Owner-Canonical-User-ID***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

AWS Extender Burp扩展可以处理前面提到过的所有权限。也就是说,当识别出某个S3 bucket后,该扩展可以执行如下测试:

1、尝试列出bucket中托管的对象(READ)。

2、尝试将一个“test.txt”文件上传到bucket中(WRITE)。

3、尝试读取bucket的访问控制列表(READ_ACP)。

4、在不修改bucket的访问控制列表的前提下,尝试设置bucket的访问控制列表(WRITE_ACP)。

注意:对于识别出来的每个S3对象,该扩展也执行了类似的测试。


六、Bucket策略

Bucket所有者可以通过bucket策略来设定操作主体(principal)能够在某个资源上执行什么操作。这里的principal可以为任意AWS用户或组,也可以是包含匿名用户在内的所有用户;action可以是bucket策略支持的任何预定义权限;而resource可以为整个bucket,也可以是某个特定的对象。bucket策略以JSON格式表示,如下所示:

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::examplebucket/*"] } ] }

上面这个策略允许在“arn:aws:s3:::examplebucket/*”资源上执行“s3:GetObject”操作,principal使用通配符“*”来表示。这实际上等同于使用访问控制列表(ACL)来赋予所有用户组拥有“examplebucket”这个S3 bucket的“READ”权限。

AWS Extender Burp扩展目前支持如下权限:

s3:ListBucket s3:ListMultipartUploadParts s3:GetBucketAcl s3:PutBucketAcl s3:PutObject s3:GetBucketNotification s3:PutBucketNotification s3:GetBucketPolicy s3:PutBucketPolicy s3:GetBucketTagging s3:PutBucketTagging s3:GetBucketWebsite s3:PutBucketWebsite s3:GetBucketCORS s3:PutBucketCORS s3:GetLifecycleConfiguration s3:PutLifecycleConfiguration s3:PutBucketLogging

在第二篇文章中,我们会介绍S3权限方面的更多内容,包括IAM、访问令牌(access token)以及EC2、Cognito认证等等。读者可以继续阅读本系列的第二篇文章。



【技术分享】AWS渗透测试(Part 1):S3 Buckets
【技术分享】AWS渗透测试(Part 1):S3 Buckets
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://www.virtuesecurity.com/blog/aws-penetration-testing-s3-buckets/

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images