
1) 【一句话结论】
在Docker容器环境中,通过利用容器隔离机制的配置缺陷(如文件系统挂载宿主机敏感目录、网络配置暴露宿主机接口、或进程权限共享命名空间),绕过容器隔离,使容器内进程获得宿主机root权限。
2) 【原理/概念讲解】
容器隔离的核心机制包括命名空间(如PID、网络、挂载)、cgroups(资源限制)、SELinux/AppArmor(安全增强)。但漏洞可能出现在这些机制的配置缺陷:
--net=host),直接暴露宿主机网络接口,容器内进程可访问宿主机网络,甚至宿主机端口,执行宿主机命令。类比:容器内的“网络”与宿主机的“网络”直接连接,容器内进程能访问宿主机网络资源。3) 【对比与适用场景】
| 漏洞类型 | 定义 | 关键利用点 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 文件系统挂载 | 容器内进程挂载宿主机敏感目录(如/proc、/sys) | 读取宿主机进程信息、设备信息 | 容器内进程有挂载权限且宿主机目录可读 | 宿主机目录权限(如700)导致挂载失败 |
| 网络配置 | 容器使用宿主机网络模式(--net=host)或暴露宿主机端口 | 直接访问宿主机网络接口、端口 | 容器内进程有网络权限 | 宿主机网络配置不当(如未绑定端口) |
| 进程权限 | 容器内进程与宿主机进程共享命名空间(如PID)或权限 | 直接获取宿主机进程权限 | 容器内进程被赋予宿主机权限 | 命名空间配置错误(如未隔离PID) |
4) 【示例】
以进程权限漏洞(共享PID命名空间)为例,假设容器内进程通过共享PID命名空间,容器内root进程在宿主机中是root。
步骤:
/bin/sh。# 检查容器内进程的PPID是否为宿主机init进程的PID(1)
ps aux | grep <容器内进程名> | grep -v grep | awk '{print $2}' | xargs -I {} ps -o ppid,comm -p {} | grep -q "1 init" && echo "共享PID命名空间,可提权"
5) 【面试口播版答案】
面试官您好,关于Docker容器逃逸漏洞,核心是通过利用容器隔离机制的配置缺陷,比如文件系统挂载、网络配置或进程权限共享,绕过隔离获取宿主机root权限。具体来说,比如进程权限漏洞,当容器与宿主机共享PID命名空间时,容器内root进程在宿主机中就是root,直接获得宿主机权限。或者文件系统挂载漏洞,容器内进程挂载宿主机的/proc目录,读取宿主机PID为1的init进程的cgroup路径,然后向该路径写入命令提权。利用步骤通常是:先探测漏洞(如检查容器是否共享PID命名空间或挂载了宿主机目录),然后执行提权操作。比如,通过共享PID命名空间,容器内root进程直接执行宿主机命令,实现逃逸。
6) 【追问清单】
7) 【常见坑/雷区】