『道客快报』RunC 漏洞,Docker 声讨 Red Hat 市场竞争过激

Red Hat 和 Docker 两家公司,这一次又如愿成为一对腹黑基友,原因很简单,Docker 的创始人兼 CTO Solomon Hykes 对 Red Hat 的批评引来了众多的社区关注。Solomon 批评:Red Hat 在市场推广时,与安全相关的技术材料对 Docker 带有些许攻击性。

此次争议主要聚焦于:容器运行时引擎 runC 开源项目最近被披露的 Bug。

runC 的提权漏洞在今年 1 月 2 日被 SUSE 的工程师 Aleksa Sarai 和 Docker 的工程师 Tonis Tiigi 披露。CVE 漏洞摘记如下:

runC 允许用户通过 docker exec 命令创建额外的容器内进程,这部分进程有能力被容器内 pid 为 1 的进程 ptrace,即观察控制这些进程的执行过程。这也将意味着容器的主进程,如果通过超级用户 root 来运行的话,可以在新进程初始化的过程中获取这些新进程文件描述符的访问权限,因此这会导致,在这些新进程还没完全放在容器中运行之前,容器逃逸并造成 runC 状态的变更。

换言之,此漏洞极有可能被恶意骇客利用,从而在容器内部就有能力影响宿主机的运行。

813d15e7-runc

 

说到 runC,它是 Docker 容器引擎中最为基本的容器核心运行时。Docker 公司早在 2015 年即将其开源并捐赠给 OCI 基金会(Open Container Initiative)。针对此漏洞,runC 的全球 maintainer 迅速发起了补丁, 并且在 1 月 10 日,Docker 及时更新了自身的软件,发布了 Docker 1.12.6 版本,鼓励所有的用户更新到相应的新版本(尽管如此,不属于 Docker,其它基于 runC 的容器项目,也许也需要及时更新)。

以为故事就以修复此漏洞而告终了么?远没有这么快。数天后,Red Hat 的咨询工程师 Dan Walsh 在个人博客中,以标题 “Docker 0-day 漏洞轻松被 SELinux 阻击”,断言声称:只要用户部署 Red Hat Linux 企业版操作系统,该发行版中的强制访问控制组件 SELinux,就可以轻松帮助用户免受任何因为该漏洞而存在的所有潜在恶意攻击。

文中 Dan Walsh 写道:“SELinux 是可以防护容器逃逸影响宿主机的唯一方式。如果容器内的进程想获取一个宿主机文件的访问权限,并且尝试读写文件中的内容,SELinux 会检验其中的权限。”

Hacker News 论坛上有关 Red Hat 的博文,有人甚至猜测 Dan Walsh 暗示用户没有必要升级至 Docker 1.12.6, 仅仅是因为 Red Hat 的 SELinux 可以有效解决该漏洞。

Solomon Hykes 随即也加入了这场辩论,并批评 Red Hat 的博文关于该漏洞表现得过分乐观。

他说道,“一些服务提供商(不仅仅是 Red Hat )已然在给他们的用户传递错误的信息,说用户不需要升级到最新版本的 Docker,因为这些服务提供商的商业平台可以无压力避免漏洞。”

Solomon Hykes 同时也提到了博文中的一系列问题,他指出:runC 并不是 Docker 的产品,但是属于 OCI 开源社区中的一个项目,同时这也不是一个 0-day 漏洞。0-day 漏洞意味着漏洞并不被服务提供商所知晓,然后在这次漏洞事件中,runC 的 maintainer 还有 Docker 公司,已经在 Dan Walsh 的博文炒作起来之前就提交了补丁。Solomon 还提到,所有这些具体信息,都只是为了让用户对该漏洞提高足够的警惕。

在一封与 New Stack 的邮件中,Red Hat 的布道师 Joe Brockmeier 也承认使用 “0-day” 来描述的确有失偏颇。从 Walsh 对 SELinux 的热衷,我们可以发现他的描述的确有点太想吸引眼球了(不出意外:Walsh 是一个忠实的 SELinux 拥护者,他认为 SELinux 可以被用户当作生产级别容器安全的基本安全组件)。

Brockmeier 也指出:Red Hat 事实上也鼓励用户安全补丁。用户应该多方位更新其系统,SELinux 在纵深安全防御策略中仅仅是可以追崇的工具之一。

当然,过激的市场竞争,在 IT 领域并非什么新鲜事——Red Hat 的竞争者 Oracle 和 Microsoft 早在 10 年 20 年之前,就是软件恐惧、不确定以及质疑传递的业界大师。然而,在开源社区中,竞争者同样是协同者,因此竞争的界线仿佛并不是那么清晰,过激的市场策略往往可以追溯到各自的创始人,这就是现实。

事实上,另外一件有意思的事是:就在过去的 2016 年,19 位 runC 的贡献者声明自己为 Red Hat 工作,相比之下,runC 项目中 Docker 公司的工程师却只有 16 位。

Leave a Reply

Your email address will not be published. Required fields are marked *