CloudGoat es la herramienta de despliegue de AWS 'Vulnerable by Design' de Rhino Security Labs
CloudGoat es la herramienta de implementación en la nube "Vulnerable por Diseño" de Rhino Security Labs.
Dónde obtener ayuda: el Discord de Rhino Security Labs, o Stack Overflow
Dónde reportar problemas: https://github.com/RhinoSecurityLabs/cloudgoat/issues
Mantenido por: la comunidad de CloudGoat
CloudGoat es la herramienta de implementación en la nube "Vulnerable por Diseño" de Rhino Security Labs. Te permite perfeccionar tus habilidades de ciberseguridad en la nube creando y completando varios escenarios de estilo "captura la bandera". Cada escenario está compuesto por recursos en la nube dispuestos conjuntamente para crear una experiencia de aprendizaje estructurada. Algunos escenarios son fáciles, otros son difíciles, y muchos ofrecen múltiples caminos hacia la victoria. Como atacante, tu misión es explorar el entorno, identificar vulnerabilidades y explotarlas hasta alcanzar el(los) objetivo(s) del escenario.
A continuación se presentan nuestros principales objetivos para CloudGoat:
Antes de continuar, ¡toma nota de estas advertencias!
Advertencia #1: CloudGoat crea recursos intencionalmente vulnerables en tu cuenta. NO implementes CloudGoat en un entorno de producción ni junto a recursos sensibles.
Advertencia #2: CloudGoat solo puede administrar los recursos que crea. Si creas algún recurso por tu cuenta durante un escenario, debes eliminarlo manualmente antes de ejecutar el comando
destroy.
Linux```bash sudo apt install terraform awscli azure-cli jq -y
Mac```bash
brew install terraform awscli azure-cli jq
Para instalar CloudGoat, asegúrate de que tu sistema cumple con los requisitos anteriores y luego ejecuta los siguientes comandos:```bash pipx install cloudgoat
También puedes querer ejecutar algunos comandos de configuración rápida - te ahorrará tiempo más tarde:
Configurar para AWS - dile a CloudGoat qué perfil de AWS usar.```bash
cloudgoat config aws
Configurar para Azure - indicar a CloudGoat qué suscripción de Azure usar.```bash cloudgoat config azure
Iniciar sesión en Azure - CloudGoat utiliza la cuenta `az` activa.```bash
az login
Configurar lista blanca```bash cloudgoat config whitelist --auto
Ahora, en tu terminal, CloudGoat puede `create` una instancia de un escenario en la nube. Cuando el entorno esté listo, se creará una nueva carpeta en el directorio base del proyecto con el nombre del escenario y un ID único de escenario añadido. Dentro de esta carpeta habrá un archivo llamado `start.txt`, que contendrá todos los recursos que necesitarás para comenzar el escenario, aunque también se imprimirán en tu consola cuando el comando `create` finalice. A veces también se creará un par de claves SSH llamado `cloudgoat`/`cloudgoat.pub`.
> **Nota:** No elimines ni modifiques la carpeta de la instancia del escenario ni los archivos que contiene, ya que esto podría impedir que CloudGoat pueda gestionar los recursos de tu escenario.
A medida que avances en el escenario, no dudes en consultar el readme del escenario si necesitas orientación. Si te quedas atascado, hay hojas de trucos enlazadas al final del recorrido de cada ruta.
Cuando hayas terminado con el escenario, elimina cualquier recurso que hayas creado tú mismo (recuerda: CloudGoat solo puede gestionar los recursos que él mismo crea) y luego ejecuta el comando `destroy`. Siempre es buena idea echar un vistazo rápido a tu consola web después, por si acaso algo no se eliminó.
Puedes leer la documentación completa de los comandos de CloudGoat [aquí en la sección de la Guía de Uso](#usage-guide).
## Cómo usar la imagen Docker de CloudGoat
[](http://play-with-docker.com?stack=https://raw.githubusercontent.com/RhinoSecurityLabs/cloudgoat/master/docker_stack.yml)
### Opción 1: Ejecutar con el entrypoint predeterminado```console
docker run -it rhinosecuritylabs/cloudgoat:latest
Advertencia: Ejecutar este comando montará sus archivos de configuración local de AWS dentro del contenedor Docker cuando se inicie. Esto significa que cualquier usuario con acceso al contenedor tendrá acceso a las credenciales de AWS de su computadora anfitriona.```console docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest
## Escenarios Disponibles
(Agrupados por Dificultad)
<details open>
<summary><strong>Fácil</strong></summary>
---
### iam_enum_basics (Fácil)
`cloudgoat create iam_enum_basics`
En este escenario, comienzas con las claves de acceso de un usuario IAM de bajo nivel llamado Bob. Tu tarea consiste en realizar una enumeración exhaustiva de IAM usando la AWS CLI. Al investigar políticas administradas, políticas inline, membresías de grupos y roles asumibles, descubrirás cinco banderas distintas.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_enum_basics/README.md)
Contribuido por Tyler Ramsbey
---
### data_secrets (Fácil)
`cloudgoat create data_secrets`
En este escenario, comienzas con un usuario IAM con permisos limitados. Tu tarea es identificar una instancia EC2 mal configurada que filtra credenciales en sus Datos de Usuario, lo que te permite obtener acceso SSH. Desde allí, debes pivotar explotando el Servicio de Metadatos de Instancia (IMDS) para robar un rol, enumerar funciones Lambda para encontrar variables de entorno ocultas y, finalmente, comprometer a un usuario con acceso al objetivo del escenario: un secreto almacenado en AWS Secrets Manager.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/data_secrets/README.md)
Contribuido por Tyler Ramsbey
---
### beanstalk_secrets (Fácil)
`cloudgoat create beanstalk_secrets`
En este escenario, se te proporcionan credenciales AWS con pocos privilegios que otorgan acceso limitado a Elastic Beanstalk. Tu tarea es enumerar el entorno de Elastic Beanstalk y descubrir variables de entorno mal configuradas que contienen credenciales secundarias. Usando estas credenciales secundarias, puedes enumerar los permisos IAM para eventualmente crear una clave de acceso para un usuario administrador. Con estos privilegios de administrador, recuperas la bandera final almacenada en AWS Secrets Manager.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/beanstalk_secrets/README.md)
Contribuido por Tyler Ramsbey
---
### sns_secrets (Fácil)
`cloudgoat create sns_secrets`
En este escenario, comienzas con acceso básico a una cuenta de AWS. Necesitas enumerar tus privilegios, descubrir un Tópico SNS al que puedas suscribirte, recuperar una Clave API filtrada y, finalmente, usar la Clave API para acceder a una API Gateway y obtener la bandera final.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/sns_secrets/README.md)
Contribuido por Tyler Ramsbey
---
### iam_privesc_by_key_rotation (Fácil)
`cloudgoat create iam_privesc_by_key_rotation`
Explota permisos IAM inseguros para escalar tu acceso. Comienza con un rol que gestiona las credenciales de otros usuarios y encuentra una debilidad en la configuración para acceder al rol "admin". Usando el rol admin, recupera la bandera de Secrets Manager.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation/README.md)
Contribuido por Infrasec.sh
---
### iam_privesc_by_rollback (Fácil)
`cloudgoat create iam_privesc_by_rollback`
Comenzando con un usuario IAM muy limitado, el atacante puede revisar versiones anteriores de políticas IAM y restaurar una que otorga privilegios completos de administrador, lo que resulta en una explotación de escalada de privilegios.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md)
---
### lambda_privesc (Fácil)
`cloudgoat create lambda_privesc`
Comenzando como el usuario IAM Chris, el atacante descubre que puede asumir un rol que tiene acceso completo a Lambda y permisos para pasar roles. El atacante puede entonces realizar una escalada de privilegios usando estos nuevos permisos para obtener privilegios completos de administrador.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/lambda_privesc/README.md)
---
### sqs_flag_shop (Fácil)
`cloudgoat create sqs_flag_shop`
Primero, comienza con la página SHOP donde puedes comprar FLAG. El sitio web tiene varias páginas y puedes ver que el código fuente está expuesto. Los atacantes analizan el código para encontrar vulnerabilidades y usan sus privilegios para comprar FLAG.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/sqs_flag_shop/README.md)
</details>
<details>
<summary><strong>Medio</strong></summary>
### static (Medio)
`cloudgoat create static`
En este escenario, actúas como un atacante externo que visita un portal corporativo. Al analizar la aplicación web, identificas que carga librerías JavaScript críticas desde un bucket S3 público. Debes descubrir una mala configuración en los permisos del bucket, realizar un "Ataque a la Cadena de Suministro" sobrescribiendo la librería con código malicioso y esperar a que un bot administrador interno inicie sesión. Tu objetivo es capturar las credenciales del bot y exfiltrarlas de vuelta al bucket.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/static/README.md)
### vulnerable_cognito (Medio)
`cloudgoat create vulnerable_cognito`
En este escenario, se te presenta una página de registro e inicio de sesión con AWS Cognito en el backend. Necesitas eludir restricciones y explotar malas configuraciones en Amazon Cognito para elevar tus privilegios y obtener credenciales del Grupo de Identidades de Cognito.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/vulnerable_cognito/README.md)
Contribuido por TrustOnCloud
---
### vulnerable_lambda (Medio)
`cloudgoat create vulnerable_lambda`
En este escenario, comienzas como el usuario 'bilbo'. Asumirás un rol con más privilegios, descubrirás una función Lambda que aplica políticas a usuarios y explotarás una vulnerabilidad en la función para escalar los privilegios del usuario bilbo con el fin de buscar secretos.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/vulnerable_lambda/README.md)
---
### cloud_breach_s3 (Medio)
`cloudgoat create cloud_breach_s3`
Comenzando como un externo anónimo sin acceso ni privilegios, explota un servidor proxy inverso mal configurado para consultar el servicio de metadatos de EC2 y adquirir las claves del perfil de instancia. Luego, usa esas claves para descubrir, acceder y exfiltrar datos sensibles de un bucket S3.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/cloud_breach_s3/README.md)
---
### iam_privesc_by_attachment (Medio)
`cloudgoat create iam_privesc_by_attachment`
Comenzando con un conjunto muy limitado de permisos, el atacante puede aprovechar los permisos de adjuntar perfil de instancia para crear una nueva instancia EC2 con privilegios significativamente mayores que los suyos. Con acceso a esta nueva instancia EC2, el atacante obtiene poderes administrativos completos dentro de la cuenta objetivo y puede lograr el objetivo del escenario: eliminar el servidor cg-super-critical-security-server y allanar el camino para acciones más nefastas.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/iam_privesc_by_attachment/README.md)
---
### ec2_ssrf (Medio)
`cloudgoat create ec2_ssrf`
Comenzando como el usuario IAM Solus, el atacante descubre que tiene permisos de solo lectura en una función Lambda, donde secretos codificados le llevan a una instancia EC2 que ejecuta una aplicación web vulnerable a Server-Side Request Forgery (SSRF). Después de explotar la aplicación vulnerable y adquirir claves del servicio de metadatos de EC2, el atacante obtiene acceso a un bucket S3 privado con un conjunto de claves que le permiten invocar la función Lambda y completar el escenario.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/ec2_ssrf/README.md)
---
### ecs_takeover (Medio)
`cloudgoat create ecs_takeover`
Comenzando con acceso al sitio web externo, el atacante necesita encontrar una vulnerabilidad de ejecución remota de código. Usando la RCE, el atacante puede acceder a los recursos disponibles para el contenedor del sitio web. Abusando de varias malas configuraciones de ECS, el atacante obtiene acceso a permisos IAM que le permiten forzar a ECS a reprogramar el contenedor objetivo en una instancia comprometida.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/ecs_takeover/README.md)
---
### rds_snapshot (Medio)
`cloudgoat create rds_snapshot`
En este escenario, comenzamos con el usuario 'David'. A través de David, puedes aprovechar los privilegios para robar credenciales.
Con las credenciales robadas, un atacante puede aprovechar la vulnerabilidad de RDS para acceder a la base de datos y recuperar banderas.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/rds_snapshot/README.md)
---
### glue_privesc (Medio)
`cloudgoat create glue_privesc`
Este escenario comienza con una página web que sube un archivo CSV y realiza visualización de datos a través del servicio Glue.
El atacante roba las credenciales presentes en la página web mediante un ataque de inyección SQL y sube una shell reversa para crear un Trabajo Glue y obtener la cadena secreta.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/glue_privesc/README.md)
---
### agentcore_identity_confusion (Medio)
`cloudgoat create agentcore_identity_confusion`
En este escenario, se te proporcionan credenciales AWS que pueden gestionar los intérpretes de código de bedrock agentcore. Tu tarea es aprovechar esto para acceder a datos sensibles utilizados por otros agentes en tiempo de ejecución de agentcore. Descubre cómo obtener acceso a la bandera almacenada en una base de conocimiento de bedrock.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/agentcore_identity_confusion/README.md)
Contribuido por Sonrai Security
---
### bedrock_agent_hijacking (Medio)
`cloudgoat create bedrock_agent_hijacking`
En este escenario, se te proporcionan credenciales AWS que pueden invocar un Agente de Bedrock y actualizar funciones Lambda. Tu tarea es analizar el agente y comprender cómo accede a información en tiempo real. Introdúcete en este flujo para localizar y extraer la bandera almacenada en S3.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/bedrock_agent_hijacking/README.md)
Contribuido por Sonrai Security
</details>
<details>
<summary><strong>Difícil</strong></summary>
### rce_web_app (Difícil)
`cloudgoat create rce_web_app`
Comenzando como el usuario IAM Lara, el atacante explora un Balanceador de Carga y un bucket S3 en busca de pistas sobre vulnerabilidades, lo que lleva a un exploit de RCE en una aplicación web vulnerable que expone archivos confidenciales y culmina en el acceso al objetivo del escenario: una instancia de base de datos RDS altamente protegida.
Alternativamente, el atacante puede comenzar como el usuario IAM McDuck y enumerar buckets S3, lo que eventualmente lleva a claves SSH que otorgan acceso directo al servidor EC2 y a la base de datos más allá.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/rce_web_app/README.md)
---
### codebuild_secrets (Difícil)
`cloudgoat create codebuild_secrets`
Comenzando como el usuario IAM Solo, el atacante primero enumera y explora proyectos de CodeBuild, encontrando allí claves IAM no seguras para el usuario IAM Calrissian. Luego, operando como Calrissian, el atacante descubre una base de datos RDS. Sin poder acceder directamente al contenido de la base de datos, el atacante puede hacer un uso inteligente de la funcionalidad de instantáneas de RDS para adquirir el objetivo del escenario: un par de cadenas secretas.
Alternativamente, el atacante puede explorar los parámetros de SSM y encontrar claves SSH para una instancia EC2. Usando el servicio de metadatos, el atacante puede adquirir las claves del perfil de instancia de EC2 y adentrarse más en el entorno objetivo, eventualmente obteniendo acceso a la base de datos original y al objetivo del escenario en su interior (un par de cadenas secretas) por una ruta más indirecta.
> **Nota:** Este escenario puede requerir que crees algunos recursos de AWS, y como CloudGoat solo puede gestionar los recursos que crea, debes eliminarlos manualmente antes de ejecutar `./cloudgoat destroy`.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/codebuild_secrets/README.md)
---
### detection_evasion (Difícil)
`cloudgoat create detection_evasion`
El objetivo de este escenario es leer los valores de ambos secretos sin ser detectado. Los secretos están almacenados en Secrets Manager, y sus valores tienen el siguiente formato (cg-secret-XXXXXX-XXXXXX).
Este escenario es significativamente diferente de otros escenarios de CloudGoat. En detection_evasion, tus objetivos se describirán de manera más clara, y el desafío es completarlos sin activar alarmas. Hay más configuración involucrada en este escenario, y tomará más tiempo jugarlo (quizás quieras/necesites jugarlo varias veces).
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/detection_evasion/README.md)
---
### ecs_efs_attack (Difícil)
`cloudgoat create ecs_efs_attack`
Comenzando con acceso a la EC2 "ruse", el usuario aprovecha el perfil de instancia para backdoor el contenedor ECS en ejecución. Usando el contenedor backdoorado, el atacante puede recuperar credenciales de la API de metadatos del contenedor. Estas credenciales permiten al atacante iniciar una sesión en cualquier EC2 con las etiquetas adecuadas. El atacante usa sus permisos para cambiar las etiquetas en la EC2 Admin e inicia una sesión. Una vez en la EC2 Admin, el atacante escaneará puertos en la subred en busca de un EFS abierto para montar. Una vez montado, el atacante puede recuperar la bandera del sistema de archivos elástico.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/ecs_efs_attack/README.md)
---
### ecs_privesc_evade_protection (Medio)
`cloudgoat create ecs_privesc_evade_protection`
Un usuario comienza accediendo a un servicio web en funcionamiento dentro de un contenedor en EC2. El atacante puede explotar una vulnerabilidad del servicio web para obtener credenciales de la API de metadatos en EC2, o para controlar el contenedor. Esta credencial permite al atacante iniciar un nuevo contenedor con un rol específico y controlarlo. Basándose en esta acción, realizar una escalada de privilegios y leer FLAG en S3.
> **Nota:** Este escenario requiere tener Docker instalado localmente, ya que construye y envía una imagen de contenedor a ECR durante el despliegue.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/ecs_privesc_evade_protection/README.md)
---
### secrets_in_the_cloud (Difícil)
`cloudgoat create secrets_in_the_cloud`
Como usuario IAM con privilegios limitados, el atacante inicia su viaje examinando los recursos de AWS para descubrir pistas e información oculta. Esta investigación resulta finalmente en la adquisición de un rol que otorga acceso al objetivo principal del escenario: recuperar el secreto final de Secrets Manager.
[Visitar la página del escenario.](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/cloudgoat/scenarios/aws/secrets_in_the_cloud/README.md)
</details>
## Guía de Uso
La anatomía básica de un comando de CloudGoat es la siguiente:
> `cloudgoat [ command ] [ sub-command ] [ --arg-name ] [ arg-value ]`
Los cinco comandos principales en CloudGoat se resumen a continuación:
### create
`create [ scenario-name ]` despliega un escenario en la cuenta de AWS que elijas. También puedes ejecutar `create` sobre un escenario existente si lo deseas; CloudGoat simplemente destruirá y recreará el escenario nombrado.
> **Consejo:** puedes usar `/scenarios` en el nombre, lo que permite la finalización con tabulador nativa de bash.
Ten en cuenta que `--profile` es obligatorio por razones de seguridad (no queremos que nadie despliegue escenarios de CloudGoat accidentalmente en un entorno de producción) y CloudGoat no usará los perfiles "default" de la CLI de AWS del sistema ni los perfiles especificados como predeterminados mediante variables de entorno. Sin embargo, puedes configurar esto con `config aws` para evitar tener que proporcionarlo cada vez.
### list
`list` muestra información sobre escenarios `all`, `undeployed` o `deployed`, o incluso mucha información sobre un `[ scenario-name ]` que ya está desplegado. También puedes filtrar escenarios por plataforma en la nube: `list aws` o `list azure`.
### destroy
`destroy` apaga y elimina los recursos en la nube de un `[ scenario-name ]`, y luego mueve la carpeta de la instancia del escenario a `./trash`, por si acaso necesitas recuperar el archivo de estado de Terraform u otros archivos del escenario. También puedes especificar `all` en lugar de un nombre de escenario para destruir todos los escenarios activos.
> **Consejo:** CloudGoat solo puede gestionar los recursos que crea. Si creas algún recurso tú mismo durante un escenario, debes eliminarlo manualmente antes de ejecutar el comando `destroy`.
### config
`config` te permite gestionar varios aspectos de tu instalación de CloudGoat, especialmente la `whitelist` de IP, tu `profile` predeterminado de AWS y la finalización con tabulador mediante `argcomplete`. Vale la pena describir brevemente qué hace cada uno de estos subcomandos.
#### whitelist
CloudGoat necesita saber qué direcciones IP deben estar en la lista blanca cuando se despliegan recursos potencialmente vulnerables en la nube, y estas IPs se rastrean en un archivo `./whitelist.txt` en el directorio base del proyecto. La dirección IP que proporciones para la lista blanca no tiene que estar en formato CIDR, pero CloudGoat agregará un `/32` a cualquier IP desnuda que proporciones. Opcionalmente, puedes agregar el argumento `--auto`, y CloudGoat hará automáticamente una solicitud de red usando curl a ifconfig.co para encontrar tu dirección IP, y luego creará el archivo de lista blanca con el resultado.
#### aws
Si bien CloudGoat nunca usará los perfiles "default" de la CLI de AWS del sistema ni los perfiles especificados como predeterminados mediante variables de entorno, puedes instruir a CloudGoat para que use un perfil de AWS en particular por nombre usando el comando `config aws`. Esto te pedirá y guardará el nombre de tu perfil en un archivo `config.yml` en el directorio base del proyecto. Mientras ese archivo esté presente, CloudGoat usará el nombre de perfil listado dentro para los comandos create y destroy, en lugar de requerir el indicador `--profile`. Puedes ejecutar el comando `config aws` en cualquier momento para ver el nombre de tu perfil predeterminado de CloudGoat y validar el formato de `config.yml`. También puedes crear `config.yml` manualmente, si lo deseas, siempre que uses el formato correcto.
#### azure
Las versiones más recientes del proveedor de Azure para Terraform requieren el ID de suscripción para aplicar recursos. Si bien CloudGoat usa la misma configuración de credenciales que la utilidad `az`, se le debe decir explícitamente a qué suscripción desplegar. La configuración se realiza con `cloudgoat config azure`, y la suscripción se almacena en `config.yml` junto con la configuración de aws. También puedes crear `config.yml` manualmente, si lo deseas, siempre que uses el formato correcto.
#### argcomplete
Realmente queríamos tener finalización con tabulador nativa en CloudGoat, pero resultó ser algo difícil de lograr fuera de un REPL. Debería funcionar razonablemente bien para usuarios de Linux, y para aquellos usuarios de OSX lo suficientemente valientes como para encontrar una manera de actualizar su versión de bash a 4.2+. CloudGoat incluye y admite [la biblioteca de Python "argcomplete"](https://github.com/kislyuk/argcomplete). A continuación se proporciona un breve resumen de cómo instalar argcomplete, aunque para pasos más detallados debes consultar la documentación oficial en la [página de github](https://github.com/kislyuk/argcomplete) de la biblioteca.
1. Instala el paquete de Python argcomplete usando el archivo requirements.txt de CloudGoat: `$ pip3 install -r core/python/requirements.txt`
2. En bash, ejecuta el script de finalización de argumentos de Python global proporcionado por el paquete argcomplete: `$ activate-global-python-argcomplete`
3. Activa el script de finalización en la ubicación que imprimió el comando de activación anterior, o reinicia tu sesión de shell: `$ source [ /path/to/the/completion/script ]`
Para aquellos que no pueden o no desean configurar argcomplete, CloudGoat también admite el uso de rutas de directorio como nombres de escenario, lo que significa que la finalización con tabulador funcionará para los nombres de escenario. Simplemente usa `/scenario/[ scenario-name ]` o `./[ scenarioinstance-name ]` y tu shell debería hacer el resto.
### help
`help` proporciona ayuda contextual sobre los comandos. `help` puede ir antes o después del comando en cuestión, por lo que está siempre ahí cuando lo necesites. A continuación se muestran algunos ejemplos:* `cloudgoat create help`
* `cloudgoat destroy help`
* `cloudgoat list help`
* `cloudgoat config help`
Otro uso destacable: `cloudgoat [ scenario-name ] help` permite imprimir en la consola un breve resumen del escenario, según lo definido por su autor.
## Solicitudes de funciones e informes de errores
Si tienes una solicitud de función o un error que reportar, por favor [envíalos aquí](https://github.com/RhinoSecurityLabs/cloudgoat/issues/new).
Para errores, asegúrate de incluir una descripción suficiente para reproducir el error encontrado, incluyendo trazas y pasos de reproducción, y verifica que no haya otros informes de tu error antes de presentar uno nuevo.
Para funciones, aplica lo mismo: sé específico en tu solicitud y asegúrate de que nadie más haya solicitado la misma función.
## Directrices de contribución
Las contribuciones a CloudGoat son muy apreciadas. Si deseas ayudar a mejorar el proyecto, sigue leyendo.
1. **Creación de un nuevo escenario**:
- Hemos proporcionado una plantilla de escenario para ayudarte a comenzar rápidamente. La plantilla incluye la estructura básica y los archivos necesarios para un escenario de CloudGoat. Puedes encontrar la plantilla de escenario [aquí](https://github.com/rhinosecuritylabs/cloudgoat/blob/master/scenarios/scenario_template).
- **Pasos para crear un nuevo escenario**:
- **Copiar la plantilla**: Copia el contenido de la plantilla de escenario a un nuevo directorio con el nombre de tu escenario.
- **Modificar la plantilla**: Reemplaza el contenido de marcador de posición en la plantilla con los detalles de tu nuevo escenario.
- **Probar el escenario**: Asegúrate de que tu escenario funcione como se espera, probándolo a fondo.
2. **Estándares de codificación**:
- **Estilo de código**: Sigue el estilo de código existente en el proyecto. La consistencia es clave.
- **Comentarios**: Añade comentarios a tu código cuando sea necesario para explicar lógica compleja o decisiones importantes.
- **Documentación**: Actualiza el README.md y otra documentación relevante para incluir detalles sobre tu nuevo escenario o cambios.
3. **Lista blanca**:
- Al crear o modificar escenarios, ten en cuenta lo siguiente:
- **Lista blanca**: Asegúrate de que las reglas del grupo de seguridad y otros controles de acceso estén configurados para incluir solo la IP de la configuración de CloudGoat.
- **Revisión**: Revisa dos veces tus configuraciones en busca de recursos públicos potencialmente vulnerables antes de contribuir (es decir, no crees EC2 vulnerables accesibles desde internet).
4. **Estilo de código Python**:
- El código Python en CloudGoat debe seguir generalmente las convenciones de estilo de Python, favoreciendo la legibilidad y el mantenimiento por encima de todo.
- Sigue buenas prácticas de git: usa pull requests, prefiere ramas de características, siempre escribe mensajes de commit claros.
- CloudGoat utiliza `black` y `flake8` - linters de sintaxis y estilo de Python. Asegúrate de ejecutar tanto `flake8` como `black` en todos los archivos Python en `core/python/` y en `cloudgoat.py` antes de confirmar código. Las decisiones de `black` tienen prioridad sobre las de `flake8`. Ambos están comentados en el archivo `core/python/requirements.txt` ya que los usuarios normales no los necesitan.
5. **Licencia**:
- El código de CloudGoat debe usar siempre la licencia BSD de 3 cláusulas.
Y por último, ¡gracias por contribuir!
## Registro de cambios
- **24/06/19:** ¡CloudGoat 2.0 ha sido lanzado!
## Aviso legal
CloudGoat es un software que se proporciona sin ninguna garantía de ningún tipo. Al usar CloudGoat, asumes toda la responsabilidad por cualquier resultado que se derive de ello.