空的 S3 存储桶如何让您的 AWS 账单爆炸? 通过 Maciej Pocwierz | 2024年4月

几周前,我开始为我的客户开发文档索引系统的 PoC。 我在中创建了一个 S3 存储桶 欧盟-西-1 区域并上传了一些文件进行测试。 两天后,我检查了我的 AWS 计费页面,主要是为了确保我所做的事情完全在免费套餐的限制范围内。 显然,事实并非如此。 我的账单已经结束了 1300$,计费控制台显示几乎 100,000,000 个 S3 PUT 请求 仅一天之内就被执行!

我按区域每天计费的 S3 使用量

默认情况下,AWS 不会记录针对您的 S3 存储桶执行的请求。 但是,可以使用以下命令启用此类日志 AWS 云跟踪 或者 S3 服务器访问日志记录。 启用 CloudTrail 日志后,我立即观察到来自多个帐户的数千个写入请求。

但为什么某些第三方帐户会用未经授权的请求轰炸我的 S3 存储桶?

我的帐户是否受到某种类似 DDoS 的攻击? 反对AWS? 事实证明, 流行的开源工具之一的默认配置是将其备份存储在 S3 中。 而且,作为存储桶名称的占位符,他们使用了……与我的存储桶使用的名称相同。 这意味着使用默认配置值的此工具的每次部署都会尝试将其备份存储在我的 S3 存储桶中!

注意:不幸的是,我无法透露我所指的工具的名称,因为这样做会使受影响的公司面临风险(如进一步解释的)。

因此,一群未经授权的第三方正试图将他们的数据存储在我的私有 S3 存储桶中。 但为什么我要为这个错误付出代价呢? 原因如下:

我在与 AWS 支持人员的交流中证实了这一点。 正如他们所写:

是的,S3 也会对未经授权的请求 (4xx) 收费[1]。 这是预期的行为。

因此,如果我现在打开终端并输入:

aws s3 cp ./file.txt s3://您的存储桶名称/random_key

我会收到一个 拒绝访问 错误,但您将是为该请求付费的人。

另一个问题困扰着我:为什么我的账单一半以上来自于 美国东部1 地区? 我那里连一个水桶都没有! 答案是,没有指定区域的 S3 请求默认为 美国东部1 并根据需要进行重定向。 并且您需要为重定向的请求支付额外费用。

我们现在明白为什么我的 S3 存储桶受到数百万个请求的轰炸,以及为什么我最终会产生巨额 S3 账单。 那时,我又有了一个想要探索的想法。 如果所有这些配置错误的系统都试图将其数据备份到我的 S3 存储桶中,如果我将其打开以进行公共写入会怎样? 我公开我的存储桶不到 30 秒,在这段时间内收集了超过 10GB 的数据。 当然,我不能透露这是谁的数据。 但这让我惊讶地发现,一个无辜的配置疏忽可能会导致危险的数据泄漏!

第 1 课:任何知道您的任何 S3 存储桶名称的人都可以随意增加您的 AWS 账单。

除了删除存储桶之外,您无法采取任何措施来防止这种情况发生。 当直接通过 S3 API 访问存储桶时,您无法使用 CloudFront 或 WAF 等服务来保护存储桶。 标准 S3 PUT 请求的价格仅为 每 1,000 个请求 0.005 USD,但单台机器每秒可以轻松执行数千个此类请求。

第 2 课:向存储桶名称添加随机后缀可以增强安全性。

这种做法减少了系统配置错误或故意攻击的脆弱性。 至少避免为 S3 存储桶使用简短且通用的名称。

第 3 课:当对 S3 执行大量请求时,请确保显式指定 AWS 区域。

这样您就可以避免 S3 API 重定向的额外费用。

  • 我向易受攻击的开源工具的维护者报告了我的发现。 尽管无法修复现有部署,但他们立即修复了默认配置。
  • 此外,我还通知了 AWS 安全团队。 我希望他们能够限制不幸的 S3 存储桶名称,但他们不愿意解决第三方产品的错误配置问题。
  • 我向两家公司报告了这个问题,我在我的存储桶中发现了这两家公司的数据。 他们没有回复我的电子邮件,可能认为它们是垃圾邮件。
  • AWS 很友善地取消了我的 S3 账单。 不过,他们强调这是一个例外。
  • 感谢您花时间阅读我的帖子。 我希望它能帮助您避免意外的 AWS 费用!

    1714425792
    #空的 #存储桶如何让您的 #AWS #账单爆炸 #通过 #Maciej #Pocwierz #2024年4月
    2024-04-29 19:42:23

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    近期新闻​

    编辑精选​