Docker暴露2375端口,引起安全漏洞

今天有小伙伴发现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 infoContainers: 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/hostnamedocker-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 infoContainers: 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天。

opensslreq -x509 -sha256 -batch -subj '/C=CN/ST=Sichuan/L=Chengdu/O=GhostcloudCo.,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以后,可以删除。

opensslgenrsa -out ~/docker/server-key.pem 4096openssl 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以后,可以删除。

echosubjectAltName = 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以后,可以删除。

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

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

echoextendedKeyUsage = clientAuth > ~/docker/options.listopenssl 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.为了保证证书和私钥的安全,需要修改文件的访问权限。

chmod0444 ~/docker/ca.pem ~/docker/server-cert.pem
~/docker/client-cert.pemchmod 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端口。

dockerdaemon --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主机了。

转载于:https://www.cnblogs.com/SZLLQ2000/p/8175608.html

docker 2375 vulnerability and self-signatuer certifications相关推荐

  1. docker 2375

    cd /usr/lib/systemd/system/ vim docker.service#在原本的ExecStart中添加tcp://0.0.0.0:2375[Service] Type=noti ...

  2. docker-java使用docker 2375或者2376端口

    一.docker 使用TLS开启2376 1.1  使用Openssl 生成CA.服务器和客户端密钥 #cd 到证书生成目录cd /etc/.docker/certs$HOST为服务器ip$ open ...

  3. Docker对外开放2375端口引发安全漏洞分析与解决方案

    前言 最近因为自己的云服务器开放了Docker 2375端口,导致被注入蠕虫,一直在跑挖矿程序.所以大家一定要注意外网环境下不要轻易打开此端口,如果要对外开放此端口,可以参考下面的解决方案,下面就Do ...

  4. 公开仓库中Docker镜像的漏洞分析结果发布

    Federacy的一名研究人员发布了一项报告,该报告分析了公开仓库中Docker镜像的漏洞.24%的镜像发现了明显的漏洞,其中基于Ubuntu的镜像漏洞最多,而基于Debian的镜像漏洞最少. \\ ...

  5. 使用GitLab CI和Docker进行容器应用自动化部署

    容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具.同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD ...

  6. 使用 Docker 部署 GitLab CI Runner

    点击在我的博客 xuxusheng.com 中查看,有更好的排版哦~ 一.背景 当项目比较少,或者更新不频繁的时候(或者技术比较菜的时候),手动部署部署还能够接受,但是一旦部署次数频繁了,手动操作就是 ...

  7. Docker远程API未授权访问导致的Docker逃逸

    Docker远程API未授权访问导致的Docker逃逸 前言 是给社团学弟学妹们一次讲课的一次md. 服务器 https://cloud.tencent.com/act/campus 当然想要复现学习 ...

  8. java+maven项目+tapd+jenkins+gitlab+sonarqube+docker实现自动化持续部署(超详细)

    文章目录 前言 相关介绍 一.准备 环境 二.安装docker 开放docker 2375端口 三.docker安装gitlab 修改gitlab.rb配置文件 进入容器重启配置 修改http的clo ...

  9. 容器环境红队手法总结

    引言 随着云原生的火热,容器及容器编排平台的安全也受到了行业关注,Gartner在近期发布的<Kubernetes安全防护指导框架>中给出Kubernetes安全的8个攻击面,总结如下: ...

最新文章

  1. 单片机C语言拉高1位,第二讲 单片机C语言之12864液晶显示
  2. php获取当天的日期-年月日与星期几
  3. RxSwift之UI控件UITextField与UITextView扩展的使用
  4. hasOwnProperty
  5. 浅谈UML的概念和模型之UML视图
  6. 虚拟服务器放2个网站,如何一个虚拟主机空间放两个网站的基本原理
  7. 有类似split的命令吗_5分钟学linux命令之split
  8. .NET开发者提高编程技能的5种方法
  9. linux命令:vim文件操作命令、新建用户,查看用户列表,chown命令
  10. 速成pytorch学习——4天中阶API示范
  11. crontab周期任务
  12. 【SSD目标检测】3:训练自己的数据集
  13. mysql导入GP_GP数据库gpload数据导入详细操作
  14. ABP教程-打造一个《电话簿项目》-目录-MPA版本-基于ABP1.13版本
  15. excel合并两列内容_办公教程:Excel如何快速将两列内容合并成一列
  16. python实现股票历史数据可视化分析
  17. Android开发基础学习总结
  18. 首个智能制造领域5G专网建成:广东联通+格力+华为共同打造!
  19. AndroidStudio实现用户登录注册界面代码(一)
  20. vue自适应布局(各种浏览器,分辨率)

热门文章

  1. beego07----web博客
  2. jQuery Layer 弹层组件
  3. PHP——分页显示数据库内容
  4. iOS 集成银联支付swift
  5. (剑指Offer)面试题10:二进制中1的个数
  6. 记前端项目首屏加载优化(网络篇)
  7. PlSql加入数据库链接
  8. 洛谷 P 1387 最大正方形
  9. 摄像头光圈大小对景深的影响
  10. 趁热打铁-一次.Net WebService的性能优化之旅