学习目录:Docker 容器安全攻防
这部分属于 云原生安全(Cloud Native Security) 下的 容器逃逸(Container Escape) 方向。
学习路线图
第一阶段:Linux 隔离机制(必学基础)
↓
第二阶段:Docker 架构与组件(理解攻击面)
↓
第三阶段:容器逃逸攻击(你老师讲的在这里)
↓
第四阶段:防御与加固(生产怎么防)
第一阶段:Linux 隔离机制(2-3天)
这是所有容器逃逸的底层原理,不懂这个,后面全是死记硬背。
| 知识点 | 为什么要学 | 学习重点 |
|---|---|---|
| Linux Namespace | 容器隔离的核心 | PID/NET/MNT/UTS/IPC/USER 各自隔了什么 |
| Cgroup | 资源限制 | cpu/memory/blkio 怎么限制容器 |
| Capability | 权限控制 | 为什么 root 在容器里不等于宿主机 root |
| OverlayFS | 容器文件系统 | 容器层和宿主机层的关系(你老师那个 overlay2 路径就是这个) |
| /proc 文件系统 | 内核接口 | /proc/self/status、/proc/sys/ 怎么读写内核参数 |
| Seccomp / AppArmor | 系统调用过滤 | 容器默认挡了哪些危险调用 |
推荐资源:
- 《容器从入门到实战》前几章
- 搜 "Linux Namespace 原理图解"
第二阶段:Docker 架构(1-2天)
| 知识点 | 重点 |
|---|---|
| Docker Daemon 架构 | 守护进程、API、Socket 位置 |
| 镜像分层 | Dockerfile 每层干了什么 |
| 容器运行时 | 容器启动后在宿主机上到底是什么进程 |
Docker Socket (/var/run/docker.sock) |
为什么挂载它等于 root |
特权模式 (--privileged) |
给了容器什么能力 |
挂载机制 (-v) |
哪些挂载危险,为什么 |
第三阶段:容器逃逸攻击(核心,5-7天)
这是你老师讲的内容所在的阶段。分 4 条路径:
路径一:特权模式逃逸(最简单)
| 知识点 | 说明 |
|---|---|
--privileged 的本质 |
给容器所有 Capability + 关闭 AppArmor |
| 挂载宿主机磁盘 | mount /dev/sda1 /mnt → 直接读宿主机文件 |
| 写宿主机 crontab | 在宿主机上写定时反弹 shell |
| 检测方法 | cat /proc/self/status 看 CapEff 是否全 F |
路径二:危险挂载逃逸(你老师讲的就是这个)
| 知识点 | 说明 |
|---|---|
挂载 /proc |
容器能改宿主机内核参数 → core_pattern 注入 |
挂载 /var/run/docker.sock |
容器内装 docker cli → 控制宿主机 daemon |
挂载 / 根目录 |
直接访问宿主机全部文件 |
挂载 /dev |
访问宿主机设备 |
挂载 /sys |
修改内核参数 |
你老师演示的
core_pattern属于这条路径的子技术。
路径三:Docker Socket 逃逸(最常考)
容器内挂载了 /var/run/docker.sock
↓
容器内执行 docker run -v /:/host alpine
↓
新容器挂载了宿主机根目录
↓
逃逸成功
| 知识点 | 说明 |
|---|---|
| 为什么 socket = root | Docker API 无认证时,调 API 等于调宿主机 |
| 利用工具 | docker-escape、cdk(Container Escape Kit) |
| 检测方法 | 检查容器启动参数有没有 -v /var/run/docker.sock |
路径四:内核漏洞逃逸(最难)
| 知识点 | 说明 |
|---|---|
| Dirty COW | 写时复制漏洞,容器内提权 |
| CVE-2022-0185 | 内核漏洞,容器逃逸到宿主机 |
| 运行时漏洞 | containerd/runc 的漏洞 |
第四阶段:防御与加固(2-3天)
| 防御点 | 做法 |
|---|---|
不用 --privileged |
用 --cap-add 只加需要的能力 |
不挂载 /proc /sys /docker.sock |
或者只读挂载 |
| 非 root 运行 | Dockerfile 最后加 USER nobody |
| Distroless 镜像 | 没有 shell,被入侵也跑不了命令 |
| 多阶段构建 | 编译阶段和运行阶段分离 |
| 镜像扫描 | Trivy / Grype 集成到 CI |
| Docker API 加 TLS 认证 | 防止 2375 端口未授权访问 |
| Seccomp 配置 | 限制容器能调用的系统调用 |
| AppArmor / SELinux | 强制访问控制 |
你现在应该从哪开始
你已经看到了 core_pattern 反弹 shell,说明你已经接触了路径二。
建议顺序:
1. 先搞懂 Linux Namespace + Capability(1天)
↓
2. 再理解 Docker Socket 逃逸(1天)← 这个最实用
↓
3. 然后理解 core_pattern /proc 挂载逃逸(你老师讲的)(1天)
↓
4. 最后学防御(1天)
一句话总结这门课的知识定位
云原生安全 → 容器逃逸 → 属于红队/渗透测试中的"内网横向移动"技术栈
学完这套,你能看懂 CTF 里的容器题,也能在工作中做容器安全审计。