什么是S3?
Amazon Simple Storage Service(S3)是一项AWS服务,供用户以安全的方式存储数据。S3 Bucket权限默认是安全的,这意味着在创建时,只有存储桶和对象所有者可以访问S3服务器上的资源,如S3常见问题解答中所述。可以使用身份和访问管理(IAM)策略向存储桶添加额外的访问控制,使S3成为限制授权用户的非常强大的资源。
创建新用户和混淆安全策略可能既复杂又耗时,导致经验不足的公司打开他们无意的权限。IAM可以绘制许多与Windows组策略的相似之处,为组及其用户提供非常特定的访问和控制权限。
与Windows策略错误一样,S3存储桶上的宽松身份管理的影响可能有所不同——从轻微的信息泄露到完全的数据泄露。例如,一些网站使用S3作为服务图像和Javascript等资产的平台。其他人将完整的服务器备份推送到云端。与任何安全漏洞一样,风险不仅在于问题的存在,还在于背景。
作为渗透测试人员,快速检查S3存储桶的存在和配置可能很容易,并且总是值得检查。
被动侦察:确定区域
许多AWS应用程序没有在Web应用程序防火墙(WAF)后面配置,因此使用nslookup可以直接识别服务器的区域。如果服务器位于WAF后面,可能需要其他方法来确定目标的IP地址。
使用flaws.cloud IP地址的nslookup显示它位于us-west-2。涵盖AWS安全性的整个flAWS CTF可以在这里找到:http://flaws.cloud/
主动侦察:探测Buckets
一旦确定了一个区域,就可以开始一般查询和列举存储桶名称。实际上不需要事先确定区域,但它会节省稍后查询AWS的时间。我们建议将子域、域和顶级域组合起来,以确定在S3上是否有存储桶。例如,如果我们要搜索属于www.rhinosecuritylabs.com的S3存储桶,我们可能会尝试桶名称rinosecuritylabs.com和www.rhinosecuritylabs.com。
为了确定存储桶名称的有效性,我们可以导航到亚马逊给出的自动分配的S3 URL,其格式为http://bucketname.s3.amazonaws.com,也可以使用以下命令行:
sudo aws s3 ls s3://$bucketname/ --region $region
如果命令返回目录列表,则表示已成功找到一个具有不受约束的访问权限的存储桶。
浏览器中flaws.cloud S3目录列表的图像。每个S3存储桶由亚马逊提供格式为bucketname.s3.amazonaws.com的URL
利用S3权限
一些S3存储桶用于托管静态资产,如图像和Javascript库。然而,即使对于这些资产不那么敏感的存储桶,开放上传策略也可以使攻击者上传自定义Javascript库,允许他们向所有应用程序用户提供恶意Javascript(如BeEF Hook)。
当然,S3存在许多更敏感的用途。在我们的研究中,我们发现允许下载系统备份、源代码等的存储桶——这对这家泄密的公司来说是一个关键风险。即使是可供下载的日志文件也可以显示用户名、密码、数据库查询等。
Alexa Top 10,000上的一个域,存储g-zipped日志文件并存储在S3服务器上。
来自Alexa Top 10,000的更多日志文件。在这种情况下,生产API日志在没有身份验证的情况下存储。
存储在Amazon S3上的网站的.git子目录,显示源代码提取可能是可能的。
Alexa Top 10,000网站存储在S3上的整个服务器备份。
ALEXA TOP 10,000 站点
使用Alexa Top 10,000网站,确定哪些网站有允许启用目录列表、下载和上传的S3存储桶。
这是通过使用AWS CLI搜索每个区域,发出命令以编程方式完成的:
aws s3 ls s3://$bucketname/ --region $region
$bucketname将只是正在测试的域名,以及我们之前找到的任何子域(foo.com、www.foo.com、bar.foo.com等)。如果存储桶存在,并且没有引发权限错误,则表示打开列表权限。
通过获取非零大小的文件并将其本地复制到磁盘来确定成功的下载命令。如果文件已成功传输,则表示打开下载权限。
旁注
(由另一个未知的一方)通过一个名为testupload.txt的文件演示成功上传。该文件显示在多个经过测试的S3存储桶中,表明另一个用户在2016年11月进行了类似的枚举测试。同样,这些信息也提供给那些被认为脆弱的公司。
testupload.txt文件已上传到几台打开的S3服务器,有人测试了上传权限。
结果
在审计的10,000个站点中,发现了107个桶(1.07%)具有属于68个唯一域的列表权限。这些桶被发现托管在11个地区中的10个,其中fips-gov-us-west-1(36%的桶)和us-east-1(37%的桶)是最受欢迎的。
这些存储桶包含从什么都没有到整个git存储库,再到企业Redis服务器的备份的所有内容。在这107个桶中,61个(57%)对任何查看它们的人都有开放下载权限。13个(12%)有开放上传权限,8%有这三个权限。
总结
AWS为客户提供的管理其资产的安全控制数量惊人。尽管存在“默认锁定”结构,但令人惊讶的是,大量公司仍然放松了其S3设置,允许未经授权访问其数据。
在这项研究中,无需身份验证即可识别敏感的公司数据、备份日志文件和其他数据。如果你使用的是S3,适当的IAM控件对于防止此处演示的信息泄露至关重要。实施访问日志记录同样有助于确定你的凭据何时/何地用于访问您的资源。
原文链接:https://rhinosecuritylabs.com/penetration-testing/penetration-testing-aws-storage/