Docker图标
Docker是一个开源的应用容器引擎,基于LXC的高级容器引擎,源代码托管在Github 上,基于go语言并遵从Apache2.0协议,开源让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2. Docker 2375端口安全风险
为了实现集群管理,Docker提供了远程管理接口。Docker Daemon作为守护进程,运行在后台,可以执行发送到管理接口上的Docker命令。正是因为错误地使用了Docker远端接口,引起了安全漏洞,因此在启动Docker Daemon时,加入-H 0.0.0.0:2375,Docker Daemon就可以接收远端的Docker Client发送的指令。Docker是把2375端口作为非加密端口暴露出来,一般是用在测试环境中。此时,没有任何加密和认证过程,只要知道Docker主机的IP,任何人都可以管理这台主机上的容器和镜像。
Docker Daemon
2.1. 使用docker命令连接
当$HOST主机以docker daemon -H=0.0.0.0:2375方式启动daemon时,导致2375端口对外网开放,攻击者可以直接用Docker命令连接并管理docker daemon进行直接操作:
docker -H tcp://$HOST:2375 info
docker连接查看INFO信息
2.2. 进入容器获取SHELL
使用exec命令进入容器调用/bin/sh:
docker -H x.x.x.x:2375 exec -it 78c310597d11 "/bin/sh"
使用命令连接管理容器
3. 基于全网Docker 安全风险分析
对于全网范围内暴露出来的Docker 2375端口,部分用户会使用2376端口来配置。海特实验室进行了一次统计分析,以此进一步了解目前的安全风险分析。
对应端口号开放的Docker服务数量表
对于这2000+直接暴露在公网的Docker服务都有可能随时被攻击者入侵,以及破坏,或者用来发动网络DDOS攻击等危害。
3.1. Docker版本分析
我们基于这些暴露在全网中的docker进行版本分析,以便了解在这些有安全风险的Docker都存在于哪些系统版本和软件版本中。
Docker版本数量百分比TOP 5
Docker版本数量TOP 5
通过数据对比我们发现,暴露在公网中存在安全风险的Docker版本主要集中于1.13.1/1.12.6 占比达到28%。
KernelVersion版本数量百分比TOP 5
KernelVersion版本数量TOP 5
同时我们对比了系统内核版本,发现问题主要集中在3.13.0/4.4.0版本中。
对于暴露在互联网中的存在安全风险的Docker主要集中在以系统版本3.13.0/4.4.0以Docker 1.13.1/1.12.6的版本中。建议使用以上版本的用户进一步加强安全措施并有效加固服务器。避免服务器被入侵,以及破坏的可能。
3.2. 地理分布分析
对于这些暴露在互联中存在安全风险的Docker,进行IP归属地统计,帮助我们分析对于Docker 2375/2376端口问题,主要集中于那些国家地区。
存在安全风险的Docker地区分布版本TOP 5百分比
存在安全风险的Docker地区分布版本数量
通过数据对比我们发现Docker主要安全风险集中于美国和中国,同时我们建议对Docker的安全风险进行进一步加固。
4. 安全加固建议
1. 建议在使用Docker时将2375端口监听在内网IP地址,避免直接暴露在互联网中。