文章首发于:
火线Zone社区(https://zone.huoxian.cn/)
0x00 前言
最近发现有关容器逃逸的文章大多覆盖的方法不全,而且有些缺少相应的检测方法,导致 RT 在拿到一个容器权限时,比较难以判断这个容器存在哪些逃逸方法。
本文尽可能覆盖全容器逃逸检测的方法,并尽可能的给出在容器内部就能检测的方法,这样 RT 在容器内运行一下命令,根据返回的结果就能判断有没有这个漏洞了。
针对这些检测方法,我这边也写了相应的脚本,方便在容器内部一键检测,脚本放到文章底部了。
对于一些无法直接在容器内部检测到的逃逸方法,这里是不列举的,如果读者知道其他逃逸漏洞的检测方法,欢迎留言或者给脚本提 PR。
判断是否为容器环境
首先对于 RT 而言,需要先判断当前环境是不是容器环境,可以直接使用下面的命令去判断。
cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"
如果返回 Is Docker,说明当前是 Docker 容器环境,反之亦然。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/6-1648169472.png)
容器逃逸介绍
在开始之前对于容器逃逸主要有以下三种方法:
-
不安全的配置
-
相关程序漏洞
-
内核漏洞
这里分别列举一下每种逃逸的检测方法,这样在拿到一个容器权限的时候,本文可以起到一个手册的作用。
RT 可以通过本文中所提到的检测方法,判断出当前容器可能存在哪种逃逸漏洞,从而采取对应的逃逸方法。
注意:
以下检测方法大多是基于笔者自己的经验,可能会存在误检或者漏检的情况,如果读者发现,欢迎留言或者给脚本提 Issue
由于「相关程序漏洞」这种逃逸方法需要根据目标 Docker 的版本去判断,这里暂时没想到从容器内部获取 Docker 版本的方法,因此脚本暂时还不支持这块的检测。
0x01 不安全的配置
1、特权模式
执行以下命令,如果返回 Is privileged mode 则说明当前是特权模式。
cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"
如果返回 Not privileged mode 则说明当前不是特权模式。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/0-1648169473.png)
2、挂载 Docker Socket
执行以下命令,如果返回 Docker Socket is mounted. 说明当前挂载了 Docker Socket。
ls /var/run/ | grep -qi docker.sock && echo "Docker Socket is mounted." || echo "Docker Socket is not mounted."
如果返回 Docker Socket is not mounted. 则说明没有挂载。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/10-1648169473.png)
3、挂载 procfs
执行以下命令,如果返回 Procfs is mounted. 说明当前挂载了 procfs。
find / -name core_pattern 2>/dev/null | wc -l | grep -q 2 && echo "Procfs is mounted." || echo "Procfs is not mounted."
如果返回 Procfs is not mounted. 则说明没有挂载。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/4-1648169474.png)
4、挂载宿主机根目录
执行以下命令,如果返回 Root directory is mounted. 则说明宿主机目录被挂载。
find / -name passwd 2>/dev/null | grep /etc/passwd | wc -l | grep -q 7 && echo "Root directory is mounted." || echo "Root directory is not mounted."
如果返回 Root directory is not mounted. 则说明没有挂载。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/2-1648169475.png)
5、Docker remote api 未授权访问
执行以下命令,如果返回 Docker Remote API Is Enabled. 说明目标存在 Docker remote api 未授权访问。
IP=`hostname -i | awk -F. '{print $1 "." $2 "." $3 ".1"}' ` && timeout 3 bash -c "echo >/dev/tcp/$IP/2375" > /dev/null 2>&1 && echo "Docker Remote API Is Enabled." || echo "Docker Remote API is Closed."
如果返回 Docker Remote API is Closed. 则表示目标不存在 Docker remote api 未授权访问。
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/8-1648169476.png)
0x02 内核漏洞
1、CVE-2016-5195 DirtyCow 逃逸
执行 uname -r 命令,如果在 2.6.22 <= 版本 <= 4.8.3 之间说明可能存在 CVE-2016-5195 DirtyCow 漏洞。
2、CVE-2020-14386
执行 uname -r 命令,如果在 4.6 <= 版本 < 5.9 之间说明可能存在 CVE-2020-14386 漏洞。
3、CVE-2022-0847 DirtyPipe 逃逸
执行 uname -r 命令,如果在 5.8 <= 版本 < 5.10.102 < 版本 < 5.15.25 < 版本 < 5.16.11 之间说明可能存在 CVE-2022-0847 DirtyPipe 漏洞。
0x03 容器逃逸检测脚本
项目地址:
https://github.com/teamssix/container-escape-check
直接在容器中执行以下命令即可
wget https://raw.githubusercontent.com/teamssix/container-escape-check/main/container-escape-check.sh -O - | bash
不过大多容器可能没有 wget 命令,因此可以将脚本先克隆到本地,然后上传到容器再执行。
git clone https://github.com/teamssix/container-escape-check.git
cd container-escape-check
chmod +x container-escape-check.sh
./container-escape-check.sh
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/5-1648169476.png)
参考资料:
《云原生安全-攻防实践与体系构建》
https://github.com/brant-ruan/awesome-container-escape
【火线Zone云安全社区群】
进群可以与技术大佬互相交流
进群有机会免费领取节假日礼品
进群可以免费观看技术分享直播
识别二维码回复【社区群】进群
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/4-1648169477.gif)
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/1-1648169477.jpeg)
【火线zone社区周激励】
2022.3.14~ 2022.3.20公告
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/10-1648169478.png)
【相关精选文章】
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/6-1648169478.jpeg)
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/1-1648169479.jpeg)
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/0-1648169479.jpeg)
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/7-1648169479.png)
火线Zone是[火线安全平台]运营的云安全社区,内容涵盖云计算、云安全、漏洞分析、攻防等热门主题,研究讨论云安全相关技术,助力所有云上用户实现全面的安全防护。欢迎具备分享和探索精神的云上用户加入火线Zone社区,共建一个云安全优质社区!
如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/1-1648169480.jpeg)
微信号
huoxian_zone
![容器逃逸方法检测指北(附检测脚本) 容器逃逸方法检测指北(附检测脚本)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2022/03/5-1648169480.gif)
点击阅读原文,加入社区,共建一个有技术氛围的优质社区!
原文始发于微信公众号(火线Zone):容器逃逸方法检测指北(附检测脚本)