
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이 필요 없습니다. 하나의 명령어를 실행하고 커피를 즐기세요.
또한, 우리는 다음과 같은 것을 기대합니다:
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
Begin to use Metarget and construct vulnerable scenes. For example:```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
Container runtime selection:
metarget gadget install docker를 통해 사전 설치 필요). containerd를 강제로 사용하려면 --runtime containerd를 사용하십시오.--runtime auto). 수동 Docker 설치가 필요하지 않습니다.--runtime docker: CRI shim으로 cri-dockerd를 자동으로 설치합니다 (Docker는 사전 설치 필요). --runtime-version을 사용하여 특정 cri-dockerd 버전을 고정하십시오.예시:```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은 두 가지 방식으로 커널을 설치합니다:
1. apt
2. apt 패키지를 사용할 수 없는 경우 Ubuntu에서 \*.deb를 원격으로 다운로드하여 설치 시도
커널이 성공적으로 설치된 후에는 시스템 재부팅이 필요합니다. Metarget이 자동으로 재부팅을 요청할 것입니다.
#### 3.2.5 사례: 지정된 버전의 containerd/runc 설치
실행:```bash
./metarget gadget install containerd --version 1.7.14
위 명령어가 성공적으로 완료되면, containerd 1.7.14가 설치되고 Kubernetes CRI 런타임(SystemdCgroup = true)으로 자동 구성되어 metarget gadget install k8s와 함께 사용할 준비가 됩니다.
실행:```bash ./metarget gadget install runc --version 1.1.6
위 명령어가 성공적으로 완료되면 1.1.6 runc가 설치됩니다.
### 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를 실행하여 현재 지원되는 클라우드 네이티브 구성 요소와 관련된 취약한 시나리오를 확인하세요.