
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: