逃逸容器并在 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/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190115B0DLQY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动