docker逃逸的几种方法

docker逃逸几点思路

1、docker daemon api未授权访问
2、privileged 特权模式启动容器
3、利用dirty cow来进行docker逃逸
4、通过cve-2019-5736来达到docker逃逸

1、docker daemon api未授权访问

访问http://ip:2375/containers/json

2、privileged 特权模式启动容器

特权模式逃逸是一种最简单有效的逃逸方法,使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,可直接通过chroot切换根目录、写ssh公钥和crontab计划任何等getshell。

当操作者执行docker run --privileged时,Docker将允许容器访问宿主机上的所有设备,同时修改AppArmor或SELinux的配置,使容器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限。

特权模式起的容器,实战可通过以下命令判断当前容器是否通过特权模式起:

cat /proc/self/status |grep Cap

在这里插入图片描述

(CapEff: 000000xfffffffff代表为特权模式起)

3、利用dirty cow来进行docker逃逸

dirty cow漏洞可以让我门获取只读内存的写的权限,我们首先利用dirty coa漏洞写入一段shellcode到VDSO映射的一段闲置内存中,然后改变函数的执行颁顺序,使得调用正常的任意函数之前都要执行这段shellcode。这段shellcode初始化的时候会检查是否是被root调用,如果是则继续执行,如果不是,则接着执行clock_gettime函数,接下来它会检测/tmp/.x文件的存在,如果存在,则这时已经是root权限了,然后它会打开一个反向的TCP链接,为Shellcode中填写的ip返回一个Shell。

这种利用方法利用成功的前提是,宿主机的内核有dirty cow漏洞。

4、通过cve-2019-5736来达到docker逃逸

1.漏洞原理与条件
通过在docker容器内重写和运行主机系统的runc二进制文件达到逃逸的目的。

利用条件为:
runc版本<=1.0-rc6
Docker Version < 18.09.2

2.漏洞触发过程
首先我们要有一个docker下的shell,第二步修改利用脚本中的反弹shell命令,第三步使用go build来编译脚本,第四步将脚本上传到docker中,第五步等待宿主机执行exec进入当前docker容器等时候,宿主机就会向我们的vps反弹root权限的shell.

防止docker逃逸的方法

  1. 更新Docker版本到19.03.1及更高版本——CVE-2019-14271、覆盖CVE-2019-5736。
  2. runc版本 >1.0-rc6
  3. k8s 集群版本>1.12
  4. Linux内核版本>=2.6.22——CVE-2016-5195(脏牛)
  5. Linux内核版本>=4.14——CVE-2017–1000405(大脏牛),未找到docker逃逸利用过程,但存在逃逸风险。
  6. 不建议以root权限运行Docker服务。
  7. 不建议以privileged(特权模式)启动Docker。
  8. 不建议将宿主机目录挂载至容器目录。
  9. 不建议将容器以—cap-add=SYSADMIN启动,SYSADMIN意为container进程允许执行mount、umount等一系列系统管理操作,存在容器逃逸风险。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值