【问题标题】:What are the disadvantages of a Docker container using the host network?使用主机网络的 Docker 容器有哪些缺点?
【发布时间】:2016-05-15 19:04:05
【问题描述】:

我了解默认情况下会在自己的网络堆栈中创建一个 docker 容器。

我想在运行 docker 容器时使用--net host 标志以允许使用所有主机端口。

我知道的缺点:

  1. 在容器内运行的服务可能会与在同一端口上运行的其他容器中的其他服务发生冲突。
  2. 容器可以访问完整的网络堆栈。

我的问题是,当允许容器使用完整的网络堆栈时,安全影响是什么?

【问题讨论】:

  • 重要的问题是,你为什么要这样做?这可能对它有更大的影响。
  • 我创建了一个 Web 控制面板,用于管理 Docker 容器中的游戏服务器。基本上每个容器都运行一个 FTP 服务器和游戏服务器。我每台主机运行大约 50 个容器。需要打开端口的客户端安装模块。
  • 从容器出站无论如何都可以工作。对于入站,端口映射效果非常好。
  • 听起来你最终会从github.com/docker/docker/issues/2045 中受益,它在 Docker 1.10 中使用github.com/docker/docker/pull/15078 快速启动。让 Docker 自动指定映射的端口并让您的控制面板使用docker update 的 API 来动态添加端口(然后在控制面板中将它们显示给用户)可能是有意义的。但这并不能解决您的迫切需求。现在,对于这条路线,您必须为用户提供重新启动其容器以获取新端口的选项。

标签: docker security containers application-security


【解决方案1】:

威胁模型

这有点矫枉过正,但通常最好对发生的威胁进行建模,而不是说“不要这样做是不安全的”。

用例

我创建了一个 Web 控制面板,用于管理 Docker 容器中的游戏服务器。基本上每个容器都运行一个 FTP 服务器和游戏服务器。我每台主机运行大约 50 个容器。需要打开端口的客户端安装模块。

这听起来像是您托管了同一个游戏的多个实例,例如 Minecraft。

但是,模组可能会引入 MySQL 或 MongoDB 等新软件,这意味着新的攻击面会打开。

我假设进程控制组 (cgroups) 已启用以防止一个容器在主机上使用完整的 CPU 或 GPU。

恶意演员

  1. 主机提供商。
    • 无关紧要,可以完全访问容器。如果主机是恶意的,我们就完蛋了。
  2. 游戏服务器。
    • 目前只能访问三个端口:FTP、游戏端口、一个模组端口。
    • 作弊者想要访问托管的其他游戏上的 SQL 以在其他游戏中作弊。让游戏托管。
    • 可能不是一个现实的威胁向量,因为您可能正在托管同一个游戏,所以此时所有用户都被开发者搞砸了。
  3. 模组
    • 更新为包含加密矿工,需要更多主机资源。
    • 黑客在 XYZ 游戏中听说了 MongoDB 中的零日漏洞,添加了对 Mongo 数据库的端口扫描
    • 在最现实的情况下,模组有时会变成抽水和转储方案。
    • 场景 1
  4. 假模组。
    • 与 #2 类似,有人知道游戏 xyz 已托管并启用了 --net host。作弊者知道他们可以访问数据库以更改存储在本地 MySQL 数据库中的硬币数量或将自己设置为其他实例的主持人。
    • 他们为游戏的一个实例付费,然后安装 mod 以有效地为另一个容器实例提供后门。
    • 场景 2

使用--net host

场景 1:加密矿工

以前,只暴露了某些端口,其他使用 Mongo 模组的游戏实例是安全的。您可能在公共防火墙中禁用了 Mongo 端口。

但是,现在所有容器都可以使用--net host 互相聊天,并且没有启用防火墙来防止彼此恶意发送流量。

因此,当模组更新为不仅包括加密矿工而且还包括端口扫描器时,模组会扫描 localhost 并找到打开的 MongoDB。然后它接管其他容器并使用主机的更多 CPU/GPU,假设容器应用了 cgroups。

如果没有应用 cgroups(进程利用率控制组),那么唯一的威胁就是额外的访问权限。

场景 2:Cheater mod 后门

之前,只暴露了某些端口,使用 MySQL 的 mod 的其他游戏实例是安全的。您可能在公共防火墙中禁用了 SQL 端口。

但是,现在所有容器都可以使用--net host 互相聊天,并且没有启用防火墙来防止彼此恶意向彼此发送流量。

因此,当作弊者在他们的实例上安装他们的 mod 时,他们会直接访问 MySQL 服务器并增加存储的硬币数量,从而使他们变得富有。服务器版主很困惑,因为没有显示此访问权限的游戏日志,他们想知道他们的服务器是否已被黑客入侵。

总结

总之,--net host 不会添加额外的外部访问(假设您有一个活动的防火墙),但它确实减少了在主机上运行的容器之间的隔离,这意味着如果您托管的是您正在创建的恶意容器,则会增加潜在的非恶意容器被利用。

另见

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 2020-07-08
    • 1970-01-01
    • 2020-07-17
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多