科技·via

Docker 容器里的 root 权限,和整台物理服务器的生杀大权之间,其实只隔着一个内核漏洞

Docker 容器里的 root 权限,和整台物理服务器的生杀大权之间,其实只隔着一个内核漏洞。 很多人把容器当成独立安全的沙箱。 只要镜像跑起来,各管各的端口,数据互不干扰。 这完全是一场误解。 无论你在宿主机上启动十个还是上百个容器,它们底层调用的,始终是同一个 Linux 内核。 容器从来就没有自己的操作系统。 所谓的容器隔离,不过是用 Linux 内核里的命名空间把进程的视线挡住,再用控制组限制一下内存和算力。 这不是一堵水泥墙。 这只是一副给进程戴上的墨镜。 一个拥有三千多万行代码的现代操作系统内核,暴露着几百个系统调用接口。 只要黑客在某一个容器里触发了哪怕一个内核提权漏洞,就能瞬间穿透这层障眼法,直接接管整台物理机。 为什么过去十几年,整个软件工业明知道这个致命弱点,却依然对 Docker 趋之若鹜? 因为另一条路走不通。 想要真正的安全隔离,传统方案是跑完整的虚拟机。 可传统的虚拟机监控器沉重得像恐龙。 为了兼容几十年前的老系统,它必须在软件里仿真软驱控制器、IDE 硬盘接口、古老的总线和复杂的电源管理表。 启动一台虚拟机要等几十秒,哪怕什么都不跑也要空耗几百兆内存。 在容器的轻快与虚拟机的安全之间,工程师交了十几年的妥协税。 直到云计算巨头被逼到了绝境。 在多租户无服务器计算环境里,平台必须同时执行成千上万个来自陌生用户的不可信代码,毫秒级计费,绝不能发生跨租户逃逸。 2018 年,AWS 彻底掀了桌子,开源了后来成为无服务器计算基石的微虚拟机引擎 Firecracker。 2020 年,亚历山德鲁·阿加切与马克·布鲁克等人在学术顶会 NSDI 上公开了它的设计底牌。 这台新机器的逻辑极度冷酷:把传统虚拟机里积累了三十年的历史包袱全部切除。 不仿真任何古老硬件,只保留网卡、块存储、套接字与串口这 4 个最精简的现代虚拟设备。 抛弃几十万行复杂的旧代码,用内存安全的 Rust 语言重写,直接调用 CPU 的硬件虚拟化指令集。 攻击面被压缩了九成以上。 换来的结果极其惊人:一台拥有独立内核与硬件级隔离的微虚拟机,启动时间被直接压到了 5 毫秒,内存底噪只占大约 5 兆。 即使黑客在里面彻底攻陷了客户内核,也会被 CPU 的底层硬件环死死挡在门内。 但这把手术刀在很长一段时间里,普通开发者根本用不上。 启动一台裸微虚拟机,你需要自己编译未压缩的内核文件,手搓磁盘镜像,手动配置网络网桥与隔离沙盒。 而全世界所有的生产力资产,都已经打包成了标准的 Docker 容器镜像。 真正的基础设施进化,从来不是逼所有人抛弃旧习惯。 像微虚拟机守护进程这类工具的出现,做的事情就是把这把锋利的手术刀装进现成的枪膛里。 在后台自动把现成的容器镜像转化为微虚拟机的只读系统盘,半秒钟之内拉起硬件级隔离的微虚拟机,同时把网络与端口映射全自动化。 开发者敲下的依然是熟悉的部署命令。 但底下承载代码运行的世界,已经从一套脆弱的操作系统进程障眼法,跨越到了硬件级隔离的真内核。 技术的真正分野,从来不在于写出多么花哨的新概念。 在于谁能把最严苛的底层物理边界,无缝缝合进最平民化的开发体验里。

相关 / RELATED

JSON

导出 / EXPORT

订阅 · SUBSCRIBE

每周一封信号简报,重大进展可选即时推送。

不追踪邮件打开与邮件链接点击,一键退订。 或用 RSS · 详情