
Despliegue automatizado de infraestructura de Red Team usando Docker
Lanzamiento temprano. Sígueme en Twitter para mantenerte al tanto del desarrollo de Redcloud.
💁☁️🐚🌱
Inicio Rápido - Arquitectura - Casos de Uso - Capturas de Pantalla
Redcloud es una herramienta potente y fácil de usar para desplegar una Infraestructura de Red Team completamente funcional usando Docker. Aprovecha la velocidad de la nube para tus herramientas. Se despliega en minutos. Úsala y adminístrala con su .
Ideal para tus pruebas de penetración, campos de tiro, red teaming y bug bounties!
Auto-aloja tu infraestructura de ataque sin complicaciones, despliega tu propia infraestructura ofensiva en vivo, escalable y resiliente en cuestión de minutos.
La siguiente demo muestra el despliegue de Redcloud a través de ssh, seguido de Metasploit. Luego vemos Traefik y un volumen en vivo adjunto a Metasploit. Finalmente, verificamos que la base de datos de Metasploit funcione con la terminal web, eliminamos el contenedor y terminamos Redcloud.
Configuración:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
Desplegar:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud usa PyYAML para imprimir la lista de plantillas disponibles. Está instalado por defecto en la mayoría de los sistemas.
Si no, simplemente ejecuta:```bash
pip install -r requirements.txt
Redcloud tiene 3 métodos de despliegue diferentes:
1. **Localmente**
2. **De forma remota, usando ssh**. Requiere tener tu clave pública en el archivo `authorized_keys` del objetivo.
3. **De forma remota, usando docker-machine**. Ejecuta la línea `eval (docker-machine env deploy_target)` para precargar tu entorno con tu docker-machine, y ejecuta `redcloud.py`. Redcloud debería detectar automáticamente tu docker-machine y resaltar los elementos del menú relevantes para un despliegue mediante docker-machine.
___
<h4 align="center">
<b>Plantillas</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Plantillas de Redcloud">
</p>
___
**Brevemente,**
`redcloud.py` despliega un stack de [Portainer](https://www.portainer.io/), **precargado con muchas plantillas de herramientas para tus compromisos ofensivos**, impulsado por Docker. Una vez desplegado, controla Redcloud a través de la [interfaz web](#capturas-de-pantalla). Utiliza [Traefik](https://traefik.io/) como proxy inverso. Despliegue remoto sencillo en tu servidor objetivo usando `ssh` del sistema o `docker-machine`.
* :rocket: ¿Alguna vez quisiste levantar un Kali en la nube con solo unos clics?
* :package: ¿Tener silos limpios entre tus herramientas, técnicas y etapas?
* :ambulance: ¿Monitorear la salud de tus escaneos y C2?
* :fire: ¿Saltarte esas tareas de administración del sistema para configurar una campaña de phishing y obtener acceso más rápido?
* :smiling_imp: ¿Curioso sobre cómo construirías *la* infraestructura de ataque ideal?
Usa la interfaz web para monitorear, gestionar e **interactuar con cada contenedor**. Usa la ágil terminal web igual que la tuya. Crea volúmenes, redes y reenvíos de puertos usando la sencilla interfaz de Portainer.
Despliega y maneja todas tus herramientas y técnicas favoritas con el poder de internet de grado de centro de datos :rocket:
___
*En la siguiente sección, profundizaremos más en los conceptos de diseño de Redcloud. Puedes comenzar sin necesidad de sumergirte en ello.*
___
* :book: **Índice de contenidos**
- [Introducción](#introducción)
- [Características](#características)
- [Inicio Rápido](#inicio-rápido)
- [Detalles](#detalles)
- [Arquitectura de Redcloud](#arquitectura-de-redcloud)
- [Flujo de trabajo de despliegue](#flujo-de-trabajo-de-despliegue)
- [Redes](#redes)
- [Volúmenes](#volúmenes)
- [Accediendo a los contenedores desde la terminal](#accediendo-a-los-contenedores-desde-la-terminal)
- [Accediendo a archivos](#accediendo-a-archivos)
- [Certificados SSL](#certificados-ssl)
- [Deteniendo Redcloud](#deteniendo-redcloud)
- [Plantillas de aplicaciones de Portainer](#plantillas-de-aplicaciones-de-portainer)
- [Proxy inverso Traefik](#proxy-inverso-traefik)
- [Consideraciones de seguridad de Redcloud](#consideraciones-de-seguridad-de-redcloud)
- [Candidatos de despliegue probados](#candidatos-de-despliegue-probados)
- [Solución de problemas](#solución-de-problemas)
- [Casos de uso](#casos-de-uso)
- [Capturas de pantalla](#capturas-de-pantalla)
- [Guía de contribución](#guía-de-contribución)
- [Alojando Redcloud](#alojando-redcloud)
- [Inspiraciones y agradecimientos](#inspiraciones-y-agradecimientos)
___
## Detalles
### Arquitectura de Redcloud
* `redcloud.py`: Inicia/Detiene la interfaz web y las Plantillas de aplicaciones, usando Docker y Portainer.
* `portainer`: Interfaz web de Portainer.
* `traefik`: Contenedor del proxy inverso Traefik hacia la interfaz web, api y contenedores de archivos. Algunas plantillas tienen rutas preconfiguradas por conveniencia. Consulta el `templates.yml`.
* `templates`: Contenedor de `http.server` de python3 que alimenta las Plantillas de aplicaciones. Vive en una red "interior".
* `cert_gen`: El contenedor [omgwtfssl](https://github.com/paulczar/omgwtfssl) que genera los certificados SSL siguiendo las mejores prácticas comunes.
* https://tu-servidor-ip/portainer: Interfaz web de Redcloud una vez desplegado.
* https://tu-servidor-ip/files: Volumen `redcloud_files` de Redcloud. También puedes acceder al contenido del contenedor `redcloud_log`, protegido por el mismo `.htpasswd` que Traefik. Credenciales por defecto: `admin:Redcloud`
* https://tu-servidor-ip/api: Página de monitoreo de salud del proxy inverso Traefik. Muestra estadísticas en vivo sobre rutas, backends, códigos de retorno. También mostrará datos de implantes de callback inverso si se configura a través de Traefik.
### Flujo de trabajo de despliegue
**El flujo de trabajo de despliegue de Redcloud es el siguiente:**
1. Clonar/Descargar el repositorio de Redcloud.
2. Ejecutar `redcloud.py`.
3. Elegir el candidato de despliegue del menú (local, ssh, docker-machine).
4. `redcloud.py` automáticamente:
* verifica si `docker` y `docker-compose` están en la máquina objetivo.
* instala `docker` y `docker-compose` si no están presentes.
* despliega el stack web en el objetivo usando `docker-compose`.
5. Una vez completado el despliegue, `redcloud.py` mostrará la URL. Dirígete a https://tu-máquina-de-despliegue-ip/portainer.
6. Configura nombre de usuario/contraseña desde la interfaz web.
7. Selecciona el endpoint (el único en la lista).
8. Accede a las plantillas usando el elemento de menú "Plantillas de aplicaciones" a la izquierda :rocket:
**El despliegue de Plantillas de aplicaciones es el siguiente:**
1. Elige una plantilla.
2. Si deseas agregar opciones adicionales, selecciona "+ Mostrar opciones avanzadas".
3. Agrega mapeo de puertos, opciones de red y mapeo de volúmenes como consideres.
4. Selecciona "Desplegar el contenedor".
5. Portainer lanzará el contenedor. Puede tomar unos minutos si necesita obtener la imagen. Si tu servidor está en un centro de datos, este paso será muy rápido.
6. El contenedor debería estar ejecutándose :rocket:
7. Portainer te redirigirá a la página "Contenedores". Desde allí, puedes:
a. Ver registros en vivo del contenedor.
b. Inspeccionar detalles del contenedor (`docker inspect`).
c. Ver estadísticas en vivo del contenedor (memoria/cpu/red/procesos).
d. Usar un shell web para interactuar con tu contenedor.
e. Dependiendo de la Plantilla de aplicación, usar `bash` o `sh`. Elige según corresponda desde el menú desplegable.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Menú de Redcloud">
</p>
### Redes
Redcloud facilita jugar con redes y contenedores.
Puedes crear redes adicionales con diferentes controladores y adjuntar tus contenedores como consideres. Redcloud viene con 2 redes, `redcloud_default` y `redcloud_inside`.
### Volúmenes
Puedes compartir datos entre contenedores compartiendo volúmenes. Redcloud viene con 3 volúmenes:
* `certs`: Contenedor con los certificados generados por [omgwtfssl](https://github.com/paulczar/omgwtfssl).
* `files`: Volumen estándar para compartir archivos. Por ahora, los archivos están disponibles al navegar a https://tu-servidor-ip/files, y son servidos por el contenedor del proxy inverso Traefik directamente desde el volumen `files`. Un caso de uso típico es adjuntar el volumen a un contenedor de Metasploit, generar tu payload directamente en el volumen `files`. Ahora puedes servir tu payload fresco directamente a través de Traefik hacia la ruta del servidor de archivos.
* `logs`: Disponible para registros, también servido por el servidor de archivos. El acceso requiere autenticación básica. Por defecto es `admin:Redcloud`.
### Accediendo a los contenedores desde la terminal
Si deseas permanecer en tu terminal para trabajar con los contenedores desplegados, es muy fácil usando Docker. Ten en cuenta lo siguiente:
* La mayoría de los contenedores tienen `bash`, pero algunos usan `sh` en su lugar
* Todos los nombres de los contenedores de las Plantillas de aplicaciones de Redcloud comienzan con `red_`, como `red_msf-postgresql`
* Con Docker, puedes usar `docker exec` o `attach` para interactuar con un contenedor
* `exec` es preferible ya que crea un nuevo proceso
* `attach` te lleva directamente al proceso en ejecución, potencialmente matando tu contenedor en ejecución
* Si ejecutas Redcloud:
* Localmente o usando `docker-machine`, simplemente escribe estos comandos en tu shell local
* Usando `ssh`, primero conéctate por ssh a tu objetivo de despliegue para ejecutar los siguientes comandos
Para comenzar a interactuar con el contenedor deseado desplegado:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
Si ves el siguiente mensaje, significa que bash no está instalado. En ese caso simplemente reemplaza /bin/bash por /bin/sh:```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
Para usar `docker attach`, simplemente ejecuta:```bash
> docker attach red_container-name
Si se usa attach, el contenedor debe iniciarse en modo interactivo para acceder a una shell interactiva.
Apunte su navegador a https://su-ip-de-redcloud/files.
Consulte el volumen files para más información.
Redcloud genera un nuevo certificado SSL no firmado al desplegarse.
El certificado es generado por omgwtfssl, implementando la mayoría de las mejores prácticas.
Una vez generado:
Volcará los certificados generados en /certs por defecto y también los mostrará en stdout en un formato YAML estándar, lo que facilita su consumo en Ansible u otras herramientas que usen YAML.
Los certificados se almacenan en un volumen compartido de Docker llamado certs. Sus contenedores pueden acceder a este volumen si lo indican en "+ Configuración avanzada" al desplegarlo. El proxy inverso Traefik obtiene los certificados directamente desde su archivo de configuración. Si desea reemplazar estos certificados por los suyos propios, simplemente reemplácelos en este volumen.
También significa que puede compartir los certificados generados en otros contenedores, como Empire o Metasploit para sus devoluciones de llamada inversas, o para una campaña de phishing.
La mayoría de las configuraciones relacionadas con SSL se pueden encontrar en traefik/traefik.toml o en el archivo docker-compose.yml.
Puede detener Redcloud directamente desde el menú.
Las plantillas de aplicaciones desplegadas deben detenerse manualmente antes de detener Redcloud. Puede detenerlas usando la interfaz web de Portainer, o docker rm -f nombre-del-contenedor.
Si desea forzar la detención de los contenedores de Portainer que ejecutan Redcloud, simplemente ejecute docker-compose kill dentro de la carpeta redcloud/.
La opción de detención local y docker-machine es la misma, por lo que están combinadas en la misma opción.
Redcloud usa Portainer para orquestar e interactuar con el motor Docker. Portainer en sí mismo es un proyecto fantástico para gestionar despliegues Docker de forma remota. Portainer también incluye un sistema de plantillas muy conveniente, que es el componente principal de nuestro despliegue de Redcloud.
Las plantillas se pueden encontrar en ./templates/templates.yml. Portainer obtiene el archivo de plantillas desde un contenedor dedicado (templates).
Traefik es un maravilloso "router de borde nativo en la nube". Ha reemplazado la configuración anterior de NGINX como proxy inverso.
Durante el despliegue se construye una imagen de Traefik, utilizando el Dockerfile ubicado en traefik/Dockerfile. Añade un .htpasswd con credenciales admin:Redcloud.
Por defecto, el despliegue genera las siguientes rutas:
https://su-ip-del-servidor/portainerhttps://su-ip-del-servidor/fileshttps://su-ip-del-servidor/apiLas autenticaciones se basan en los datos del .htaccess.
Desde la interfaz web de la API de Traefik, puede ver sus rutas desplegadas, monitorear la salud, así como métricas en tiempo real. Es muy interesante.
Puede agregar etiquetas adicionales que le indiquen a Traefik hacia dónde enrutar el tráfico, utilizando ya sea:
traefik/traefik.tomldocker-compose.ymltemplates.ymlConsulte la documentación oficial para más información.

Redcloud se despliega con un certificado https autofirmado, y proxy todas las interacciones con la consola web a través de él.
Sin embargo, la red por defecto expone los puertos de sus contenedores al exterior.
Puede:
labels personalizadas para crear rutas con Traefik. Consulte el archivo docker-compose.yml para inspiración.Adicionalmente:
docker y docker-machine requieren privilegios de root. Puede reducir los requisitos de privilegios siguiendo la documentación oficial.redcloud.py obtiene la dirección IP pública de Redcloud usando icanhazip.com.| Destino de despliegue | Estado |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Stretch | ✔️ |
python --version. Redcloud necesita Python 3+.python3 en lugar de python si está en un sistema antiguo.redcloud.py requiere que el candidato de despliegue tenga la clave pública en su .ssh/authorized_keys, y maneja la autenticación sin contraseña usando la clave pública del usuario. Esta es la configuración predeterminada para la mayoría de los flujos de trabajo de VPS.eval como se ilustró anteriormente.docker y docker-machine requieren privilegios de root. Puede reducir los requisitos de privilegios siguiendo la documentación oficial.rm -rf /opt/portainer/datapython3-distutils usando apt-get install python3-distutils en sistemas basados en Debian/Ubuntu.portainer no podrá usar la ubicación de volumen predeterminada /opt/. Para solucionarlo, abra el archivo docker-compose.yml, reemplace /opt/portainer/data:/data con una carpeta con permisos de escritura, por ejemplo: /tmp/portainer/:/data y cree el directorio /tmp/portainer antes de ejecutar Redcloud./files/./files/.
msfconsole de Metasploit a través de la interfaz web
Cualquier ayuda es apreciada. Este es un proyecto secundario, por lo que probablemente le falten algunos tornillos y tuercas. Sobre todo:
Puede alojar Redcloud en cualquier servidor Unix que ejecute Docker.
Redcloud está destinado a ser utilizado en un entorno de nube, como un VPS simple con ssh, o incluso un AWS EC2, GCP, etc...
Una amplia gama de proveedores de nube ofrecen créditos gratuitos para familiarizarse con sus servicios. Muchas listas y tutoriales cubren cómo obtener créditos de alojamiento gratuitos de los principales proveedores. Esta lista es un buen punto de partida.
En cuanto al método de despliegue, personalmente prefiero trabajar con docker-machine ya que se vuelve extremadamente fácil crear nuevas máquinas y gestionarlas una vez que tenga la configuración del driver de su proveedor de nube. Si prefiere usar ssh, asegúrese de echar un vistazo al proyecto shellz de evilsocket para gestionar sus claves y perfiles.
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
@Ullaakut por el logotipo - ¡Asegúrate de revisar su repositorio!
Por último, si deseas ver tu herramienta integrada, contáctame en Twitter. Este proyecto se mantiene en mi tiempo libre. Estate atento a la rama dev para nuevas funciones.
Redcloud fue desarrollado originalmente para facilitar el despliegue de entornos de entrenamiento para estudiantes de infosec.
Si deseas mantenerte actualizado sobre este proyecto: