
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を実行すると、現在サポートされているクラウドネイティブコンポーネントに関連する脆弱なシナリオを確認できます。