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
root@kitploit:~
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
root@kitploit:~
### 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를 실행하면 현재 지원되는 클라우드 네이티브 구성 요소를 볼 수 있습니다.
3.2 클라우드 네이티브 구성 요소 관리```
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
root@kitploit:~
> `./metarget gadget list docker/k8s/containerd/runc/kernel`을 실행하여 현재 지원되는 클라우드 네이티브 구성 요소의 버전을 확인하세요.
#### 3.2.1 사례: 지정된 버전으로 Docker 설치
실행:```bash
./metarget gadget install docker --version 18.03.1
위 명령이 성공적으로 완료되면, 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:
k8s < 1.24: 기본적으로 Docker를 사용합니다 (metarget gadget install docker를 통해 사전 설치 필요). containerd를 강제로 사용하려면 --runtime containerd를 사용하십시오.
k8s >= 1.24: containerd가 자동으로 설치되어 CRI로 구성됩니다 (기본값 --runtime auto). 수동 Docker 설치가 필요하지 않습니다.
k8s >= 1.24 + --runtime docker: CRI shim으로 cri-dockerd를 자동으로 설치합니다 (Docker는 사전 설치 필요). --runtime-version을 사용하여 특정 cri-dockerd 버전을 고정하십시오.
예시:```bash
Install k8s 1.28 with containerd (auto-selected)
./metarget gadget install k8s --version 1.28.4
Install k8s 1.28 with a specific containerd version
**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입니다.
위 명령어가 성공적으로 완료되면 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와 함께 사용할 준비가 됩니다.
위 명령어가 성공적으로 완료되면 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를 실행하여 현재 지원되는 클라우드 네이티브 구성 요소와 관련된 취약한 시나리오를 확인하세요.
3.3.1 사례: CVE-2019-5736
실행:```bash
./metarget cnv install cve-2019-5736
root@kitploit:~
위의 명령이 성공적으로 완료되면, CVE-2019-5736이 적용된 Docker가 설치됩니다.
#### 3.3.2 사례: CVE-2018-1002105
실행:```bash
./metarget cnv install cve-2018-1002105
위의 명령이 성공적으로 완료되면 CVE-2018-1002105가 포함된 Kubernetes가 설치됩니다.
위 명령이 성공적으로 완료되면, CVE-2020-2023/2025/2026이 적용된 Kata-containers가 설치됩니다。
#### 3.3.4 사례: CVE-2016-5195
실행:```bash
./metarget cnv install cve-2016-5195
위 명령이 성공적으로 완료되면, CVE-2016-5195가 포함된 커널이 설치됩니다.
3.4 클라우드 네이티브 애플리케이션 관련 취약한 시나리오 관리```
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
root@kitploit:~
`./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 옵션을 지정하면 appv가 호스트 네트워크 네임스페이스를 공유합니다.
--host-pid 옵션을 지정하면 appv가 호스트 PID 네임스페이스를 공유합니다.
3.5 취약점 환경 이미지
사용자의 네트워크 환경, ubuntu 버전 및 Docker 버전에 따라 자동화 스크립트를 통한 원클릭 취약점 환경 설치는 여전히 가끔 실패할 수 있으므로, 처음으로 취약점 환경 이미지를 제공합니다.
다음 명령어를 실행하여 대상 취약점 환경 이미지를 빌드합니다:```bash
sudo docker build -t vuln-docker-24.0.7 -f vuln-docker-24.0.7 .
root@kitploit:~
대상 취약점 환경 이미지를 실행하려면 다음 명령을 실행하십시오:```bash
docker run vuln-XXX
3.6 취약한 클라우드 네이티브 대상 클러스터 관리
개발 중이며, 현재 지원되지 않습니다.
4 시나리오 목록
4.1 클라우드 네이티브 구성 요소 관련 취약 시나리오
취약 시나리오 이름 뒤에 별표(*)가 있는 경우, 전체 표 아래에 있는 관련 참고 사항을 읽어 자세한 내용을 확인해야 합니다.
Metarget은 위 프로젝트의 시나리오를 Kubernetes의 Deployment 및 Service 리소스로 변환합니다 (kompose 덕분에).
Metarget이 지원하는 클라우드 네이티브 애플리케이션 관련 취약 시나리오를 나열하려면 다음을 실행하세요:```bash
./metarget appv list
root@kitploit:~
참고:
- [Confluence 취약점 CVE-2019-3396](https://github.com/metarget/metarget/blob/master/vulns_app/confluence/CVE-2019-3396) 배포에 대해서는 [Vulhub](https://github.com/vulhub/vulhub/blob/master/confluence/CVE-2019-3396/README.zh-cn.md)를 참조할 수 있습니다. 단, PostgreSQL 주소는 Vulhub의 `db`가 아닌 `cve-2019-3396-db`여야 합니다.
## 5 DEMO
[](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의 목표 중 하나는 취약점이 발생했을 때 취약 환경을 보다 신속하게 구축할 수 있도록 돕는 것입니다. 또한 통합된 모든 취약 시나리오를 원할 때마다 구축하는 데 사용할 수 있습니다.
Metarget을 최신 상태로 유지하기 위해 취약 시나리오 목록(`cnv` 및 `appv`)이 유지 관리됩니다.
Metarget에서는 *YAML*을 사용하여 취약 시나리오를 설명하고 통합합니다. 현재 `cnv`(`vulns_cn/`) 및 `appv`(`vulns_app/`)의 두 계층 시나리오가 지원됩니다.
커뮤니티의 유지 관리를 환영합니다. Metarget을 통해 지식과 연구를 모으고 공유하여 클라우드 네이티브 보안 발전을 촉진할 수 있기를 바랍니다.
현재 두 가지 방법으로 Metarget에 기여할 수 있습니다:
1. 새로운 클라우드 네이티브 취약점(cnv)의 YAML 파일 제출
2. 새로운 클라우드 네이티브 애플리케이션 취약점(appv)의 YAML 파일 제출
자세한 내용은 [CONTRIBUTING.md](https://github.com/metarget/metarget/blob/master/CONTRIBUTING.md)를 참조하세요.
## 9 협력 (문의: [email protected])
대학, 연구 기관 및 기타 학술 단체와의 협력을 진심으로 환영합니다! Metarget은 클라우드 네이티브 보안 분야의 최첨단 연구를 위한 이상적인 실험 플랫폼이 되기 위해 노력합니다. 클라우드 네이티브 보안은 네트워크 보안의 미래에서 중요한 주제가 될 것이며, Metarget은 이를 위한 이상적인 연구 환경을 제공합니다.
강력하고 유연한 프레임워크를 통해 클라우드 네이티브 환경의 보안 과제를 깊이 탐구하고, 혁신적인 솔루션을 발견 및 탐구하며, 업계 전체의 발전에 전문성과 연구 결과를 기여할 수 있습니다.
**Metarget은 협력자에게 다음과 같은 차별화된 지원을 제공합니다:**
1. **다양한 실험 시나리오:** Metarget을 활용하여 클라우드 네이티브 전자상거래 플랫폼, 클라우드 네이티브 온라인 강좌 시스템 등 간단한 시나리오부터 복잡한 시나리오까지 다양한 취약한 클라우드 네이티브 타겟 환경을 손쉽게 구축할 수 있습니다.
2. **클라우드 네이티브 취약 이미지:** 스크립팅 지원 없이도 취약 환경을 즉시 사용할 수 있습니다.
3. **다양한 버전의 Kernel, Kubernetes 및 기타 클라우드 네이티브 구성 요소 지원:** Metarget은 최신 구성 요소 버전을 지속적으로 업데이트하여 실험에 최신 기술을 사용할 수 있도록 합니다.
4. **Ubuntu 버전 맞춤 설정:** 실험 요구 사항에 따라 Ubuntu 버전을 조정하여 보다 유연한 실험 환경 구성을 제공합니다.
5. **다중 노드 클라우드 네이티브 클러스터 자동 생성:** Metarget은 다중 노드 클라우드 네이티브 타겟 클러스터를 자동으로 생성하는 기능을 제공하여 연구의 현실성과 깊이를 높입니다.
6. ...
Metarget에 참여하면 포괄적인 기술 지원과 풍부한 협력 기회를 얻을 수 있으며, 클라우드 네이티브 보안의 최전선을 탐구하고 네트워크 보안 연구의 새로운 장을 함께 열어갈 수 있습니다. 여러분의 참여를 기대합니다!
## 10 로고 정보
Kubernetes가 아니라, 제대로 작동하지 않는 세 개의 기어가 있는 취약한 인프라입니다. :)
## 10 라이선스
Metarget은 Apache License 2.0에 따라 라이선스가 부여됩니다. 전체 라이선스 텍스트는 [LICENSE](https://github.com/metarget/metarget/blob/master/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/