我正在学习很多关于 docker 的知识。我正在练习使用 docker-swarm、registry、shipyard 等创建 docker 集群。
我看到一旦您使用具有 docker 权限的受限用户进入主机,在 docker 主机中获取 root 是多么容易。我想知道是否有可能代替这个,从 docker 容器服务“逃逸”到 docker 主机(不管是否以 root 身份)。
这可以做到吗?
有什么概念证明吗?我在谷歌上搜索,我没有找到任何结论。
我正在学习很多关于 docker 的知识。我正在练习使用 docker-swarm、registry、shipyard 等创建 docker 集群。
我看到一旦您使用具有 docker 权限的受限用户进入主机,在 docker 主机中获取 root 是多么容易。我想知道是否有可能代替这个,从 docker 容器服务“逃逸”到 docker 主机(不管是否以 root 身份)。
这可以做到吗?
有什么概念证明吗?我在谷歌上搜索,我没有找到任何结论。
Docker 主机上有权访问 docker 组或具有 sudo docker 命令权限的用户实际上是 root(因为您可以执行诸如使用 docker 运行特权容器或将根文件系统挂载到容器内的操作),这就是它的原因控制该权利非常重要。
将 Docker 容器突破到主机是一个不同的游戏,取决于许多因素,难度或多或少会有所不同。可能的载体包括:-
--privileged
您很可能能够访问底层主机。如果您正在寻找更多信息,我会推荐 NCC 的这些白皮书。 滥用特权和非特权 Linux 容器以及了解和强化 Linix 容器。我还做了一个演示,其中涵盖了这里的一些内容。
如果您对 Docker 强化感兴趣,我还建议您查看CIS 安全标准。
用正常的手段,没有。Docker 是根据这个安全概念特意设计的。
它使用内核的命名空间功能将容器中运行的进程与主机上运行的进程分开。如果找到方法,它会被视为安全漏洞,并会尽快关闭。
尽管可能存在系统范围的配置设置。最典型的是,docker 容器可以运行SYS_ADMIN
,这本质上意味着它们能够更改 IP 地址,以及许多其他在主机上通常可用的功能。如果一个容器使用 运行SYS_ADMIN
,它本质上并没有像在 chroot 中运行的任务那样受到更多的保护。
尽管此配置主要用于 docker 容器作为服务运行时,例如 Linux 服务器上的守护程序。在普通笔记本电脑上,按照预期用途,一切都默认运行。如果不是这样,docker 用户将不得不信任他们正在使用的所有容器开发人员。现在他们只需要信任 docker 开发人员。
在 Windows 版本的 docker 上,即使这样也不够。Windows docker 使用 HyperV 启动 Linux VM,并在此 Linux VM 中运行 docker 容器。从容器中突围仅意味着此 VM 的 root 权限,要突围到客户端,您还必须在 HyperV 中找到一个漏洞。