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