
Metarget es un framework que proporciona construcciones automáticas de infraestructuras vulnerables.
Metarget = meta- + target, un framework que proporciona construcciones automáticas de infraestructuras vulnerables, utilizado para desplegar objetivos nativos en la nube vulnerables simples o complicados de forma rápida y automática.
Durante las investigaciones de seguridad, a menudo nos encontramos con que el despliegue de entornos vulnerables consume mucho tiempo, mientras que el tiempo dedicado a probar PoC o ExP es comparativamente corto. En el campo de la seguridad nativa en la nube, debido a la complejidad de los sistemas nativos en la nube, este problema es aún más grave.
Ya existen algunos proyectos de seguridad excelentes como Vulhub, VulApps en la comunidad de código abierto, que empaquetan escenas vulnerables en imágenes de contenedores, de modo que los investigadores puedan utilizarlos y desplegar escenas rápidamente.
Sin embargo, estos proyectos se centran principalmente en vulnerabilidades en aplicaciones. ¿Qué pasa si necesitamos estudiar las vulnerabilidades en las infraestructuras como Docker, Kubernetes e incluso el kernel de Linux?
Por lo tanto, desarrollamos Metarget y esperamos resolver el problema de despliegue mencionado hasta cierto punto. Además, también esperamos que Metarget pueda ayudar a construir escenas vulnerables nativas en la nube de múltiples capas de forma automática.
En este proyecto, planteamos conceptos como instalar vulnerabilidades e instalar escenas vulnerables. ¿Por qué no instalar vulnerabilidades como si instaláramos software? Podemos hacerlo, porque nuestros objetivos son la investigación de seguridad y la seguridad ofensiva.
Para ser exactos, esperamos que:
metarget cnv install cve-2019-5736 instalará Docker con CVE-2019-5736 en el servidor.metarget cnv install cve-2018-1002105 instalará Kubernetes con CVE-2018-1002105 en el servidor.metarget cnv install kata-escape-2020 instalará Kata-containers con CVE-2020-2023/2025/2026 en el servidor.metarget cnv install cve-2016-5195 instalará un kernel con DirtyCoW en el servidor.Es genial, ¿verdad? Sin más pasos. Sin RTFM. Ejecuta un comando y disfruta tu café.
Además, esperamos que:
metarget appv install dvwa instalará un objetivo DVWA en nuestra infraestructura vulnerable.metarget appv install thinkphp-5-0-23-rce --external instalará una vulnerabilidad ThinkPHP RCE con servicio NodePort en nuestra infraestructura vulnerable.Puedes ejecutar solo 5 comandos a continuación después de instalar un nuevo Ubuntu y obtener una escena vulnerable de múltiples capas:```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, escape de contenedor, movimiento lateral, persistencia, ahora son tuyos.
¡Pronto llegarán más funciones increíbles! Estén atentos :)
Nota:
Este proyecto tiene como objetivo proporcionar escenarios vulnerables para la investigación en seguridad. No se garantiza la seguridad de los escenarios generados. **NO** se recomienda implementar componentes o escenarios con Metarget en Internet.
## 2 Instalación
### 2.1 Requisitos
- Ubuntu **20.04 / 22.04 / 24.04 (recomendado)**, 18.04 también es compatible
- para algunos casos (por ejemplo, nuevas vulnerabilidades del kernel) se necesitan distribuciones específicas de Ubuntu
- puedes leer la nota sobre vulnerabilidades específicas (indicada con un asterisco (\*)) para más detalles
- **Python >= 3.7** (¡Python 2.x no es compatible!)
- pip3
### 2.2 Desde el código fuente
Clona el repositorio e instala los requisitos:```bash
git clone https://github.com/Metarget/metarget.git
cd metarget/
pip3 install -r requirements.txt
Comience a usar Metarget y construya escenas vulnerables. Por ejemplo:```bash ./metarget cnv install cve-2019-5736
### 2.3 Desde PyPI
Actualmente no compatible.
## 3 Uso
Metarget debe ejecutarse como **root**.
Se recomienda añadir la opción `--verbose` al depurar.
### 3.1 Uso básico```
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
Ejecute ./metarget gadget list para ver los componentes nativos en la nube compatibles actualmente.
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
> Ejecute`./metarget gadget list docker/k8s/containerd/runc/kernel`para ver las versiones compatibles de los componentes nativos de la nube actualmente.
#### 3.2.1 Caso: Instalar Docker con una Versión Especificada
Ejecute:```bash
./metarget gadget install docker --version 18.03.1
Si el comando anterior se completa con éxito, se instalará Docker 18.03.1.
Ejecute:```bash ./metarget gadget install k8s --version 1.28.4
Si el comando anterior se completa correctamente, se instalará un clúster de Kubernetes de un solo nodo 1.28.4.
Rango de versiones compatibles de Kubernetes: **1.9 – 1.33**.
Nota:
Metarget proporciona las siguientes opciones para la instalación de 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
Selección del runtime de contenedores:
metarget gadget install docker). Usa --runtime containerd para forzar containerd.--runtime auto por defecto). No se necesita instalación manual de Docker.--runtime docker: Instala automáticamente cri-dockerd como shim CRI (Docker debe estar preinstalado). Usa --runtime-version para fijar una versión específica de cri-dockerd.Ejemplos:```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 es compatible con el despliegue de un clúster multinodo. Si desea agregar más nodos al clúster, puede copiar el script `tools/install_k8s_worker.sh` y ejecutarlo en cada nodo trabajador después de la instalación exitosa del clúster de un solo nodo.**
#### 3.2.3 Caso: Instalar Kata-containers con una versión específica
Ejecute:```bash
./metarget gadget install kata --version 1.10.0
Si el comando anterior se completa con éxito, se instalarán Kata-containers 1.10.0.
Nota:
También puede especificar el tipo de kata runtime (qemu/clh/fc/...) con la opción --kata-runtime-type, que es qemu por defecto.
Ejecutar:```bash ./metarget gadget install kernel --version 5.7.5
Si el comando anterior se completa con éxito, se instalará el kernel 5.7.5.
Nota:
Actualmente, Metarget instala kernels de 2 maneras:
1. apt
2. si el paquete apt no está disponible, descargue *.deb de forma remota desde Ubuntu e intente instalarlo
Después de la instalación exitosa del kernel, es necesario reiniciar el sistema. Metarget le pedirá que reinicie automáticamente.
#### 3.2.5 Caso: Instalar containerd/runc con una versión específica
Ejecute:```bash
./metarget gadget install containerd --version 1.7.14
Si el comando anterior se completa exitosamente, se instalará containerd 1.7.14 y se configurará automáticamente como un runtime CRI de Kubernetes (SystemdCgroup = true), listo para usar con metarget gadget install k8s.
Ejecuta:```bash ./metarget gadget install runc --version 1.1.6
Si el comando anterior se completa correctamente, se instalará runc 1.1.6.
### 3.3 Gestionar escenarios vulnerables relacionados con componentes nativos de la nube```
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
Ejecuta ./metarget cnv list para ver las escenas vulnerables relacionadas con los componentes nativos de la nube soportados actualmente.
Ejecuta:```bash ./metarget cnv install cve-2019-5736
Si el comando anterior se completa exitosamente, se instalará Docker con CVE-2019-5736.
#### 3.3.2 Caso: CVE-2018-1002105
Ejecute:```bash
./metarget cnv install cve-2018-1002105
Si el comando anterior se completa correctamente, se instalará Kubernetes con CVE-2018-1002105.
Ejecuta:```bash ./metarget cnv install kata-escape-2020
Si el comando anterior se completa correctamente, se instalarán Kata-containers con CVE-2020-2023/2025/2026.
#### 3.3.4 Caso: CVE-2016-5195
Ejecutar:```bash
./metarget cnv install cve-2016-5195
Si el comando anterior se completa correctamente, se instalará el kernel con 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
Ejecute `./metarget appv list` para ver las escenas vulnerables relacionadas con aplicaciones nativas de la nube que se admiten actualmente.
Nota:
Antes de implementar escenas vulnerables de aplicaciones, debe instalar Docker y Kubernetes primero. Puede usar Metarget para instalar Docker y Kubernetes.
#### 3.4.1 Caso: DVWA
Ejecute:```bash
./metarget appv install dvwa
Si el comando anterior se completa exitosamente, DVWA se desplegará como recursos Deployment y Service en el Kubernetes actual.
Nota:
--external, entonces el servicio se expondrá como NodePort, para que pueda visitarlo mediante la IP del nodo host (Por defecto, el tipo de servicio es ClusterIP).--host-net, entonces la appv compartirá el namespace de red del host.--host-pid, entonces la appv compartirá el namespace de pid del host.Dependiendo del entorno de red del usuario, la versión de ubuntu y la versión de Docker, la instalación con un solo clic del entorno de vulnerabilidades mediante scripts automatizados aún falla ocasionalmente, por lo que proporcionamos la imagen del entorno de vulnerabilidades por primera vez.
Ejecute el siguiente comando para construir la imagen del entorno de vulnerabilidades objetivo:```bash sudo docker build -t vuln-docker-24.0.7 -f vuln-docker-24.0.7 .
Ejecute el siguiente comando para ejecutar la imagen del entorno de vulnerabilidad objetivo:```bash
docker run vuln-XXX
En desarrollo, actualmente no soportado.
Si hay un asterisco (*) después del nombre de un escenario vulnerable, debe leer la nota relacionada debajo de toda la tabla para obtener más detalles.
Nota:
--verbose al depurar.privilege_escalation, mientras que otras como container_escape. La diferencia esencial es el payload (obtener un shell con altos privilegios o escapar primero).
container_escape si podemos reproducir todo el proceso con Metarget, otras se marcan temporalmente como privilege_escalation.cnv install cve-2021-30465 (que instala Docker),
cnv install cve-2018-1002105 o gadget install k8s --version 1.16.5 con Metarget).Estos escenarios se derivan principalmente de otros proyectos de código abierto:
¡Expresamos nuestro sincero agradecimiento a los proyectos anteriores!
Metarget convierte los escenarios de los proyectos anteriores en recursos de Deployments y Services en Kubernetes (gracias a kompose).
Para enumerar los escenarios vulnerables relacionados con aplicaciones nativas de la nube compatibles con Metarget, simplemente ejecute:```bash ./metarget appv list
Nota:
- Para el despliegue de la vulnerabilidad [Confluence CVE-2019-3396](https://github.com/metarget/metarget/blob/HEAD/vulns_app/confluence/CVE-2019-3396), puede consultar [Vulhub](https://github.com/vulhub/vulhub/blob/master/confluence/CVE-2019-3396/README.zh-cn.md), mientras que la dirección de PostgreSQL debería ser `cve-2019-3396-db`, no `db` en Vulhub.
## 5 DEMO
[](https://asciinema.org/a/407107)
## 6 Plan de Desarrollo
- [x] despliegues de componentes básicos cloud native (docker, k8s)
- [x] integraciones de escenarios vulnerables relacionados con componentes cloud native
- [x] integraciones de escenarios RCE en contenedores
- [x] imágenes vulnerables cloud native
- [x] construcción automática de clústeres objetivo cloud native multi-nodo
- [ ] integración de escenarios complejos de vulnerabilidades en aplicaciones cloud native
- integraciones de otros escenarios vulnerables cloud native (a largo plazo)
## 7 Mantenedores
- [@brant-ruan](https://github.com/brant-ruan)
- [@ListenerMoya](https://github.com/ListenerMoya)
- [@Lvzhizheng](https://github.com/Lvzhizheng)
## 8 Contribución
Uno de los objetivos de Metarget es facilitar una construcción más rápida de entornos vulnerables cuando ocurren vulnerabilidades. Además, puede utilizarse para construir todos los escenarios vulnerables integrados en cualquier momento.
Para mantener Metarget actualizado, se mantendrán las listas de escenarios vulnerables (tanto `cnv` como `appv`).
*YAML* se utiliza en Metarget para describir e integrar escenarios vulnerables. Actualmente, se admiten escenarios en dos capas: `cnv` (en `vulns_cn/`) y `appv` (en `vulns_app/`).
Se agradece y es bienvenido el mantenimiento de la comunidad. Esperamos poder reunir y compartir nuestros conocimientos e investigaciones en el contexto de Metarget, y promover el desarrollo de la seguridad cloud native.
Actualmente, puedes contribuir a Metarget de dos maneras:
1. Enviar archivos YAML de nuevas vulnerabilidades cloud native (cnv).
2. Enviar archivos YAML de nuevas vulnerabilidades de aplicaciones cloud native (appv).
Consulta [CONTRIBUTING.md](https://github.com/metarget/metarget/blob/HEAD/CONTRIBUTING.md) para más detalles.
## 9 Colaboración (Contáctenos en [email protected])
¡Damos la bienvenida con entusiasmo a la colaboración con universidades, instituciones de investigación y otras entidades académicas! Metarget está dedicado a ser una plataforma experimental ideal para la investigación de vanguardia en el campo de la seguridad cloud native. Creemos que la seguridad cloud native será un tema puntero en el futuro de la seguridad de redes, y Metarget proporciona un entorno de investigación ideal para ello.
A través de nuestro marco robusto y flexible, puedes profundizar en los desafíos de seguridad de los entornos cloud native, descubrir y explorar soluciones innovadoras, y contribuir con tu experiencia y hallazgos al desarrollo de toda la industria.
**Metarget ofrece el siguiente soporte distintivo a los colaboradores:**
1. **Escenarios experimentales diversos:** Utiliza Metarget para construir sin esfuerzo diversos entornos objetivo cloud native vulnerables, cubriendo un espectro de escenarios experimentales, desde simples hasta complejos, como una plataforma de comercio electrónico cloud native o un sistema de cursos en línea cloud native.
2. **Imágenes vulnerables cloud native:** Sin ninguna ayuda de scripts, el entorno de vulnerabilidad está disponible de inmediato.
3. **Soporte para múltiples versiones de Kernel, Kubernetes y otros componentes cloud native:** Metarget se actualiza constantemente para soportar las últimas versiones de los componentes, asegurando que puedas usar las tecnologías más recientes en tus experimentos.
4. **Personalización de versiones de Ubuntu:** Adaptaremos las versiones de Ubuntu según tus requisitos experimentales, proporcionándote una configuración de entorno experimental más flexible.
5. **Generación automática de clústeres cloud native multi-nodo:** Metarget ofrece la funcionalidad de crear automáticamente clústeres objetivo cloud native de múltiples nodos, mejorando el realismo y la profundidad de tu investigación.
6. ...
Unirse a Metarget te brinda soporte técnico integral y abundantes oportunidades de colaboración, permitiéndote explorar la vanguardia de la seguridad cloud native y aportar tus perspectivas únicas al desarrollo futuro de la seguridad de redes. ¡Esperamos tu participación para dar forma conjunta a un nuevo capítulo en la investigación de la ciberseguridad!
## 10 Acerca del Logotipo
No es un Kubernetes, sino una infraestructura vulnerable con tres engranajes que no podrían funcionar bien (vulnerable) :)
## 10 Licencia
Metarget está licenciado bajo Apache License 2.0. Consulta [LICENSE](https://github.com/metarget/metarget/blob/HEAD/LICENSE) para el texto completo de la licencia.
## 11 Eventos
### KCon 2021 Arsenal
- URL: http://kcon.knownsec.com/2021/#/arsenal
### OpenInfra Days Asia 2021
- Tema: Metarget: Auto-construcción de Infraestructura Cloud Native Vulnerable
- Video: 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
- Tema: Metarget: Construcción de un campo de tiro de infraestructura cloud native
- PPT: [OID-China-2021-Metarget.pdf](https://github.com/brant-ruan/slides-and-papers/blob/master/OID-China-2021-Metarget.pdf)
### CCF BDTC 2021
- Tema: Construcción de un campo de tiro de infraestructura cloud native
### Referencia en Artículo (IEEE TPS-ISA 2021)
- Artículo: 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
- Tema: Perspectiva del atacante: viendo la seguridad cloud native desde un campo de tiro de código abierto
- 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)
### Referencia en Artículo (IC2E 2022)
- Artículo: 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
- Tema: Metarget: Investigación y automatización de seguridad cloud native
- URL: https://cis.freebuf.com
### Metarget se une al 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/
| Nombre | Clase | Tipo | CVSS 3.x | Documentación | Mapa 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 |