本文为翻译文章,原文链接:https://trufflesecurity.com/blog/an-api-worm-in-the-making-thousands-of-secrets-found-in-open-s3-buckets/
背景
S3存储桶是将文件存储在AWS中的常见场所。这些存储桶具有一项功能,允许您在未经身份验证的情况下使互联网上的任何人可以读取您的文件。如果内容是供公众消费的,例如为网站存储HTML、CSS和JS资产,那么此功能可能非常有用,但它是一把双刃剑。这些文件通常包含敏感信息,这导致了几次备受瞩目的安全事件,包括:
通常,暴露的数据是所报告故事的结尾,但我们发现它通常不是安全故事的结尾。由于我们最近向TruffleHog添加了S3支持,我们认为扫描一组公开暴露的存储桶以获取凭据将是领先于潜在安全事件的好方法,我们最终发现了跨越数百名客户的数千个不同密钥。
方法
我们需要做的第一件事就是汇编一个打开的S3桶列表。幸运的是,存储桶名称是全局唯一的,可以通过子域指定。例如,如果一个桶被命名为“trufflehogbucket”,则可以通过以下网址访问文件:https://trufflehogbucket.s3.amazonaws.com/filename。由于DNS流量通常是未加密的,许多存储桶名称是通过DNS水龙头收集的。一些供应商,如RiskIQ,通过他们的PassiveTotal API公开这些数据。
grayhatwarfare等其他工具采取了不同的方法,生成大量可能的存储桶名称列表,并向S3 API发出请求,以确定存储桶是否存在并包含公开暴露的文件。使用这些和其他技术,我们建立了最初的桶列表。扫描所有暴露的数据很快就变得不切实际,因此我们需要一种方法将列表缩小到可能包含密钥的桶和文件。幸运的是,greyhatwarfare的API还允许您搜索文件的名称,因此我们搜索了“.credentials”、“.env”等常见名称,并且只搜索了包含匹配文件的扫描桶。
结果
在扫描了大约4000个包含.env文件和.credentials文件的桶后,我们发现一个包含密钥的文件平均有2.5个密钥,其中一些在文件中有高达10多个密钥。
我们还发现了各种各样的凭证类型,包括:
- AWS密钥
- GCP服务帐户
- Azure Blob存储连接字符串
- Coinbase API密钥
- Twilio API密钥
- Mailgun API密钥
- RDS密码
- Sendgrid凭据
- Pusher凭据
- MSSQL密码
- Mailtrap凭据
- Google OAuth凭据
- Twitter OAuth凭证
- 在OAuth凭据中链接
- 谷歌地图API密钥
- Segment API密钥
- Sauce API密钥
- 托管MongoDB凭据
- Firebase凭据
- Stripe凭据
- Rollbar凭据
- Twilio证书
- Amplitude凭据
- Mailjet凭据
- SMS伙伴凭证
- Dropbox凭据
- Yousign凭据
- PayPal凭证
- Mandrill证书
- Zendesk凭证
- 托管消息队列连接字符串
- Razor pay凭证
- 文本本地凭据
- 应用程序签名密钥
- JWT签署密钥
冲击放大镜:可蠕动性
从周围的上下文中可以清楚地看出,其中许多凭据可以解锁更多以其他方式经过身份验证的存储桶。这里有两个例子
泄露的凭据导致更多的存储桶
由于隐含的更高安全栏身份验证提供了隐含的安全性,假设经过身份验证的存储桶比未经身份验证的存储桶包含更多的密钥可能是公平的。这意味着攻击者可能会使用第一轮桶来找到解锁额外一轮桶并暴露更多密钥的钥匙,这可能会暴露更多的桶等。出于明显的原因,我们没有使用任何这些密钥或探索这种可能性,但这使这种类型的攻击“蠕虫”,即一个桶可以导致另一个桶,等等,放大了泄漏的影响。
穿过S3桶
更糟糕的是,其中一些密钥导致了其他可能可以访问密钥的大型数据存储,例如Github API密钥和GCP存储API密钥。
通过多个提供商进行 Worming
下一步
当然,在这一点上,我们需要向受影响的公司披露我们的发现。这有时证明具有挑战性,因为桶通常没有很多信息将它们与桶创建者联系起来。我们进行了数百次披露,并在某些情况下与提供商合作,为无法识别所有者的桶撤销密钥。披露范围从数十家财富500强公司到非政府组织和小型初创公司。