浅谈容器逃逸

Posted key_3_feng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈容器逃逸相关的知识,希望对你有一定的参考价值。

与其他虚拟化技术类似,逃逸是最为严重的安全风险,直接危害了底层宿主机和整个云计算系统的安全。

容器逃逸”是指以下一种过程和结果:首先,黑客通过劫持容器化业务逻辑或直接控制(CaaS等合法获得容器控制权的场景)等方式,已经获得了容器内某种权限下的命令执行能力;黑客利用这种命令执行能力,借助一些手段进而获得该容器所在的直接宿主机上某种权限下的命令执行能力。

1.不安全配置导致的容器逃逸

容器社区一直在努力将纵深防御、最小权限等理念和原则落地。无论是细粒度权限控制还是其他安全机制,用户都可以通过修改容器环境配置或在运行容器时指定参数来调整约束,但如果用户为容器设置了某些危险的配置参数,就为黑客提供了一定程度的逃逸可能性。

2.不安全挂载导致的容器逃逸

为了方便宿主机与虚拟机进行数据交换,几乎所有主流虚拟机解决方案都会提供挂载宿主机目录到虚拟机的功能。容器同样如此。然而,将宿主机上的敏感文件或目录挂载到容器内部——尤其是那些不完全受控的容器内部,往往会带来安全问题。尽管如此,在某些特定场景下,为了实现特定功能或方便操作(例如为了在容器内对容器进行管理,将Docker Socket挂载到容器内),人们还是选择将外部敏感卷挂载入容器。随着容器技术应用的逐渐深化,挂载操作变得愈加广泛,由此而来的安全问题也呈现上升趋势。

Docker Socket是Docker守护进程监听的UNIX域套接字,用来与守护进程通信——查询信息或下发命令。如果在黑客可控的容器内挂载了该套接字文件(/var/run/docker.sock),容器逃逸就相当容易了。

3.相关程序漏洞导致的容器逃逸

所谓相关程序漏洞,指的是那些参与到容器生态中的服务端、客户端程序自身存在的漏洞。

4.内核漏洞导致的容器逃逸

Linux内核漏洞的危害之大、影响范围之广,使得它在各种安全话题中都占据非常重要的一席。无论是传统的权限提升、Rootkit(隐蔽通信和高权限访问持久化)、DoS,还是如今容器逃逸,一旦有内核漏洞加持,利用条件往往就会从不可行变为可行,从难利用变为易利用。事实上,无论安全场景怎样变化,我们对内核漏洞的利用往往都是从用户空间非法进入内核空间开始,到内核空间赋予当前或其他进程高权限后回到用户空间结束。

从操作系统层面来看,容器进程只是一种受到各种安全机制约束的进程,因此从入侵防御两端来看,容器逃逸都遵循传统的权限提升流程。黑客可以凭借此特点拓展容器逃逸的思路,一旦有新的内核漏洞产生,就可以考虑它是否能够用于容器逃逸;而防守者则能够针对此特征进行防护和检测,如宿主机内核打补丁,或检查该内核漏洞利用有什么特点。

以上是关于浅谈容器逃逸的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]浅析虚拟机逃逸漏洞

针对docker系统的渗透测试方法

浅谈Java JIT编译器概念

浅谈Java JIT编译器概念

浅谈JVM垃圾回收器相关知识点

浅谈JVM垃圾回收器相关知识点