Loading ...
Docker 容器逃逸方法检测

一、判断是否为容器环境

通过检查 /proc/1/cgroup 中是否包含 docker 相关标识,判断是否处于 Docker 容器环境:

cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"  
  • 输出 Is Docker :当前为 Docker 容器环境

  • 输出 Not Docker :当前非 Docker 容器环境

二、容器逃逸检测分类与方法

容器逃逸风险主要源于 不安全配置、程序漏洞、内核漏洞 ,对应检测方式如下:

(一)不安全配置检测

1. 特权模式检测

检查容器是否以特权模式运行(特权模式下容器权限过高,易引发逃逸):

cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"  
  • 输出 Is privileged mode :容器为特权模式

  • 输出 Not privileged mode :容器非特权模式

2. Docker Socket 挂载检测

Docker Socket(docker.sock )是 Docker 守护进程的通信接口,若被挂载到容器内,攻击者可借此控制宿主机 Docker :

ls /var/run/ | grep -qi docker.sock && echo "Docker Socket is mounted." || echo "Docker Socket is not mounted."  
  • 输出 Docker Socket is mounted. :容器内挂载了 Docker Socket

  • 输出 Docker Socket is not mounted. :容器内未挂载 Docker Socket

3. procfs 挂载检测

procfs 是 Linux 伪文件系统,若容器内挂载宿主机 procfs ,可能被利用实现逃逸(如篡改内核参数 ):

find / -name core_pattern 2>/dev/null | wc -l | grep -q 2 && echo "Procfs is mounted." || echo "Procfs is not mounted."  
  • 输出 Procfs is mounted. :容器内挂载了宿主机 procfs

  • 输出 Procfs is not mounted. :容器内未挂载宿主机 procfs

4. 宿主机根目录挂载检测

若容器内挂载宿主机根目录,攻击者可直接操作宿主机文件系统:

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 mounted. :容器内挂载了宿主机根目录

  • 输出 Root directory is not mounted. :容器内未挂载宿主机根目录

5. Docker Remote API 未授权访问检测

Docker Remote API 若未授权开放,攻击者可远程控制 Docker 服务(需结合宿主机 IP 检测 ):

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 Enabled. :存在未授权访问风险

  • 输出 Docker Remote API is Closed. :未开放未授权访问

(二)内核漏洞检测

通过 uname -r 查看内核版本,对照以下漏洞的内核版本范围,判断是否存在风险:

漏洞编号 内核版本范围
CVE-2016-5195 2.6.22 ≤ 内核版本 ≤ 4.8.3
CVE-2020-14386 4.6 ≤ 内核版本 < 5.9
CVE-2022-0847 5.8 ≤ 内核版本 < 5.10.102 5.10.102 ≤ 内核版本 < 5.15.25 5.15.25 ≤ 内核版本 < 5.16.11

三、容器逃逸检测脚本

可通过现成脚本批量检测容器逃逸风险,使用方式如下:

1. 项目地址

https://github.com/teamssix/container-escape-check

2. 容器内直接执行(需 wget

wget https://raw.githubusercontent.com/teamssix/container-escape-check/main/container-escape-check.sh -O -| bash  

3. 无 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  

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇