返回文章列表
安全防御
Docker容器逃逸技术分析与防护
2026-09-201102 次阅读11 分钟阅读
容器安全模型
Docker容器共享宿主机内核,通过Namespace和Cgroups实现资源隔离。一旦隔离机制被突破,就会导致容器逃逸。
逃逸攻击向量
1. 特权容器逃逸
当容器以--privileged模式运行时,拥有几乎所有内核能力:
bash
# 挂载宿主机磁盘
docker run --privileged -it ubuntu bash
mount /dev/sda1 /mnt
chroot /mnt
2. Docker Socket挂载
挂载Docker Socket等于将Docker控制权交给容器:
bash
docker run -v /var/run/docker.sock:/var/run/docker.sock -it ubuntu bash在容器内创建新的特权容器
curl --unix-socket /var/run/docker.sock http://localhost/containers/json
3. 内核漏洞利用
利用Linux内核漏洞实现逃逸:
- CVE-2019-5736: runc容器逃逸
- CVE-2020-15257: containerd shim逃逸
- CVE-2024-21626: runc文件指针泄露
4. 宿主机进程注入
当容器可以访问宿主机进程时:
bash
# 通过/proc进入宿主机命名空间
nsenter --target 1 --mount --uts --ipc --net --pid -- /bin/bash
防御措施
1. 最小权限原则
dockerfile
# 不使用root用户
USER 1000:1000只读文件系统
RUN --mount=type=bind,source=.,target=/app,readonly删除不必要的工具
RUN rm -rf /usr/bin/curl /usr/bin/wget
2. 安全配置
yaml
# docker-compose.yml
services:
app:
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
3. 运行时安全
- 使用Seccomp限制系统调用
- 使用AppArmor/SELinux强制访问控制
- 部署Falco等运行时安全工具
4. 镜像安全
- 使用官方基础镜像
- 定期扫描镜像漏洞(Trivy/Grype)
- 实施镜像签名验证
安全基线检查
bash
# 使用Docker Bench Security检查
docker run --rm -it --net host --pid host --userns host --cap-add audit_control \
-v /etc:/etc:ro \
-v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \
-v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \
-v /usr/bin/dockerd:/usr/bin/dockerd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker/docker-bench-security
#docker#linux#cloud