7.3.4. 攻击面分析¶
7.3.5. 供应链安全¶
在构建Dockerfile的过程中,即使是使用排名靠前的来源,也可能存在CVE漏洞、后门、镜像被污染、镜像中的依赖库存在漏洞等问题。
7.3.6. 容器逃逸¶
7.3.6.1. 虚拟化风险¶
虽然Docker通过命名空间进行了文件系统资源的基本隔离,但仍有 /sys
、/proc/sys
、 /proc/bus
、 /dev
、time
、syslog
等重要系统文件目录和命名空间信息未实现隔离,而是与宿主机共享相关资源。
7.3.6.2. 利用内核漏洞逃逸¶
CVE-2022-0847 Dirty Pipe
CVE-2021-4034 Polkit
CVE-2018-18955
CVE-2016-5195
7.3.6.3. 容器逃逸漏洞¶
CVE-2021-41091
- CVE-2020-15257 Containerd 逃逸
需要网络设置为 host 模式
CVE-2019-14271 Docker cp
CVE-2019-13139 Docker build code execution
- CVE-2019-5736 runC
Docker Version < 18.09.2
Version <= 1.0-rc6
7.3.6.4. 配置不当¶
开启privileged
挂载宿主机敏感目录
- 配置cap不当
--cap-add=SYS_ADMIN
- 绕过namespace
--net=host
--pid=host
--ipc=host
7.3.6.5. 危险挂载¶
挂载
/var/run/docker.sock
挂载宿主机
/dev
/proc
等危险目录
7.3.6.6. 逃逸技巧¶
通过
binfmt_misc
逃逸通过 eBPF 逃逸
7.3.7. 拒绝服务¶
CPU耗尽
内存耗尽
存储耗尽
网络资源耗尽
7.3.8. 攻击 Docker 守护进程¶
虽然 Docker 容器具有很强的安全保护措施,但是 Docker 守护进程本身并没有被完善的保护。Docker 守护进程本身默认由 root 用户运行,并且该进程本身并没有使用 Seccomp 或者 AppArmor 等安全模块进行保护。这使得一旦攻击者成功找到漏洞控制 Docker 守护进程进行任意文件写或者代码执行,就可以顺利获得宿主机的 root 权限而不会受到各种安全机制的阻碍。值得一提的是,默认情况下 Docker 不会开启 User Namespace 隔离,这也意味着 Docker 内部的 root 与宿主机 root 对文件的读写权限相同。这导致一旦容器内部 root 进程获取读写宿主机文件的机会,文件权限将不会成为另一个问题。这一点在 CVE-2019-5636 利用中有所体现。
7.3.9. 其他CVE¶
CVE-2014-5277
CVE-2014-6408
CVE-2014-9357
CVE-2014-9358
CVE-2015-3627
CVE-2015-3630