信任 Docker 容器是否安全?

信息安全 操作系统 相信 码头工人 坐月子
2021-08-14 11:46:51

说到 Docker,使用已经存在的第三方容器来做我们想做的事情是非常方便的。问题是这些容器可能非常复杂,并且具有其他容器的大父树;他们甚至可以从 GitHub 等存储库中提取一些代码。所有这些都使安全审计变得更加困难。

我知道这听起来很幼稚,但是有人可以很容易地将一些恶意内容隐藏在容器中吗?我知道答案是肯定的,但我想知道在哪个维度,以及是否值得冒险。我对 GitHub 很熟悉,我在使用第三方代码时通常会看一下源代码(除非它是一个众所周知的项目。)

我想知道社区是否正在关注这些行为,因为恶意容器的危害可能比恶意代码更大。

容器恶意的可能性有多大?(考虑到它是一种流行的。)此外,哪些维度可能会损坏/使用下划线系统的其他组件或 LAN 上的其他系统?更简单地说,我应该相信他们吗?

编辑: 我发现一篇来自 Docker 的文章,它为 Docker 安全和最佳实践带来了一些启示:了解 Docker 安全和最佳实践

4个回答

目前还没有办法轻松确定是否信任特定的 docker 容器。Docker 和操作系统提供商提供了一些基本容器,他们称之为“可信”,但该软件目前还缺乏良好的机制(例如数字签名)来检查图像是否被篡改。

为了澄清引用最近发布的 Docker CIS 安全标准第 4.2 节

官方存储库是由 Docker 社区或供应商策划和优化的 Docker 镜像。但是,Docker 容器镜像签名和验证功能还没有准备好。

因此,Docker 引擎不会自行验证容器镜像的来源。

因此,在获取容器映像时应格外小心。

当您从 Docker hub 进入通用 3rd 方容器的世界时,情况会更加复杂。AFAIK docker检查其他人的容器文件,因此存在许多潜在问题

  • 该容器包含实际的恶意软件。有没有可能,谁也不知道。有没有可能,是的。
  • 该容器包含不安全的软件。Dockerfile 基本上就像构建机器的批处理脚本。我见过几个这样做的事情,比如通过未加密的 HTTP 连接下载文件,然后在容器中以 root 身份运行它们。对我来说,这不是获得安全容器的好方法
  • 容器设置了不安全的设置。Docker 完全是关于软件设置的自动化,这意味着你在一定程度上相信所有制作 dockerfile 的人已经按照你希望的那样安全地配置了它们。

当然你可以审计所有的 dockerfile,但是一旦你完成了,你自己配置一下就好了!

至于这是否“值得冒险”,恐怕只有你才能真正做出决定。您正在权衡开发和维护自己的图像所需的时间,以应对参与生产您下载的软件的人将是恶意的或在系统安全方面犯错误的风险增加。

与您在系统上运行的任何未签名代码一样信任它。容器只是带有一些额外命名空间保护的进程,所以这就是它们获得的所有保护。他们仍然与下面的同一个内核对话。

最好将 Docker 容器视为与在主机系统上运行应用程序相同。有一些尝试通过删除 Linux 内核功能来锁定 Docker 守护程序,但这并不是真正的保证。如果您确实运行 Docker,则可以做一些事情来帮助减轻这种风险。

  • SELinux -启用此功能将为每个容器自动生成一个 MCS 标签,从而限制其造成损坏的能力。
  • 只读- 您还可以将容器标记为只读,这可以让您将容器的大部分映像设置为只读,从而使攻击者更难部署恶意软件。
  • 自托管注册表 -为了降低图像篡改、加载恶意容器、泄露机密或以其他方式将自己置于危险之中的风险,您可以在内部托管注册表。https://github.com/dogestry/dogestry是位于 S3 之上的示例,尽管还有其他选项。

从本质上讲,我认为这与开源软件是否值得信赖是同一个问题。但我认为目前使用社区 Docker 容器的风险比使用开源软件的风险要高一些。

首先,正如您所提到的,现在没有签名和验证。 今天好的开源打包系统包括这个,至少在从官方存储库获取软件时是这样。甚至一次性项目也倾向于在下载包中包含校验和。所以在开源世界里,你不知道代码是安全的,但你经常知道你得到了你应该得到的代码。使用 Docker,您甚至不知道容器在发布和下载之间保持不变。

其次是包裹本身的问题。您确定该软件没有做一些令人讨厌的事情,例如向某个 Internet 目的地报告您的活动吗?曾经是对开源软件的普遍恐惧如今,许多大型企业都不会质疑并入开源软件的技术实施者。可以说,闭源软件可能会更糟这样。但是对于一个 Docker 容器,尤其是一个包含全套操作系统工具和库的容器,“攻击面”要大得多。如果您认为您可能使用了错误的 postfix 构建,只需获取官方代码并构建它(一些包管理器通常会这样做)。如果你认为你有一个糟糕的 Docker 容器,那么“从源代码”复制图像通常有点冒险。