开发者社区> 太公> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

所谓的"新姿势之Docker Remote API未授权访问漏洞分析和利用"

简介: 最近乌云上出现了一篇文章 http://drops.wooyun.org/papers/15892。这种作者就一个好,写文章比谁都快,可惜从来不愿意踏踏实实的分析,非得搞个大新闻,把Docker/Swarm批判一番。 先说结论,Docker采用C/S结构,但是它的client和server用的是同
+关注继续查看

最近乌云上出现了一篇文章 http://drops.wooyun.org/papers/15892。这种作者就一个好,写文章比谁都快,可惜从来不愿意踏踏实实的分析,非得搞个大新闻,把Docker/Swarm批判一番。

先说结论,Docker采用C/S结构,但是它的client和server用的是同一个binary文件: docker,根据参数不同执行不同的代码分支,所以很多人可能都不清楚Docker是C/S结构的。Docker的Server端,也叫作Docker Daemon,运行命令/path/to/docker daemon启动,启动后才能执行其他的docker命令,诸如docker info..., docker run...

docker client和docker daemon怎么通信呢?默认情况下,docker daemon监听unix domain socket /var/run/docker.sock,client和daemon通过这个domain socket通信。这个文件的模式是这样的

srw-rw---- 1 root docker 0 May 14 21:16 /var/run/docker.sock

显然只有root和docker组的用户才能访问。总结起来就是,默认情况下,只有本机上的root和docker组用户才能操作docker。

那么乌云上的“漏洞”是怎么回事呢?除了通过unix domain socket这种模式,还可以让Docker Daemon把服务暴露在tcp端口上,比如2375,这样就可以在网络上操作Docker了。把服务暴露在网络上带来了一个问题:安全。Docker本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作Docker。

对这个问题,Docker官方早就给了完整的解决方案,甚至用了数篇文档,不断强调安全性,某些人就是视而不见,连文档都不好好读。 https://docs.docker.com/engine/security/https/

耍大刀把自己砍死了还要怪刀???

阿里云容器服务也是Swarm+Docker的模式,Swarm配置了tls,注意,这里的tls真不是只为了解决中间人攻击。容器服务有一套完整的证书体系,用户连接自己Swarm的时候,需要下载证书,使用证书才能和swarm建立tls连接,没有证书连连接都见不了,扯什么蛋的中间人攻击。说完了Swarm,再说Docker Daemon。Docker Daemon完全不监听任何网络端口,而是反向连接到Swarm,你问怎么做到的?我只能说一句无可奉告。你可能会问:证书被盗了怎么办?没关系,只要到控制台上吊销再重新生成证书就行(妈妈再也不用担心证书安全问题了)

你们啊,毕竟还是too young,too simple,还得学习一个。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
312 0
hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)
hostPath Volume 将 Docker Host 文件系统的目录 mount 到 Pod 的容器。
1743 0
data-packed volume container - 每天5分钟玩转 Docker 容器技术(43)
在上一节的例子中 volume container 的数据归根到底还是在 host 里,有没有办法将数据完全放到 volume container 中,同时又能与其他容器共享呢? 当然可以,通常我们称这种容器为 data-packed volume container。
1043 0
用 volume container 共享数据 - 每天5分钟玩转 Docker 容器技术(42)
volume container 是专门为其他容器提供 volume 的容器。它提供的卷可以是 bind mount,也可以是 docker managed volume。下面我们创建一个 volume container: 我们将容器命名为 vc_data(vc 是 volume container 的缩写)。
1099 0
Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)
storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume。 Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中。
1358 0
使用junit&spring修改系统的环境变量,解决docker程序测试问题
1,修改系统环境变量 首先环境变量在java运行的时候是修改不了的。 已经设置成只读了虽然方法都能调用。 这个有啥用呢?因为docker开放的应用程序的环境变量都是这样设置的。 docker在启动的时候设置了环境变量,然后应用程序就可以直接调用了。 调用的方法java就是通过 System.getenv()获得的。 有spring的程序,直接使用${jdbc.u
1334 0
+关注
太公
姜继忠,阿里云高级技术专家,负责阿里云容器服务和容器Hub等产品。目前关注容器相关技术。
19
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载