繁体   English   中英

使用主机网络的 Docker 容器有什么缺点?

[英]What are the disadvantages of a Docker container using the host network?

我知道默认情况下将在其自己的网络堆栈中创建一个 docker 容器。

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

我知道的缺点:

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

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

威胁模型

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

用例

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

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

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

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

恶意演员

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

使用--net host

场景 1:加密矿工

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

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

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

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

场景 2:Cheater mod 后门

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

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

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

概括

总而言之,-- --net host不会增加额外的外部访问,假设您有一个活动的防火墙,但它确实减少了主机上运行的容器之间的分离,这意味着如果您托管恶意容器,则会增加要利用的非恶意容器。

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM