CVE Docker逃逸漏洞的复现

什么是Docker

 Docker是一个开源的应用容器引擎。它允许开发者将他们的应用及其依赖包打包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,并且实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。docker可以安装软件,也可以安装一个操作系统。

总结:

 1.解决环境差异依赖

 2.解决重部署,可以快速部署

 3.解决复杂的依赖链路

 4.提升服务器的利用率,降低成本

 5.隔离不同的应用

为了解决相同代码在不同环境中取到一致的效果:

   需要在不同操作系统中引入一个中间层,中间层很多版本,可以在Windows、Linux、centos等等的不同操作系统之间引入一个中间层,可以用来屏蔽底层环境的差异。

虚拟机和容器的对比:

我们可以根据实际条件选择用虚拟机和容器。

docker的一些基本命令:

查看版本:docker search 

启动:systemctl start docker

拉取镜像:docker pull 文件名和版本

查看镜像:docker images

删除镜像:docker rmi 镜像ID(需要先停止、删除容器)

查看容器正在使用的镜像: docker ps -a

停止镜像:docker stop 容器ID

进入容器的命令行 :docker exec -it 容器ID /bin/bash

退出容器命令:exit

什么是docker逃逸

就是容器拿到了主机的权限

逃逸原因:

1、由操作系统内核漏洞引起:CVE-2016-5195(脏牛)

2、由Docker本身的漏洞引起:CVE-2019-5736、CVE- 2019-14271

3、由Docker配置和使用不当引起 :

1.开启privileged(特权模式)

2.宿主机目录挂载(文件挂载)

3.docket remote api未授权访问导致逃逸

复现:

本次复现需要准备三个机器,centos服务器,centos靶机,kali监听机器

条件: root运行Docker

Docker Version < 18.09.2

runc版本    <=1.0.0-rc5

介绍:

centos服务器:编辑一个恶意POC,开启HTTP服务,等待靶机下载,注意:POC需要用go编译

靶机:需要先运行一个拥有命令行的镜像比如  ubuntu:18.04 ,我们需要在进入镜像,在容器的命令行执行下载远程恶意文件,我们给他增加权限,然后执行。

kali:进行监听,接收靶机的反弹连接

首先配置centos服务器,我们先远程下载POC进入这个下载好的POC

git clone https://github.com/Frichetten/CVE-2019-5736-PoC

然后修改恶意文件的反弹地址,vim main.go

改为自己kali的IP地址和监听端口

然后我们用go编译这个恶意脚本

然后开启一个HTTP服务,准备让靶机下载,

我们靶机先打开启动Docker服务

service docker start

运行一个容器:

docker run -it ubuntu:18.04 "/bin/bash"

进入docker容器的命令界面:

501c 是容器的ID,使用 docker container ls -a  查看

接着我们增加权限并且执行

在这里,我们就执行成功了,runc文件已经被我们改了,但是我们并不能立刻获得反弹,需要下一次执行这个runc文件时才会反弹,即:

我们再次执行之后

返回我们kali监听的端口:

反弹成功。

总结:

篡改了系统的runc文件,在其中加入恶意代码,在下一次run exec的时候导致恶意代码执行。就是在下一次启动这个容器的时候直接反弹,因为我们改了这个服务。

Docker加固建议

1、升级Docker到最新版

2、升级Linux内核

3、不建议以root权限运行Docker服务

4、不建议以privileged(特权模式)启动Docker

5、不建议将宿主机目录挂载至容器目录

6、不建议将容器以--cap-add=SYSADMIN启动, SYSADMIN意为container进程允许执行mount、umount等 一系列系统管理操作,存在容器逃逸风险

参考资料: https://mp.weixin.qq.com/s/R5DV0X3QpYmaxVxIexRYgA

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值