最近,我听说了一种称为容器的新虚拟化技术。假设容器被入侵,这是否意味着主机也被入侵(因为容器是主机上的进程)?在安全性方面,VM(虚拟机)是否比容器更安全?
如果容器被入侵,这是否意味着主机也被入侵?
如果内核在容器中受到损害,则主机受到损害。
从表面上看,受感染的容器不应该能够伤害主机。然而,容器的安全性并不高,通常有很多漏洞允许特权容器用户破坏主机。通过这种方式,容器通常不如完整的虚拟机安全。这并不意味着虚拟机不能被黑客入侵。他们只是没有那么糟糕。
如果内核在虚拟机中被利用,攻击者仍然需要在管理程序中找到漏洞。如果内核在容器中被利用,整个系统都会受到威胁,包括主机。这意味着当使用容器时,作为一个类的内核安全漏洞要严重得多。
容器通常使用命名空间来实现:
命名空间将全局系统资源包装在抽象中,使命名空间内的进程看起来拥有自己的全局资源隔离实例。对全局资源的更改对属于命名空间成员的其他进程可见,但对其他进程不可见。
不幸的是,Linux 命名空间通常会从内核中暴露出更大的攻击面。命名空间中可以利用许多 内核 漏洞 。虽然并非每个容器解决方案都使用 Linux 命名空间,但它们都使用相同类型的技术,具有相同的安全问题。一些容器,如 Docker,能够利用称为 seccomp 的系统调用过滤框架来减少内核的攻击面。这是一种改进,但还不够。
从丹尼尔夏皮拉:
[...] 内核漏洞对于容器化环境可能是毁灭性的。这是因为容器与主机共享相同的内核,因此仅信任内置的保护机制是不够的。
因为容器不像虚拟机那样孤立,是的,在某种程度上它们不太安全。请参阅森林的答案。
话虽如此,我认为值得注意的是,从应用程序安全的角度来看,容器也提供了一些好处。因为它们通常运行单个进程,所以它们限制了攻击面,例如,容器内没有运行 cron 监视器或 ssh 守护程序。容器映像是不可变的:重新启动时,它们会从原始二进制文件加载。您无法覆盖应用程序。大多数容器技术还允许精确控制哪些端口开放以及对谁开放。您可以拥有一个数据库容器,该容器不能从您的其他容器以外的任何东西访问。
当然,所有这些都假设这些功能按照宣传的方式工作并且没有缺陷。如果攻击者设法逃离容器,上述情况均不适用。它增加了一些开销,但也可以采用带式和悬挂式方法:VM 之上的容器。