
Metargetは、脆弱なインフラストラクチャを自動的に構築するフレームワークです。
Metarget = meta- + target。脆弱なインフラストラクチャを自動構築するフレームワークで、シンプルまたは複雑な脆弱なクラウドネイティブターゲットを迅速かつ自動的にデプロイするために使用されます。
セキュリティ研究において、脆弱環境のデプロイには多くの時間がかかり、PoCやExPのテストに費やす時間は比較的短いことがよくあります。クラウドネイティブセキュリティの分野では、クラウドネイティブシステムの複雑さから、この問題はさらに深刻です。
オープンソースコミュニティには、Vulhub や VulApps のような優れたセキュリティプロジェクトがすでにあり、脆弱なシナリオをコンテナイメージにパッケージ化しているため、研究者はそれらを利用してシナリオを迅速にデプロイできます。
しかし、これらのプロジェクトは主にアプリケーションの脆弱性に焦点を当てています。Docker、Kubernetes、さらにはLinuxカーネルのようなインフラストラクチャの脆弱性を研究する必要がある場合はどうでしょうか?
そこで、Metargetを開発し、上記のデプロイ問題をある程度解決したいと考えています。さらに、Metargetが 多層 の脆弱なクラウドネイティブシナリオを自動的に構築するのに役立つことも期待しています。
このプロジェクトでは、脆弱性のインストール や 脆弱シナリオのインストール といった概念を考案しました。ソフトウェアをインストールするように脆弱性をインストールしてみてはいかがでしょうか? それが可能なのは、私たちの目標がセキュリティ研究と攻撃的セキュリティだからです。
具体的には、以下のようなことを期待しています。
metarget cnv install cve-2019-5736 は、CVE-2019-5736 を含むDockerをサーバーにインストールします。metarget cnv install cve-2018-1002105 は、CVE-2018-1002105 を含むKubernetesをサーバーにインストールします。metarget cnv install kata-escape-2020 は、CVE-2020-2023/2025/2026 を含むKata-containersをサーバーにインストールします。metarget cnv install cve-2016-5195 は、DirtyCoWを含むカーネルをサーバーにインストールします。すごいと思いませんか? もう手順は不要です。RTFMも不要です。コマンドを1つ実行して、コーヒーを楽しんでください。
さらに、次のことも期待しています。
metarget appv install dvwa は、DVWA ターゲットを脆弱なインフラストラクチャにインストールします。metarget appv install thinkphp-5-0-23-rce --external は、NodePort サービスを使用してThinkPHP RCE脆弱性を脆弱なインフラストラクチャにインストールします。新しいUbuntuをインストールした後、以下の5つのコマンドを実行するだけで、多層の脆弱シナリオを入手できます。```bash ./metarget cnv install cve-2016-5195 # container escape with dirtyCoW ./metarget cnv install cve-2019-5736 # container escape with docker ./metarget cnv install cve-2018-1002105 # kubernetes single-node cluster with cve-2018-1002105 ./metarget cnv install privileged-container # deploy a privileged container ./metarget appv install dvwa --external # deploy dvwa target
RCE、コンテナエスケープ、横方向移動、永続化——これらはあなたのものです。
さらに素晴らしい機能が近日登場!お楽しみに :)
注記:
このプロジェクトは、セキュリティ研究のための脆弱なシナリオを提供することを目的としています。生成されたシナリオのセキュリティは保証されません。Metargetを使用してコンポーネントやシナリオをインターネット上にデプロイすることは**推奨されません**。
## 2 インストール
### 2.1 必要条件
- Ubuntu **20.04 / 22.04 / 24.04(推奨)**、18.04もサポート
- 一部のケース(例:新しいカーネルの脆弱性)では特定のUbuntuディストリビューションが必要
- 詳細については、特定の脆弱性に関する注記(アスタリスク(\*)で示されています)を参照してください
- **Python >= 3.7**(Python 2.x はサポートされていません!)
- pip3
### 2.2 ソースから
リポジトリをクローンして、必要なパッケージをインストール:```bash
git clone https://github.com/Metarget/metarget.git
cd metarget/
pip3 install -r requirements.txt
Metargetの使用を開始し、脆弱なシナリオを構築します。例:```bash ./metarget cnv install cve-2019-5736
### 2.3 PyPIから
現在サポートされていません。
## 3 使用方法
Metargetは**root**として実行する必要があります。
デバッグ時には`--verbose`オプションを追加することをお勧めします。
### 3.1 基本的な使い方```
usage: metarget [-h] [-v] subcommand ...
automatic constructions of vulnerable infrastructures
positional arguments:
subcommand description
gadget cloud native gadgets (docker/k8s/...) management
cnv cloud native vulnerabilities management
appv application vulnerabilities management
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
./metarget gadget list を実行すると、現在サポートされているクラウドネイティブコンポーネントを確認できます。
usage: metarget gadget [-h] subcommand ...
positional arguments: subcommand description list list supported gadgets install install gadgets remove uninstall gadgets
optional arguments: -h, --help show this help message and exit
> `./metarget gadget list docker/k8s/containerd/runc/kernel` を実行して、現在のクラウドネイティブコンポーネントのサポートバージョンを確認します。
#### 3.2.1 ケース: 指定バージョンのDockerをインストールする
実行:```bash
./metarget gadget install docker --version 18.03.1
上記のコマンドが正常に完了すると、18.03.1 Docker がインストールされます。
実行:```bash ./metarget gadget install k8s --version 1.28.4
上記のコマンドが正常に完了すると、1.28.4 Kubernetes シングルノードクラスターがインストールされます。
サポートされている Kubernetes のバージョン範囲: **1.9 – 1.33**。
注意:
Metarget は Kubernetes インストールに以下のオプションを提供しています:```
-v VERSION, --version VERSION
gadget version
--runtime {auto,docker,containerd}
container runtime for k8s (auto: containerd for k8s>=1.24, docker otherwise)
--runtime-version RUNTIME_VERSION
version of the container runtime to install alongside k8s.
For --runtime containerd: containerd.io apt version (e.g. 1.6.28).
For --runtime docker with k8s>=1.24: cri-dockerd version (e.g. 0.3.15).
Omit to install the latest/default version.
--cni-plugin CNI_PLUGIN
cni plugin, flannel by default
--pod-network-cidr POD_NETWORK_CIDR
pod network cidr, default cidr for each plugin by default
--taint-master taint master node or not
--domestic use domestic (Aliyun) mirrors for k8s images
コンテナランタイムの選択:
metarget gadget install docker で事前にインストールする必要があります)。containerdを強制するには --runtime containerd を使用します。--runtime auto がデフォルト)。手動でDockerをインストールする必要はありません。--runtime docker: cri-dockerd がCRIシャムとして自動的にインストールされます(Dockerは事前にインストールされている必要があります)。特定のcri-dockerdバージョンを固定するには --runtime-version を使用します。Examples:```bash
./metarget gadget install k8s --version 1.28.4
./metarget gadget install k8s --version 1.28.4 --runtime containerd --runtime-version 1.6.28
./metarget gadget install k8s --version 1.28.4 --runtime docker
./metarget gadget install k8s --version 1.20.15 --runtime containerd
**Metargetはマルチノードクラスタのデプロイをサポートしています。クラスタにノードを追加する場合は、シングルノードクラスタのインストール成功後に、`tools/install_k8s_worker.sh`スクリプトをコピーし、各ワーカーノードで実行してください。**
#### 3.2.3 例: 指定バージョンのKata-containersをインストール
実行:```bash
./metarget gadget install kata --version 1.10.0
上記のコマンドが正常に完了すると、1.10.0 Kata-containers がインストールされます。
注意:
--kata-runtime-type オプションを使用して kata ランタイムのタイプ (qemu/clh/fc/...) を指定することもできます。デフォルトは qemu です。
実行:```bash ./metarget gadget install kernel --version 5.7.5
上記のコマンドが正常に完了すると、5.7.5 カーネルがインストールされます。
注:
現在、Metarget はカーネルを 2 つの方法でインストールします:
1. apt
2. apt パッケージが利用できない場合は、Ubuntu から *.deb をリモートでダウンロードし、インストールを試みます。
カーネルのインストールが成功した後、システムの再起動が必要です。Metarget は自動的に再起動を促します。
#### 3.2.5 ケース:指定されたバージョンの containerd/runc をインストールする
実行:```bash
./metarget gadget install containerd --version 1.7.14
上記のコマンドが正常に完了した場合、1.7.14 containerd がインストールされ、Kubernetes CRI ランタイムとして自動設定(SystemdCgroup = true)され、metarget gadget install k8s で使用可能になります。
実行:```bash ./metarget gadget install runc --version 1.1.6
上記のコマンドが正常に完了すると、runc 1.1.6 がインストールされます。
### 3.3 クラウドネイティブコンポーネントに関連する脆弱なシナリオの管理```
usage: metarget cnv [-h] subcommand ...
positional arguments:
subcommand description
list list supported cloud native vulnerabilities
install install cloud native vulnerabilities
remove uninstall cloud native vulnerabilities
optional arguments:
-h, --help show this help message and exit
./metarget cnv listを実行すると、現在サポートされているクラウドネイティブコンポーネントに関連する脆弱なシナリオを確認できます。
実行:```bash ./metarget cnv install cve-2019-5736
上記のコマンドが正常に完了した場合、CVE-2019-5736 を含む Docker がインストールされます。
#### 3.3.2 ケース: CVE-2018-1002105
実行:```bash
./metarget cnv install cve-2018-1002105
上記のコマンドが正常に完了した場合、CVE-2018-1002105の脆弱性を含むKubernetesがインストールされます。
実行:```bash ./metarget cnv install kata-escape-2020
上記のコマンドが正常に完了した場合、CVE-2020-2023/2025/2026 を含む Kata-containers がインストールされます。
#### 3.3.4 ケース: CVE-2016-5195
実行:```bash
./metarget cnv install cve-2016-5195
上記のコマンドが正常に完了した場合、CVE-2016-5195の脆弱性があるカーネルがインストールされます。
usage: metarget appv [-h] subcommand ...
positional arguments: subcommand description list list supported application vulnerabilities install install application vulnerabilities remove uninstall application vulnerabilities
optional arguments: -h, --help show this help message and exit
`./metarget appv list` を実行すると、現在サポートされているクラウドネイティブアプリケーションに関連する脆弱性シナリオを確認できます。
注意:
アプリケーションの脆弱性シナリオをデプロイする前に、まずDockerとKubernetesをインストールする必要があります。Metargetを使用してDockerとKubernetesをインストールできます。
#### 3.4.1 事例:DVWA
実行:```bash
./metarget appv install dvwa
上記のコマンドが正常に完了すると、DVWA が現在のKubernetesに Deployment および Service リソースとしてデプロイされます。
注意:
--external オプションを指定すると、サービスが NodePort として公開され、ホストノードのIPからアクセスできるようになります(デフォルトでは、サービスのタイプは ClusterIP です)。--host-net オプションを指定すると、アプリがホストのネットワーク名前空間を共有します。--host-pid オプションを指定すると、アプリがホストのPID名前空間を共有します。ユーザーのネットワーク環境、Ubuntuバージョン、Dockerバージョンによっては、自動スクリプトによる脆弱性環境のワンクリックインストールが依然として失敗することがあるため、初めて脆弱性環境イメージを提供します。
以下のコマンドを実行して、ターゲットの脆弱性環境イメージをビルドします:```bash sudo docker build -t vuln-docker-24.0.7 -f vuln-docker-24.0.7 .
次のコマンドを実行して、ターゲット脆弱性環境イメージを起動します。```bash
docker run vuln-XXX
開発中。現在はサポートされていません。
脆弱なシナリオ名の後にアスタリスク (*) が付いている場合は、表の下にある関連する注記を参照して詳細を確認してください。
注記:
--verbose オプションを追加することを推奨します。privilege_escalation とマークされている一方で、他のものが container_escape とマークされている場合があります。本質的な違いはペイロード(高権限シェルの取得またはエスケープの優先順位)です。
container_escape としてマークし、それ以外は一時的に privilege_escalation としてマークしています。cnv install cve-2021-30465(Docker をインストール)の後、
cnv install cve-2018-1002105 または gadget install k8s --version 1.16.5)。これらのシナリオは主に他のオープンソースプロジェクトから派生しています:
上記のプロジェクトに心より感謝いたします!
Metarget は上記のプロジェクトのシナリオを Kubernetes の Deployments および Services リソースに変換します(kompose に感謝)。
Metarget がサポートするクラウドネイティブアプリケーション関連の脆弱なシナリオを一覧表示するには、次のコマンドを実行します:```bash ./metarget appv list
注意:
- Confluenceの脆弱性CVE-2019-3396のデプロイについては、[Vulhub](https://github.com/vulhub/vulhub/blob/master/conference/CVE-2019-3396/README.zh-cn.md) を参照してください。PostgreSQLのアドレスは `cve-2019-3396-db` とし、Vulhub内の `db` ではありません。
## 5 デモ
[](https://asciinema.org/a/407107)
## 6 開発計画
- [x] 基本的なクラウドネイティブコンポーネント(docker, k8s)のデプロイメント
- [x] クラウドネイティブコンポーネントに関連する脆弱性シーンの統合
- [x] コンテナ内のRCEシーンの統合
- [x] クラウドネイティブ脆弱性イメージ
- [x] マルチノードクラウドネイティブ標的クラスタの自動構築
- [ ] 複雑なクラウドネイティブアプリケーション脆弱性シナリオの統合
- その他のクラウドネイティブ脆弱性シーンの統合(長期)
## 7 メンテナー
- [@brant-ruan](https://github.com/brant-ruan)
- [@ListenerMoya](https://github.com/ListenerMoya)
- [@Lvzhizheng](https://github.com/Lvzhizheng)
## 8 貢献
Metargetの目標の1つは、脆弱性が発生した際に、より迅速な脆弱性環境の構築を促進することです。また、統合されたすべての脆弱性シーンをいつでも構築するためにも使用できます。
Metargetを最新の状態に保つために、脆弱性シーンのリスト(`cnv` と `appv` の両方)はメンテナンスされます。
Metargetでは、脆弱性シーンを記述・統合するために *YAML* を使用しています。現在、`cnv`(`vulns_cn/`内)と `appv`(`vulns_app/`内)の2層のシーンがサポートされています。
コミュニティからのメンテナンスは歓迎され、感謝されています。Metargetのコンテキストで知識や研究を集めて共有し、クラウドネイティブセキュリティの発展を促進できることを願っています。
現在、Metargetへの貢献方法は2つあります:
1. 新しいクラウドネイティブ脆弱性(cnv)のYAMLファイルを提出する。
2. 新しいクラウドネイティブアプリケーション脆弱性(appv)のYAMLファイルを提出する。
詳細は[CONTRIBUTING.md](https://github.com/metarget/metarget/blob/HEAD/CONTRIBUTING.md)を参照してください。
## 9 コラボレーション(連絡先:[email protected])
大学、研究機関、その他の学術団体とのコラボレーションを心より歓迎します!Metargetは、クラウドネイティブセキュリティ分野の最先端研究のための理想的な実験プラットフォームとなることを目指しています。クラウドネイティブセキュリティは、将来のネットワークセキュリティにおける最重要トピックになると確信しており、Metargetはそのための理想的な研究環境を提供します。
堅牢で柔軟なフレームワークを通じて、クラウドネイティブ環境のセキュリティ課題に深く取り組み、革新的なソリューションを発見・探求し、専門知識や発見を業界全体の発展に貢献することができます。
**Metargetはコラボレーターに以下の特長的なサポートを提供します:**
1. **多様な実験シナリオ:** Metargetを利用して、クラウドネイティブなEコマースプラットフォームやクラウドネイティブなオンライン講座システムなど、簡単から複雑まで様々な実験シナリオをカバーする脆弱性のあるクラウドネイティブ標的環境を簡単に構築できます。
2. **クラウドネイティブ脆弱性イメージ:** スクリプトの支援なしで、脆弱性環境をすぐに利用可能です。
3. **複数バージョンのKernel、Kubernetes、その他のクラウドネイティブコンポーネントのサポート:** Metargetは最新のコンポーネントバージョンをサポートするために常に更新されており、実験で最新のテクノロジーを使用できることを保証します。
4. **Ubuntuバージョンのカスタマイズ:** 実験要件に基づいてUbuntuバージョンを調整し、より柔軟な実験環境構成を提供します。
5. **マルチノードクラウドネイティブクラスタの自動生成:** Metargetはマルチノードのクラウドネイティブ標的クラスタを自動的に作成する機能を提供し、研究のリアリティと深みを高めます。
6. ...
Metargetに参加することで、包括的な技術サポートと豊富なコラボレーションの機会を得られ、クラウドネイティブセキュリティの最前線を探求し、ネットワークセキュリティの未来の発展に独自の洞察を貢献できます。皆様の参加を心待ちにしており、共にサイバーセキュリティ研究の新たな章を築きましょう!
## 10 ロゴについて
これはKubernetesではなく、3つの歯車がうまく噛み合わない(脆弱な)インフラストラクチャを示しています:)
## 10 ライセンス
MetargetはApache License 2.0の下でライセンスされています。完全なライセンステキストは[LICENSE](https://github.com/metarget/metarget/blob/HEAD/LICENSE)を参照してください。
## 11 イベント
### KCon 2021 Arsenal
- URL: http://kcon.knownsec.com/2021/#/arsenal
### OpenInfra Days Asia 2021
- トピック: Metarget: Auto-construction of Vulnerable Cloud Native Infrastructure
- 動画: https://www.youtube.com/watch?v=43UvCHjn8wA
- PPT: [OID-Asia-2021-Metarget.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/OID-Asia-2021-Metarget.pdf)
### OpenInfra Days China 2021
- トピック: Metarget:构建云原生基础设施靶场
- PPT: [OID-China-2021-Metarget.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/OID-China-2021-Metarget.pdf)
### CCF BDTC 2021
- トピック: 构建云原生基础设施靶场
### 論文での参照 (IEEE TPS-ISA 2021)
- 論文: Security Challenges in the Container Cloud
- PDF: [TPS21.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/TPS21.pdf)
### CSDN Cloud Native Security Summit 2022
- トピック: 攻方视角:从开源靶场看云原生安全
- PPT: [CSDN云原生安全技术峰会-2022-攻方视角:从开源靶场看云原生安全.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/CSDN%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF%E5%B3%B0%E4%BC%9A-2022-%E6%94%BB%E6%96%B9%E8%A7%86%E8%A7%92%EF%BC%9A%E4%BB%8E%E5%BC%80%E6%BA%90%E9%9D%B6%E5%9C%BA%E7%9C%8B%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%89%E5%85%A8.pdf)
### 論文での参照 (IC2E 2022)
- 論文: PACED: Provenance-based Automated Container Escape Detection
- PDF: [IC2E-2022.PACED.pdf](http://www.csl.sri.com/users/gehani/papers/IC2E-2022.PACED.pdf)
### CIS 2022
- トピック: Metarget: 云原生安全研究与自动化
- URL: https://cis.freebuf.com
### Metarget Joins CNCF Landscape
- URL: https://landscape.cncf.io/?selected=metarget
### KCD Shanghai 2024
- https://community.cncf.io/events/details/cncf-kcd-shanghai-presents-kcd-shanghai-2024/
| 名前 | クラス | タイプ | CVSS 3.x | 解説 | ATT&CK マップ |
|---|
| cve-2018-15664 | docker | container_escape | 7.5 | privilege escalation/escape to host Persistence/escape to host Lateral movement/escape to host Defense Bypass/Build an image on the host | |
| cve-2019-13139 | docker | command_execution | 8.4 | link | |
| cve-2019-14271 | docker | container_escape | 9.8 | link | |
| cve-2020-15257 | docker/containerd | container_escape | 5.2 | link | |
| cve-2019-5736 | docker/runc | container_escape | 8.6 | ||
| cve-2019-16884 | docker/runc | container_escape | 7.5 | ||
| cve-2021-30465* | docker/runc | container_escape | 7.6 | link | |
| cve-2024-21626 | docker/runc | container_escape | 8.6 | ||
| cve-2017-1002101 | k8s | container_escape | 9.6 | link | |
| cve-2018-1002105 | k8s | privilege_escalation | 9.8 | ||
| cve-2018-1002100 | k8s/kubectl | container_escape | 5.5 | ||
| cve-2019-1002101 | k8s/kubectl | container_escape | 5.5 | ||
| cve-2019-11246 | k8s/kubectl | container_escape | 6.5 | ||
| cve-2019-11249 | k8s/kubectl | container_escape | 6.5 | ||
| cve-2019-11251 | k8s/kubectl | container_escape | 5.7 | ||
| cve-2019-11253 | k8s | denial_of_service | 7.5 | ||
| cve-2019-9512 | k8s | denial_of_service | 7.5 | ||
| cve-2019-9514 | k8s | denial_of_service | 7.5 | ||
| cve-2019-9946 | k8s | traffic_interception | 7.5 | ||
| cve-2020-8554 | k8s | man_in_the_middle | 5.0 | ||
| cve-2020-10749 | k8s/kubernetes-cni | man_in_the_middle | 6.0 | ||
| cve-2020-8555 | k8s | server_side_request_forgery | 6.3 | ||
| cve-2020-8557 | k8s | denial_of_service | 5.5 | ||
| cve-2020-8558 | k8s | exposure_of_service | 8.8 | ||
| cve-2020-8559 | k8s | privilege_escalation | 6.8 | ||
| cve-2021-25741 | k8s | container_escape | 8.1 | ||
| cve-2022-0811 | k8s | container_escape | 8.8 | link | |
| cve-2016-5195 | kernel | container_escape | 7.8 | ||
| cve-2016-8655 | kernel | privilege_escalation | 7.8 | ||
| cve-2017-6074 | kernel | privilege_escalation | 7.8 | ||
| cve-2017-7308 | kernel | container_escape | 7.8 | link | |
| cve-2017-16995 | kernel | privilege_escalation | 7.8 | ||
| cve-2017-1000112 | kernel | container_escape | 7.0 | link | |
| cve-2018-18955 | kernel | privilege_escalation | 7.0 | ||
| cve-2020-14386 | kernel | container_escape | 7.8 | ||
| cve-2021-3493 | kernel | privilege_escalation | 7.8 | link | |
| cve-2021-4204 | kernel | privilege_escalation | - | ||
| cve-2021-22555 | kernel | container_escape | 7.8 | ||
| cve-2022-0185 | kernel | container_escape | 8.4 | ||
| cve-2022-0492 | kernel | container_escape | 7.8 | link | |
| cve-2022-0847 | kernel | container_escape | 7.8 | link | |
| cve-2022-0995* | kernel | privilege_escalation | 7.1 | link | |
| cve-2022-25636* | kernel | privilege_escalation | 7.8 | ||
| cve-2022-23222 | kernel | privilege_escalation | 7.8 | ||
| cve-2022-27666* | kernel | privilege_escalation | 7.8 | ||
| cve-2023-3269* | kernel | privilege_escalation | 7.8 | ||
| kata-escape-2020 | kata-containers | container_escape | 6.3/8.8/8.8 | ||
| cve-2020-27151 | kata-containers | container_escape | 8.8 | ||
| cap_dac_read_search-container | config | container_escape | - | link | |
| cap_sys_admin-container | config | container_escape | - | ||
| cap_sys_ptrace-container | config | container_escape | - | ||
| cap_sys_module-container | config | container_escape | - | link | |
| privileged-container | config | container_escape | - | link | |
| k8s_backdoor_daemonset | config | persistence | - | link | |
| k8s_backdoor_cronjob | config | persistence | - | link | |
| k8s_shadow_apiserver | config | persistence | - | link | |
| k8s_node_proxy | config | privilege_escalation | - | link | |
| mount-docker-sock | mount | container_escape | - | link | |
| mount-host-etc | mount | container_escape | - | ||
| mount-host-procfs | mount | container_escape | - | link | |
| mount-var-log | mount | container_escape | - | link |