作为非 root 用户,运行 容器中的 Docker 不受信任代码有哪些潜在的安全问题?

What are the potential security problems running untrusted code in a Docker container as a non-root user?

我已经看到很多关于 Docker 没有充分隔离以允许任意容器在多租户环境中 运行 的问题,这是有道理的。 "If it's root in Docker, consider it root in the host machine." 非 root 用户呢?

如果我想获取一些不受信任的代码并将其 运行 放入容器中,只要容器以非 root 非 sudo 用户身份 运行ning 就可以安全地完成吗?这样做有哪些潜在的安全隐患?

我相当确定今天有生产应用程序在这样做(CI 系统,运行nable pastebins),但他们只是幸运没有遇到坚定的攻击者,或者这是一个在生产系统中做合理的事情?

所有容器共享同一个内核。 如果您的不受信任的代码设法执行内核漏洞利用,它可以在主机 and/or 任何其他 运行 容器上做任何它想做的事。

从 Docker v1.12 开始,如果一个 运行 容器作为启用了用户命名空间的非根用户,则恶意行为者需要执行两个级别的权限提升在主机上成为 root 的顺序:

  1. 在容器内从非 root 用户升级到 root 用户
  2. 升级到容器中的 root 用户到主机上的 root 用户

因此,如果不受信任的代码作为非 root 用户位于 运行 容器中,攻击者在主机上成为 root 用户会稍微困难一些,因为我们添加了一个额外的在容器内成为 root 的步骤。与 运行ning 具有 root 权限的容器相比,这是安全方面的唯一优势。

如果通过两层安全进行特权升级,以下内容应该有助于限制攻击面:

  1. 具有不同信任级别的工作负载(在本上下文中更具体地说是 docker 容器)应遵循最小特权原则使用覆盖网络相互隔离。
  2. 在强制模式下启用可用的 Linux 安全模块(例如 SELinux、AppArmor)

参考文献: