Docker 安全非事件
本页列出了 Docker 缓解的安全漏洞,例如
在 Docker 容器中运行的进程从未容易受到该错误的影响 - 甚至在此之前
它被修复了。这假定容器在不添加额外功能的情况下运行
或不以 .--privileged
下面的列表甚至还不完整。相反,它是少数几个例子中的一个 我们实际上注意到的 bug 已经引起了安全审查并公开 披露的漏洞。很有可能,没有 报告的数量远远超过那些已经报告的人。幸运的是,由于 Docker 的 默认情况下,通过 AppArmor、secComp 和 Drop 功能进行安全保护,IT 可能缓解未知错误和缓解已知错误一样。
缓解的 Bug:
- CVE-2013-1956、1957、1958、1959、1979、CVE-2014-4014、5206、5207、7970、7975、CVE-2015-2925、8543、CVE-2016-3134、3135 等:
非特权用户命名空间的引入导致
通过为非特权用户提供合法的攻击面
访问以前仅限 root 的系统调用,例如 .所有这些 CVE
是由于引入用户命名空间而导致的安全漏洞示例。
Docker 可以使用用户命名空间来设置容器,但随后不允许
进程,通过
default seccomp 配置文件,使这些漏洞无法利用。
mount()
- CVE-2014-0181、CVE-2015-3339 漏洞:
这些 bug 需要存在 setuid 二进制文件。Docker 禁用
setuid 二进制文件,以及
其他机制。
NO_NEW_PRIVS
- CVE-2014-4699 漏洞:
中的错误可能允许权限提升。Docker 使用 apparmor、seccomp 和丢弃 .
那里的保护层是三倍!
ptrace()
ptrace()
CAP_PTRACE
- CVE-2014-9529 漏洞:
一系列精心编制的调用可能导致内核 DoS/内存损坏。
Docker 使用 seccomp 在容器内禁用。
keyctl()
keyctl()
- CVE-2015-3214、4036:这些是
常见虚拟化驱动程序中的错误,可能允许来宾操作系统用户
在主机操作系统上执行代码。利用它们需要访问虚拟化
设备。Docker 在运行时隐藏对这些设备的直接访问
没有。有趣的是,这些似乎是容器
比 VM “更安全”,这与 VM 的普遍看法背道而驰
比容器“更安全”。
--privileged
- CVE-2016-0728 漏洞:
构建的调用导致的释放后使用可能导致特权
升级。Docker 使用默认的
seccomp 配置文件。
keyctl()
keyctl()
- CVE-2016-2383 漏洞:
eBPF 中的一个 bug —— 用于表示 seccomp 等内容的特殊内核内 DSL
filters —— 允许任意读取内核内存。系统调用
在 Docker 容器中使用(具有讽刺意味的)seccomp 被阻止。
bpf()
- CVE-2016-3134、4997、4998:
setsockopt 中存在 、 的 bug,并导致内存损坏/本地权限提升。
这些参数被 阻止,这是 Docker 不允许的
违约。
IPT_SO_SET_REPLACE
ARPT_SO_SET_REPLACE
ARPT_SO_SET_REPLACE
CAP_NET_ADMIN
未缓解的错误:
- CVE-2015-3290、5157:Bug
内核的不可屏蔽中断处理允许权限提升。
可以在 Docker 容器中利用,因为系统调用是
当前未使用 seccomp 阻止。
modify_ldt()
- CVE-2016-5195 漏洞:
在 Linux 内核的内存子系统中发现争用条件
处理了私有只读内存映射的写入时复制 (COW) 中断,
这允许非特权本地用户获得对只读内存的写入访问权限。
也称为“dirty COW”。部分缓解措施:在某些操作系统上,此漏洞已得到缓解
通过 seccomp 过滤和只读事实的组合。
ptrace
/proc/self/mem