逃逸容器并在 Play-with-Docker 服务器上执行命令
编译:360代码卫士团队
由于 Play-with-Docker 测试平台上的权限容器保护不当,研究人员能够逃逸 Linux 容器并在主机系统上运行任意代码。
成功利用该缺陷的攻击者本能够获得对 Play with Docker (PWD) 的高级别访问权限,而且本能够访问所有正在运行的容器。
从零开始
这个利用抓住的事实是,容器都使用相同的内核代码,而这也是让该技术如此轻量且迷人的地方。反观虚拟机则为每个实例加载新内核。
CyberArk 研究人员借此开始入侵支持运行快速 Docker 命令的 Play with Docker 平台,通过构建和运行 Docker 容器或创建集群熟悉 Docker 容器化。
研究人员指出,“逃逸容器可能是攻击企业基础设施的第一步,因为目前很多企业运行的是面向公众的容器,这就可能导致攻击者入侵企业网络。”
随后,安全研究人员通过运行‘uname’命令打印出内核版本、架构、名称、root UUID 和 build 日期来了解关于主机系统的信息。
访问根目录
研究人员试图将主机的根驱动器安装在容器内,但就地保护措施导致该操作无法执行。进一步分析后,研究人员获得了更多的信息如主机硬件信息。
研究人员使用‘debugfs’文件系统调制解调器获得对主机根目录的访问权限并使用符合攻击方法的‘printk 内核函数’在文件系统中查找内核模块。
研究人员最后将通过在实验室编译的 Linux 内核模块注入 PWD Linux 内核中。他们使用的模块是 ceph.ko,是由内核为 Ceph 软件存储平台加载的。该模块并非具体目标,因为使用‘printk’函数的其它模块就已足够。它的作用是准备一个用于欺骗目标内核加载它的模块。
反向 shell
安全研究员在技术报告中指出,“最终目标是运行一个反向 shell,可通过一个具体的内核函数 call_usermodehelper() 实现,该函数用于从内核准备并启动用户模式应用程序。”
几步之后,安全研究员就能够设置一个反向 shell 并在主机上运行任意代码。研究人员还对此进行了详细的视频演示。
入侵 PWD 的想法源自 Eviatar Gerzi。2018年11月6日,研究人员将问题告知 Docker,后者在第二天证实问题的存在并表示不久将推出修复方案。2019年1月7日,CyberArk 证实称漏洞已修复。
推荐阅读
原文链接
https://www.bleepingcomputer.com/news/security/escaping-containers-to-execute-commands-on-play-with-docker-servers/
本文由360代码卫士编译,不代表360观点,转载请注明“转自360代码卫士 www.codesafe.cn”。