首页 > 解决方案 > Google Cloud Run 安全问题

问题描述

我正在测试 Google Cloud Run,但我有一些安全问题。假设我使用二进制程序处理用户输入。如果程序易受攻击并且恶意代码注入容器怎么办。攻击者将能够访问我的数据库或存储或容器有权访问的任何资源。

问题是:这是一个真正的问题吗?我该如何预防?

我最好的想法是在其中放置另一个容器,其中仅包含可能易受攻击的二进制文件。

标签: dockergoogle-cloud-platformgoogle-cloud-run

解决方案


这确实是一个真正的问题 - 但是,此类攻击并非特定于 Cloud Run,并且适用于您将不受信任的二进制文件放入的任何计算平台。

想象一下你ffmpeg在一个容器中运行,你的一个用户给你一个视频输入来转换。该视频可以利用 ffmpeg 中的漏洞(因为它不是用内存安全语言编写的,所以有很多),并且可以执行任意代码。此任意代码可能会潜入您的环境,包括通过查询访问 GCP API 的令牌:

curl -H "metadata-flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token

您注入到容器中的秘密和此令牌可能是在受到攻击时要被泄露的最敏感的工件。

为了防止自己受到此类攻击,我建议:

  • 在 Cloud Run 上创建一个单独的服务,其唯一的工作是向不受信任的可执行文件(如您所提到的)提供壳。
  • --service-account使用无权在您的对象中执行任何操作的服务帐户 ( ) 运行此服务。通过这种方式,攻击者可以窃取一个无能为力的令牌(但是,可能会知道您的 GCP 项目 ID 或此服务帐户的电子邮件地址)。
  • (据我所知,这在 Cloud Run 上是不可能的——)以只读模式运行容器的文件系统,以防止攻击者更改容器上的可执行文件或库,这可能会影响容器处理的后续请求。
  • (今天缺少只读容器文件系统——)如果您正在执行的不受信任的二进制文件是/可以“静态编译”的,则在每次请求时,请考虑创建一个包含该二进制文件的新临时目录。然后,在那里chroot并执行这个目录中的二进制文件(这样它的副作用不会影响容器的其余部分),并在请求完成之前清理这个目录。

希望这可以帮助。


推荐阅读