Google 云 运行 安全问题
Google Cloud Run security concerns
我正在测试 Google 云 运行,我有一些安全问题。假设我使用二进制程序处理用户输入。如果程序存在漏洞并且恶意代码注入容器怎么办。攻击者将能够访问我的数据库或存储或容器有权访问的任何资源。
问题是:这是真正的问题吗?我该如何预防?
我的最佳想法是将另一个容器放入其中,该容器只包含可能存在漏洞的二进制文件。
这确实是一个真正的问题 – 然而,这种 class 攻击并不特定于云 运行,并且适用于您将不受信任的二进制文件所在的任何计算平台。
想象一下,您 运行 ffmpeg
在一个容器中,您的一位用户为您提供视频输入进行转换。该视频可以利用 ffmpeg 中的漏洞(因为它不是用内存安全语言编写的,所以有很多),并且可以执行任意代码。此任意代码可能会渗漏您的环境,包括通过查询访问 GCP API 的令牌:
curl -H "metadata-flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token
您注入容器的秘密和此令牌可能是在受到攻击时要泄露的最敏感的工件。
为了防止您自己受到这种 class 攻击,我建议:
- 在云 运行 上创建一个单独的服务,其唯一的工作是 shell 不受信任的可执行文件(如您所提到的)。
- 运行 此服务的服务帐户 (
--service-account
) 无权在您的对象中执行任何操作。通过这种方式,攻击者可以泄露一个不能做太多事情的令牌(但是,可能会获悉您的 GCP 项目 ID 或此服务帐户的电子邮件地址)。
- (据我所知,这在云 运行 上是不可能的–)运行 容器的文件系统处于只读模式,以防止攻击者更改容器上的可执行文件或库这可能会影响容器处理的后续请求。
- (今天缺乏只读容器文件系统–)如果您正在执行的不受信任的二进制文件 is/can 是 "statically compiled",在每次请求时,考虑创建一个新的临时目录,其中包含二进制文件。然后,chroot 在那里执行这个目录中的二进制文件(这样它的副作用就不会影响容器的其余部分),并在请求完成之前清理这个目录。
希望这对您有所帮助。
我正在测试 Google 云 运行,我有一些安全问题。假设我使用二进制程序处理用户输入。如果程序存在漏洞并且恶意代码注入容器怎么办。攻击者将能够访问我的数据库或存储或容器有权访问的任何资源。
问题是:这是真正的问题吗?我该如何预防?
我的最佳想法是将另一个容器放入其中,该容器只包含可能存在漏洞的二进制文件。
这确实是一个真正的问题 – 然而,这种 class 攻击并不特定于云 运行,并且适用于您将不受信任的二进制文件所在的任何计算平台。
想象一下,您 运行 ffmpeg
在一个容器中,您的一位用户为您提供视频输入进行转换。该视频可以利用 ffmpeg 中的漏洞(因为它不是用内存安全语言编写的,所以有很多),并且可以执行任意代码。此任意代码可能会渗漏您的环境,包括通过查询访问 GCP API 的令牌:
curl -H "metadata-flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token
您注入容器的秘密和此令牌可能是在受到攻击时要泄露的最敏感的工件。
为了防止您自己受到这种 class 攻击,我建议:
- 在云 运行 上创建一个单独的服务,其唯一的工作是 shell 不受信任的可执行文件(如您所提到的)。
- 运行 此服务的服务帐户 (
--service-account
) 无权在您的对象中执行任何操作。通过这种方式,攻击者可以泄露一个不能做太多事情的令牌(但是,可能会获悉您的 GCP 项目 ID 或此服务帐户的电子邮件地址)。 - (据我所知,这在云 运行 上是不可能的–)运行 容器的文件系统处于只读模式,以防止攻击者更改容器上的可执行文件或库这可能会影响容器处理的后续请求。
- (今天缺乏只读容器文件系统–)如果您正在执行的不受信任的二进制文件 is/can 是 "statically compiled",在每次请求时,考虑创建一个新的临时目录,其中包含二进制文件。然后,chroot 在那里执行这个目录中的二进制文件(这样它的副作用就不会影响容器的其余部分),并在请求完成之前清理这个目录。
希望这对您有所帮助。