设为首页 收藏本站
查看: 2440|回复: 1

[经验分享] Docker暴露2375端口,引起安全漏洞

  [复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-31 09:23:21 | 显示全部楼层 |阅读模式
   作者:廖煜,电子科技大学计算机和金融学双硕士,负责Ghostcloud的产品运营。曾任EMC西南区架构师。国内顶级Docker技术专家,Docker开源项目贡献者。拥有丰富的虚拟化、云计算和企业级软件经验。
  今天有小伙伴发现docker暴露出2375端口,引起了安全漏洞。我现在给大家介绍整个事情的来龙去脉,并告诉小伙伴们,怎么修复这个漏洞。
  为了实现集群管理,Docker提供了远程管理接口。Docker Daemon作为守护进程,运行在后台,可以执行发送到管理接口上的Docker命令。正是因为错误的使用了Docker远端接口,引起安全漏洞。
  启动Docker Daemon时,加入-H 0.0.0.0:2375,Docker Daemon就可以接收远端的Docker Client发送的指令。注意,Docker是把2375端口作为非加密端口暴露出来,一般是用在测试环境中。此时,没有任何加密和认证过程,只要知道Docker主机的IP,任何人都可以管理这台主机上的容器和镜像。
漏洞是什么
  国内牛人开发了一套牛逼的搜索引擎-钟馗之眼,可以扫描出主机上的暴露的端口。在ZoomEye.org上输入关键字docker port:2375,立即可以扫描出所有暴露了2375端口的Docker主机。因为没有加密,知道了主机IP以后,黑客就可以为所欲为了。
  目前全球有717台机器暴露出2375端口!真是可怕了!
  这些主机分布在全球各个国家,其中,美国的主机最多。这是因为Docker是美国的使用率最高,国内也会在一两年内大规模使用Docker。所有小伙伴们必须解决安全问题。
  黑客在查询到主机IP以后,就可以管理这些主机上的容器了。

docker -H IP:2375 info
Containers: 8 Running: 8 Paused: 0 Stopped: 0 Images: 62 Server Version: 1.11.0

  通过这个漏洞,甚至可以获取主机信息。攻击者简直就能为所欲为。

docker -H IP:2375 run --rm -v /:/root alpine cat /root/etc/hostname
docker-node-5

如何发现漏洞

  小伙伴们,赶快检查一下你的Docker是否暴露了2375端口。

  1.检查docker daemon进程,查看是否开启2375端口。

ps -ef | grep docker
/usr/bin/docker daemon -H=tcp://0.0.0.0:2375

  2.通过远程管理的方式,向Docker主机发送命令。

docker -H 192.168.0.10:2375 info
Containers: 41 Running: 16 Paused: 0 Stopped: 25 Images: 821 Server Version: 1.10.3

如何修复该漏洞

  如果要安全的管理远程Docker主机,应该怎么做呢?其实,Docker本身提供了加密的远程管理端口2376,配合CA证书,就能提供TLS连接了。

   首先要准备5个证书和秘钥文件,分别是ca.pem、server-cert.pem、server-key.pem、client-cert.pem 和client-key.pem。其中,server-cert.pem中限制了能够访问Docker主机的客户端列表。

  启动Docker Deamon时,需要设置-H、–tls、–tlscacert=ca.pem、–tlscert=server-cert.pem和–tlskey=server-key.pem。此时,只有客户端列表中的主机能够访问Docker主机。

  具体配置比较复杂,我现在为大家详细介绍这些步骤。

  1.生成CA私钥ca-key.pem,使用该私钥对CA证书签名。

ca-key.pem是一个临时文件,最后可以删除。

openssl genrsa -out ~/docker/ca-key.pem 4096

  2.使用CA私钥生成自签名CA证书ca.pem。生成证书时,通过-days 365设置证书的有效期。单位为天,默认情况下为30天。

openssl req -x509 -sha256 -batch -subj '/C=CN/ST=Sichuan/L=Chengdu/O=Ghostcloud Co.,Ltd/OU=Laboratory/CN=www.ghostcloud.cn' -new -days 365 -key
~/docker/ca-key.pem -out ~/docker/ca.pem

生成CA证书时,需要提供一些公司信息。

C表示国家,中国为CN。

ST表示省,比如Sichuan。

L表示城市,比如Chengdu。

O表示公司,比如Ghostcloud Co.,Ltd。

OU表示部门名字,比如Laboratory。

CN表示公司域名,比如www.ghostcloud.cn

  3.生成服务器私钥server-key.pem和CSR(Certificate Signing Request)server-csr.pem。CN为DockerDaemon。

server-csr.pem是一个临时文件,生成server-cert.pem以后,可以删除。

openssl genrsa -out ~/docker/server-key.pem 4096
openssl req -subj '/CN=DockerDaemon' -sha256 -new -key ~/docker/server-key.pem -out ~/docker/server-csr.pem

   4.使用CA证书生成服务器证书server-cert.pem。TLS连接时,需要限制客户端的IP列表或者域名列表。只有在列表中的客户端才能通过 客户端证书访问Docker Daemon。在本例中,只允许127.0.0.1和192.168.1.100的客户端访问。如果添加0.0.0.0,则所有客户端都可以通过证书访问 Docker Daemon。

allow.list是一个临时文件,生成server-cert.pem以后,可以删除。

echo subjectAltName = IP:127.0.0.1,IP:192.168.1.100 > ~/docker/allow.listopenssl x509 -req -days 365 -sha256 -in ~/docker/server-csr.pem -CA ~/docker/ca.pem -CAkey ~/docker/ca-key.pem -CAcreateserial -out ~/docker/server-cert.pem -extfile ~/docker/allow.list

  5.生成客户端私钥client-key.pem和CSRclient-csr.pem。CN为DockerClient。

client-csr.pem是一个临时文件,生成client-cert.pem以后,可以删除。

openssl genrsa -out ~/docker/client-key.pem 4096
openssl req -subj '/CN=DockerClient' -new -key ~/docker/client-key.pem -out ~/docker/client-csr.pem

  6.使用CA证书生成客户端证书client-cert.pem。需要加入extendedKeyUsage选项。

echo extendedKeyUsage = clientAuth > ~/docker/options.list
openssl x509 -req -days 365 -sha256 -in ~/docker/client-csr.pem -CA ~/docker/ca.pem -CAkey ~/docker/ca-key.pem -CAcreateserial -out ~/docker/client-cert.pem -extfile ~/docker/options.list

  7.成功生成了需要的证书和秘钥,可以删除临时文件。

rm -f ~/docker/server-csr.pem ~/docker/client-csr.pem ~/docker/allow.list ~/docker/options.list

  8.为了保证证书和私钥的安全,需要修改文件的访问权限。

chmod 0444 ~/docker/ca.pem ~/docker/server-cert.pem ~/docker/client-cert.pem
chmod 0400 ~/docker/ca-key.pem ~/docker/server-key.pem ~/docker/client-key.pem

  9.重启Docker Daemon,加入ca.pem、server-cert.pem和server-key.pem。-H=0.0.0.0:2376表示Docker Daemon监听在2376端口。

docker daemon --tlsverify --tlscacert=~/docker/ca.pem --tlscert=~/docker/server-cert.pem --tlskey=~/docker/server-key.pem -H=0.0.0.0:2376

  10.在客户端,运行docker命令时,加入ca.pem、client-cert.pem和client-key.pem。本例中,只有127.0.0.1和192.168.1.100的客户端可以访问Docker Daemon。

docker --tlsverify --tlscacert=~/docker/ca.pem --tlscert=~/docker/client-cert.pem --tlskey=~/docker/client-key.pem -H=tcp://127.0.0.1:2376 infoContainers: 41 Running: 16 Paused: 0 Stopped: 25 Images: 821 Server Version: 1.10.3

  现在小伙伴们就可以安全的远程控制Docker主机了。

精灵云Docker远程管理解决方案

  生成CA证书的过程复杂而繁琐,稍有错误,就不能启动安全连接。精灵云为用户提供了基于TLS的Docker远程管理解决方案,用户可以通过精灵云管理平台,安全的管理自己的Docker主机。

1.用户在精灵云管理平台上注册。
2.进入控制台,通过导航栏->集群->我的主机,选择接入新主机。把主机加入到精灵云管理平台。
3.控制台提供了图形化操作界面和完整的Docker操作,用户可以方便的创建、克隆、快照、删除容器。同时精灵云管理平台也提供了镜像仓库服务,为你提供丰富的容器镜像。精灵云镜像仓库使用OSS对象存储,采用了安全认证,保证你的镜像不会泄露。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-224221-1-1.html 上篇帖子: 修改CentOs7 上Docker默认文件系统DeviceMapper为OverlayFS 下篇帖子: 关于本人就任版主的首肯承诺与职责范围
累计签到:54 天
连续签到:1 天
发表于 2016-6-19 18:01:33 | 显示全部楼层
虽不懂,但不明觉厉,拜读学习

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表