
CloudGoat — это инструмент развертывания AWS «Vulnerable by Design» от Rhino Security Labs
CloudGoat — это инструмент развертывания в облаке "Уязвимый по дизайну" от Rhino Security Labs.
Где получить помощь: Дискорд Rhino Security Labs или Stack Overflow
Куда сообщать об ошибках: https://github.com/RhinoSecurityLabs/cloudgoat/issues
Поддерживается: Сообществом CloudGoat
CloudGoat — это инструмент развертывания в облаке "Уязвимый по дизайну" от Rhino Security Labs. Он позволяет оттачивать навыки кибербезопасности в облаке, создавая и проходя несколько сценариев в стиле "захват флага". Каждый сценарий состоит из облачных ресурсов, объединенных для создания структурированного учебного опыта. Некоторые сценарии просты, другие сложны, и многие предлагают несколько путей к победе. Ваша задача, как атакующего, — исследовать среду, выявлять уязвимости и эксплуатировать их для достижения цели (целей) сценария.
Ниже перечислены основные цели CloudGoat:
Прежде чем продолжить, обратите внимание на следующие предупреждения!
Предупреждение №1: CloudGoat создает намеренно уязвимые ресурсы в вашей учетной записи. НЕ развертывайте CloudGoat в рабочей среде или рядом с конфиденциальными ресурсами.
Предупреждение №2: CloudGoat может управлять только теми ресурсами, которые создает сам. Если вы создаете какие-либо ресурсы самостоятельно в ходе сценария, вам следует удалить их вручную перед выполнением команды
destroy.
Linux```bash sudo apt install terraform awscli azure-cli jq -y
Mac```bash
brew install terraform awscli azure-cli jq
Чтобы установить CloudGoat, убедитесь, что ваша система соответствует указанным выше требованиям, а затем выполните следующие команды:```bash pipx install cloudgoat
Возможно, вы также захотите выполнить несколько быстрых команд настройки - это сэкономит вам время в дальнейшем:
Настройка для AWS - укажите CloudGoat, какой профиль AWS использовать.```bash
cloudgoat config aws
Настройка для Azure - укажите CloudGoat, какую подписку Azure использовать.```bash cloudgoat config azure
Войдите в Azure — CloudGoat использует активную учетную запись `az`.```bash
az login
Настройка белого списка```bash cloudgoat config whitelist --auto
Теперь, по вашей команде, CloudGoat может `create` экземпляр сценария в облаке. Когда окружение будет готово, в корневом каталоге проекта будет создана новая папка, названная в честь сценария с добавлением уникального идентификатора сценария. Внутри этой папки будет файл `start.txt`, который будет содержать все ресурсы, необходимые для начала сценария, хотя они также выводятся на консоль после выполнения команды `create`. Иногда также будет создана пара SSH-ключей с именами `cloudgoat`/`cloudgoat.pub`.
> **Примечание:** Не удаляйте и не изменяйте папку экземпляра сценария или файлы внутри нее, так как это может помешать CloudGoat управлять ресурсами вашего сценария.
По мере прохождения сценария не стесняйтесь обращаться к readme сценария, если вам нужно направление. Если вы застряли, внизу каждого описания маршрута есть ссылки на шпаргалки.
Когда вы закончите сценарий, удалите все ресурсы, которые вы создали сами (помните: CloudGoat может управлять только теми ресурсами, которые он создает), а затем выполните команду `destroy`. После этого всегда полезно быстро взглянуть на вашу веб-консоль — на случай, если что-то не удалилось.
Вы можете прочитать полную документацию по командам CloudGoat [здесь, в разделе Руководство по использованию](#usage-guide).
## Как использовать Docker-образ CloudGoat
[](http://play-with-docker.com?stack=https://raw.githubusercontent.com/RhinoSecurityLabs/cloudgoat/master/docker_stack.yml)
### Вариант 1: Запуск с точкой входа по умолчанию```console
docker run -it rhinosecuritylabs/cloudgoat:latest
Предупреждение: Запуск этой команды смонтирует ваши локальные файлы конфигурации AWS в контейнер Docker при его запуске. Это означает, что любой пользователь, имеющий доступ к контейнеру, получит доступ к учетным данным AWS вашего хост-компьютера.```console docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest
## Доступные сценарии
(Сгруппированы по сложности)
<details open>
<summary><strong>Лёгкие</strong></summary>
---
### iam_enum_basics (Лёгкий)
`cloudgoat create iam_enum_basics`
В этом сценарии вы начинаете с ключами доступа для низкоуровневого пользователя IAM по имени Bob. Ваша задача — выполнить тщательное перечисление IAM с помощью AWS CLI. Исследуя управляемые политики, встроенные политики, членство в группах и assumable роли, вы найдете пять различных флагов.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_enum_basics/README.md)
Предоставлено Tyler Ramsbey
---
### data_secrets (Лёгкий)
`cloudgoat create data_secrets`
В этом сценарии вы начинаете с пользователем IAM, имеющим ограниченные разрешения. Ваша задача — определить неверно настроенный экземпляр EC2, который раскрывает учетные данные в своих User Data, что позволит вам получить SSH-доступ. Оттуда вам нужно переместиться, используя Службу метаданных экземпляра (IMDS) для кражи роли, перечислить функции Lambda, чтобы найти скрытые переменные окружения, и, наконец, скомпрометировать пользователя, имеющего доступ к цели сценария — секрету, хранящемуся в AWS Secrets Manager.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/data_secrets/README.md)
Предоставлено Tyler Ramsbey
---
### beanstalk_secrets (Лёгкий)
`cloudgoat create beanstalk_secrets`
В этом сценарии вам предоставляются низкопривилегированные учетные данные AWS, которые дают ограниченный доступ к Elastic Beanstalk. Ваша задача — перечислить окружение Elastic Beanstalk и обнаружить неверно настроенные переменные окружения, содержащие вторичные учетные данные. Используя эти вторичные учетные данные, вы можете перечислить разрешения IAM, чтобы в конечном итоге создать ключ доступа для административного пользователя. С этими правами администратора вы извлекаете финальный флаг, хранящийся в AWS Secrets Manager.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/beanstalk_secrets/README.md)
Предоставлено Tyler Ramsbey
---
### sns_secrets (Лёгкий)
`cloudgoat create sns_secrets`
В этом сценарии вы начинаете с базовым доступом к учетной записи AWS. Вам нужно перечислить свои привилегии, обнаружить тему SNS, на которую можно подписаться, извлечь утекший API-ключ и, наконец, использовать этот API-ключ для доступа к API Gateway для получения финального флага.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/sns_secrets/README.md)
Предоставлено Tyler Ramsbey
---
### iam_privesc_by_key_rotation (Лёгкий)
`cloudgoat create iam_privesc_by_key_rotation`
Используйте небезопасные разрешения IAM для повышения своего доступа. Начните с роли, которая управляет учетными данными других пользователей, и найдите уязвимость в конфигурации для доступа к роли "admin". Используя роль admin, извлеките флаг из Secrets Manager.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation/README.md)
Предоставлено Infrasec.sh
---
### iam_privesc_by_rollback (Лёгкий)
`cloudgoat create iam_privesc_by_rollback`
Начиная с сильно ограниченного пользователя IAM, злоумышленник может просмотреть предыдущие версии политик IAM и восстановить ту, которая предоставляет полные права администратора, что приводит к эксплуатации повышения привилегий.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md)
---
### lambda_privesc (Лёгкий)
`cloudgoat create lambda_privesc`
Начиная с пользователя IAM Chris, злоумышленник обнаруживает, что может принять роль, имеющую полный доступ к Lambda и разрешения на передачу ролей. Злоумышленник может затем выполнить повышение привилегий, используя эти новые разрешения, чтобы получить полные права администратора.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/lambda_privesc/README.md)
---
### sqs_flag_shop (Лёгкий)
`cloudgoat create sqs_flag_shop`
Сначала начните со страницы SHOP, где вы можете купить FLAG. Веб-сайт имеет несколько страниц, и вы можете видеть, что исходный код раскрыт. Злоумышленники анализируют код, чтобы найти уязвимости, и используют свои привилегии для покупки FLAG.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/sqs_flag_shop/README.md)
</details>
<details>
<summary><strong>Средние</strong></summary>
### static (Средний)
`cloudgoat create static`
В этом сценарии вы действуете как внешний злоумышленник, посещающий корпоративный портал. Анализируя веб-приложение, вы определяете, что оно загружает критические библиотеки JavaScript из публичного S3-бакета. Вы должны обнаружить неправильную конфигурацию разрешений бакета, выполнить "атаку на цепочку поставок", перезаписав библиотеку вредоносным кодом, и дождаться, пока внутренний бот-администратор войдет в систему. Ваша цель — захватить учетные данные бота и выкрасть их обратно в бакет.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/static/README.md)
### vulnerable_cognito (Средний)
`cloudgoat create vulnerable_cognito`
В этом сценарии вам предоставляется страница регистрации и входа с AWS Cognito на бэкенде. Вам нужно обойти ограничения и использовать неправильные конфигурации в Amazon Cognito, чтобы повысить свои привилегии и получить учетные данные пула идентификации Cognito.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/vulnerable_cognito/README.md)
Предоставлено TrustOnCloud
---
### vulnerable_lambda (Средний)
`cloudgoat create vulnerable_lambda`
В этом сценарии вы начинаете как пользователь 'bilbo'. Вы примете роль с большими привилегиями, обнаружите функцию Lambda, которая применяет политики к пользователям, и воспользуетесь уязвимостью в функции для повышения привилегий пользователя bilbo, чтобы найти секреты.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/vulnerable_lambda/README.md)
---
### cloud_breach_s3 (Средний)
`cloudgoat create cloud_breach_s3`
Начиная как анонимный посторонний без доступа и привилегий, используйте неправильно настроенный обратный прокси-сервер для запроса к сервису метаданных EC2 и получения ключей профиля экземпляра. Затем используйте эти ключи, чтобы обнаружить, получить доступ и выкрасть конфиденциальные данные из S3-бакета.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/cloud_breach_s3/README.md)
---
### iam_privesc_by_attachment (Средний)
`cloudgoat create iam_privesc_by_attachment`
Начиная с очень ограниченного набора разрешений, злоумышленник может использовать разрешения на прикрепление профиля экземпляра, чтобы создать новый экземпляр EC2 со значительно большими привилегиями, чем у него самого. Получив доступ к этому новому экземпляру EC2, злоумышленник получает полные административные права в целевой учетной записи и может выполнить цель сценария — удалить cg-super-critical-security-server и подготовить почву для дальнейших злонамеренных действий.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/iam_privesc_by_attachment/README.md)
---
### ec2_ssrf (Средний)
`cloudgoat create ec2_ssrf`
Начиная с пользователя IAM Solus, злоумышленник обнаруживает, что у него есть разрешения ReadOnly на функцию Lambda, где жестко закодированные секреты ведут его к экземпляру EC2, на котором работает веб-приложение, уязвимое к подделке серверных запросов (SSRF). После эксплуатации уязвимого приложения и получения ключей из сервиса метаданных EC2 злоумышленник получает доступ к частному S3-бакету с набором ключей, которые позволяют ему вызвать функцию Lambda и завершить сценарий.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ec2_ssrf/README.md)
---
### ecs_takeover (Средний)
`cloudgoat create ecs_takeover`
Начиная с доступа к внешнему веб-сайту, злоумышленнику нужно найти уязвимость удаленного выполнения кода. Используя RCE, злоумышленник может получить доступ к ресурсам, доступным контейнеру веб-сайта. Злоупотребляя несколькими неправильными конфигурациями ECS, злоумышленник получает доступ к разрешениям IAM, которые позволяют ему заставить ECS перепланировать целевой контейнер на скомпрометированный экземпляр.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_takeover/README.md)
---
### rds_snapshot (Средний)
`cloudgoat create rds_snapshot`
В этом сценарии мы начинаем с пользователя 'David'. Через David вы можете использовать привилегии для кражи учетных данных. С украденными учетными данными злоумышленник может воспользоваться уязвимостью RDS для доступа к базе данных и извлечения флагов.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/rds_snapshot/README.md)
---
### glue_privesc (Средний)
`cloudgoat create glue_privesc`
Этот сценарий начинается с веб-страницы, которая загружает CSV-файл и выполняет визуализацию данных через сервис Glue. Злоумышленник крадет учетные данные, присутствующие на веб-странице, с помощью атаки SQL-инъекции и загружает обратную оболочку для создания задания Glue, чтобы получить секретную строку.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/glue_privesc/README.md)
---
### agentcore_identity_confusion (Средний)
`cloudgoat create agentcore_identity_confusion`
В этом сценарии вам предоставляются учетные данные AWS, которые могут управлять интерпретаторами кода bedrock agentcore. Ваша задача — использовать это для получения доступа к конфиденциальным данным, используемым другими агентами времени выполнения agentcore. Выясните, как получить доступ к флагу, хранящемуся в базе знаний bedrock.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/agentcore_identity_confusion/README.md)
Предоставлено Sonrai Security
---
### bedrock_agent_hijacking (Средний)
`cloudgoat create bedrock_agent_hijacking`
В этом сценарии вам предоставляются учетные данные AWS, которые могут вызывать агента Bedrock и обновлять функции Lambda. Ваша задача — проанализировать агента и понять, как он получает информацию в реальном времени. Встройтесь в этот поток, чтобы найти и извлечь флаг, хранящийся в S3.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/bedrock_agent_hijacking/README.md)
Предоставлено Sonrai Security
</details>
<details>
<summary><strong>Сложные</strong></summary>
### rce_web_app (Сложный)
`cloudgoat create rce_web_app`
Начиная с пользователя IAM Lara, злоумышленник исследует балансировщик нагрузки и S3-бакет в поисках улик к уязвимостям, что приводит к эксплуатации RCE на уязвимом веб-приложении, которое раскрывает конфиденциальные файлы и в конечном итоге дает доступ к цели сценария — высокозащищенному экземпляру базы данных RDS.
В качестве альтернативы злоумышленник может начать как пользователь IAM McDuck и перечислять S3-бакеты, что в конечном итоге приводит к SSH-ключам, которые предоставляют прямой доступ к серверу EC2 и базе данных за ним.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/rce_web_app/README.md)
---
### codebuild_secrets (Сложный)
`cloudgoat create codebuild_secrets`
Начиная с пользователя IAM Solo, злоумышленник сначала перечисляет и исследует проекты CodeBuild, находя там незащищенные ключи IAM для пользователя IAM Calrissian. Затем, действуя как Calrissian, злоумышленник обнаруживает базу данных RDS. Не имея возможности напрямую получить доступ к содержимому базы данных, злоумышленник может умело использовать функциональность снимков RDS для получения цели сценария — пары секретных строк.
В качестве альтернативы злоумышленник может исследовать параметры SSM и найти SSH-ключи к экземпляру EC2. Используя сервис метаданных, злоумышленник может получить ключи профиля экземпляра EC2 и проникнуть глубже в целевую среду, в конечном итоге получив доступ к исходной базе данных и цели сценария внутри (паре секретных строк) более окружным путем.
> **Примечание:** Этот сценарий может потребовать создания некоторых ресурсов AWS, и, поскольку CloudGoat может управлять только теми ресурсами, которые создает сам, вы должны удалить их вручную перед запуском `./cloudgoat destroy`.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/codebuild_secrets/README.md)
---
### detection_evasion (Сложный)
`cloudgoat create detection_evasion`
Цель этого сценария — прочитать значения обоих секретов, не будучи обнаруженным. Секреты хранятся в Secrets Manager, и их значения имеют следующий формат (cg-secret-XXXXXX-XXXXXX).
Этот сценарий значительно отличается от других сценариев CloudGoat. В detection_evasion ваши цели будут описаны более четко, и задача состоит в том, чтобы выполнить их, не вызвав тревог. В этом сценарии больше этапов настройки, и на его прохождение уйдет больше времени (возможно, вы захотите/будете вынуждены пройти его несколько раз).
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/detection_evasion/README.md)
---
### ecs_efs_attack (Сложный)
`cloudgoat create ecs_efs_attack`
Начиная с доступа к экземпляру EC2 "ruse", пользователь использует профиль экземпляра для бэкдоринга запущенного контейнера ECS. Используя бэкдорированный контейнер, злоумышленник может извлечь учетные данные из API метаданных контейнера. Эти учетные данные позволяют злоумышленнику начать сеанс на любом EC2 с установленными соответствующими тегами. Злоумышленник использует свои разрешения для изменения тегов на экземпляре Admin EC2 и начинает сеанс. Попав на Admin EC2, злоумышленник выполнит сканирование портов подсети в поисках открытой EFS для монтирования. После монтирования злоумышленник может извлечь флаг из эластичной файловой системы.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_efs_attack/README.md)
---
### ecs_privesc_evade_protection (Средний)
`cloudgoat create ecs_privesc_evade_protection`
Пользователь начинает с доступа к работающему веб-сервису к контейнеру внутри EC2. Злоумышленник может использовать уязвимость веб-сервиса для получения учетных данных из API метаданных в EC2 или для управления контейнером. Эти учетные данные позволяют злоумышленнику запустить новый контейнер с определенной ролью и управлять им. На основе этого действия выполните повышение привилегий и прочитайте FLAG в S3.
> **Примечание:** Для этого сценария требуется, чтобы Docker был установлен локально, так как он собирает и отправляет образ контейнера в ECR во время развертывания.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/ecs_privesc_evade_protection/README.md)
---
### secrets_in_the_cloud (Сложный)
`cloudgoat create secrets_in_the_cloud`
Будучи пользователем IAM с ограниченными привилегиями, злоумышленник начинает свой путь с изучения ресурсов AWS для поиска улик и скрытой информации. Это расследование в конечном итоге приводит к получению роли, которая предоставляет доступ к основной цели сценария: извлечению финального секрета из Secrets Manager.
[Посмотреть страницу сценария.](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/cloudgoat/scenarios/aws/secrets_in_the_cloud/README.md)
</details>
## Руководство по использованию
Основная структура команды CloudGoat выглядит следующим образом:
> `cloudgoat [ command ] [ sub-command ] [ --arg-name ] [ arg-value ]`
Пять основных команд в CloudGoat описаны ниже:
### create
`create [ scenario-name ]` развертывает сценарий в учетной записи AWS по вашему выбору. Вы также можете выполнить `create` для уже существующего сценария, если хотите — CloudGoat просто уничтожит и воссоздаст указанный сценарий.
> **Совет:** вы можете использовать `/scenarios` в имени, что позволяет использовать встроенное автодополнение bash.
Обратите внимание, что `--profile` обязателен по соображениям безопасности — мы не хотим, чтобы кто-то случайно развернул сценарии CloudGoat в рабочей среде — и CloudGoat не будет использовать профили AWS CLI "default" системы или профили, указанные по умолчанию через переменные окружения. Однако вы можете установить это с помощью `config aws`, чтобы не указывать его каждый раз.
### list
`list` показывает некоторую информацию о сценариях `all` (все), `undeployed` (неразвернутые) или `deployed` (развернутые), а также много информации о `[ scenario-name ]`, который уже развернут. Вы также можете фильтровать сценарии по облачной платформе: `list aws` или `list azure`.
### destroy
`destroy` завершает работу и удаляет облачные ресурсы сценария `[ scenario-name ]`, а затем перемещает папку экземпляра сценария в `./trash` — на случай, если вам понадобится восстановить файл состояния Terraform или другие файлы сценария. Вы также можете указать `all` вместо имени сценария, чтобы уничтожить все активные сценарии.
> **Совет:** CloudGoat может управлять только теми ресурсами, которые создает сам. Если вы создадите какие-либо ресурсы самостоятельно в ходе сценария, вам следует удалить их вручную перед выполнением команды `destroy`.
### config
`config` позволяет управлять различными аспектами вашей установки CloudGoat, в частности IP-`whitelist` (белый список), профилем AWS по умолчанию `profile` и автодополнением через `argcomplete`. Стоит кратко описать, что делает каждая из этих подкоманд.
#### whitelist
CloudGoat необходимо знать, какие IP-адреса следует заносить в белый список при развертывании потенциально уязвимых ресурсов в облаке, и эти IP-адреса отслеживаются в файле `./whitelist.txt` в корневом каталоге проекта. IP-адрес, который вы указываете для внесения в белый список, не обязательно должен быть в формате CIDR, но CloudGoat добавит `/32` к любым «голым» IP-адресам, которые вы укажете. При желании вы можете добавить аргумент `--auto`, и CloudGoat автоматически выполнит сетевой запрос, используя curl к ifconfig.co, чтобы найти ваш IP-адрес, и затем создаст файл белого списка с результатом.
#### aws
Хотя CloudGoat никогда не будет использовать профили AWS CLI "default" системы или профили, указанные по умолчанию через переменные окружения, вы можете указать CloudGoat использовать определенный профиль AWS по имени с помощью команды `config aws`. Это запросит и сохранит имя вашего профиля в файле `config.yml` в корневом каталоге проекта. Пока этот файл присутствует, CloudGoat будет использовать указанное в нем имя профиля для команд create и destroy, вместо того чтобы требовать флаг `--profile`. Вы можете выполнить команду `config aws` в любое время, чтобы просмотреть имя вашего профиля по умолчанию для CloudGoat и проверить формат файла `config.yml`. Вы также можете создать `config.yml` вручную, если хотите, при условии, что используете правильный формат.
#### azure
Новые версии провайдера Azure для Terraform требуют идентификатора подписки для применения ресурсов. Хотя CloudGoat использует ту же конфигурацию учетных данных, что и утилита `az`, CloudGoat должен быть явно указан, в какую подписку развертывать. Настройка выполняется с помощью `cloudgoat config azure`, и подписка сохраняется в `config.yml` рядом с конфигурацией aws. Вы также можете создать `config.yml` вручную, если хотите, при условии, что используете правильный формат.
#### argcomplete
Мы очень хотели иметь встроенное автодополнение в CloudGoat, но, как оказалось, это было довольно сложно реализовать вне REPL. Оно должно достаточно хорошо работать для пользователей Linux, а также для тех смелых пользователей OSX, которые найдут способ обновить свою версию bash до 4.2+. CloudGoat включает и поддерживает [библиотеку Python "argcomplete"](https://github.com/kislyuk/argcomplete). Краткое описание того, как установить argcomplete, приведено ниже, хотя для получения более подробных инструкций вам следует обратиться к официальной документации на [странице библиотеки на GitHub](https://github.com/kislyuk/argcomplete).
1. Установите пакет Python argcomplete, используя файл requirements.txt CloudGoat: `$ pip3 install -r core/python/requirements.txt`
2. В bash выполните глобальный скрипт автодополнения Python, предоставляемый пакетом argcomplete: `$ activate-global-python-argcomplete`
3. Выполните скрипт автодополнения из расположения, указанного предыдущей командой активации, или перезапустите сеанс оболочки: `$ source [ /path/to/the/completion/script ]`
Для тех, кто не может или не хочет настраивать argcomplete, CloudGoat также поддерживает использование путей к каталогам в качестве имен сценариев, что означает, что автодополнение будет работать для имен сценариев. Просто используйте `/scenario/[ scenario-name ]` или `./[ scenariinstance-name ]`, и ваша оболочка сделает все остальное.
### help
`help` предоставляет контекстную справку по командам. `help` можно указывать как до, так и после соответствующей команды, поэтому он всегда рядом, когда нужен. Ниже приведены некоторые примеры:* `cloudgoat create help`
* `cloudgoat destroy help`
* `cloudgoat list help`
* `cloudgoat config help`
Ещё одно примечательное использование: `cloudgoat [ scenario-name ] help` можно применить для вывода в консоль краткого описания сценария, заданного его автором.
## Запросы функций и сообщения об ошибках
Если у вас есть запрос функции или сообщение об ошибке, пожалуйста, [отправьте их здесь](https://github.com/RhinoSecurityLabs/cloudgoat/issues/new).
Для ошибок, пожалуйста, убедитесь, что вы включили описание, достаточное для воспроизведения найденной ошибки, включая трассировки и шаги воспроизведения, а также проверьте наличие других сообщений о вашей ошибке перед созданием нового отчёта.
Для функций применимо то же самое! Будьте конкретны в вашем запросе и убедитесь, что кто-то другой ещё не запросил ту же функцию.
## Рекомендации по внесению вклада
Вклад в CloudGoat очень ценится. Если вы хотите помочь сделать проект лучше, читайте дальше.
1. **Создание нового сценария**:
- Мы предоставили шаблон сценария, чтобы помочь вам быстро начать. Шаблон включает базовую структуру и необходимые файлы для сценария CloudGoat. Вы можете найти шаблон сценария [здесь](https://github.com/rhinosecuritylabs/cloudgoat/blob/HEAD/scenarios/scenario_template).
- **Шаги по созданию нового сценария**:
- **Скопируйте шаблон**: Скопируйте содержимое шаблона сценария в новую директорию, названную в честь вашего сценария.
- **Измените шаблон**: Замените содержимое-заполнитель в шаблоне на конкретные детали вашего нового сценария.
- **Протестируйте сценарий**: Убедитесь, что ваш сценарий работает как ожидается, тщательно протестировав его.
2. **Стандарты кодирования**:
- **Стиль кода**: Следуйте существующему стилю кода в проекте. Постоянство — ключ.
- **Комментарии**: Добавляйте комментарии к вашему коду, где необходимо, чтобы объяснить сложную логику или важные решения.
- **Документация**: Обновите README.md и другую соответствующую документацию, включив подробности о вашем новом сценарии или изменениях.
3. **Вайтлистинг**:
- При создании или изменении сценариев имейте в виду следующее:
- **Вайтлистинг**: Убедитесь, что правила групп безопасности и другие средства контроля доступа настроены на вайтлистинг только IP-адреса из конфигурации CloudGoat.
- **Проверка**: Перепроверьте ваши конфигурации на наличие потенциально уязвимых публичных ресурсов перед внесением вклада (например, не создавайте уязвимые EC2, доступные из интернета).
4. **Стиль кода Python**:
- Код Python в CloudGoat в целом должен следовать стилевым соглашениям Python, отдавая предпочтение читаемости и поддерживаемости превыше всего.
- Следуйте хорошим практикам git: используйте pull request'ы, предпочитайте feature-ветки, всегда пишите понятные сообщения коммитов.
- CloudGoat использует `black` и `flake8` — линтеры синтаксиса и стиля Python. Убедитесь, что оба `flake8` и `black` запущены на всех Python-файлах в `core/python/` и на `cloudgoat.py` перед коммитом кода. Решения `black` имеют приоритет над решениями `flake8`. Оба эти инструмента закомментированы в файле `core/python/requirements.txt`, так как обычным пользователям они не нужны.
5. **Лицензирование**:
- Код CloudGoat всегда должен использовать лицензию BSD 3-Clause.
И наконец, спасибо за ваш вклад!
## Журнал изменений
- **6/24/19:** CloudGoat 2.0 выпущен!
## Отказ от ответственности
CloudGoat — это программное обеспечение, которое предоставляется без каких-либо гарантий. Используя CloudGoat, вы берёте на себя полную ответственность за любые и все результаты, которые могут возникнуть.