
Создайте собственную намеренно уязвимую площадку для тестирования на проникновение в AWS

Начать взлом: [CloudFoxable](https://cloudfoxable.bishopfox.com)
Читайте блог для получения дополнительных сведений: [Представляем CloudFoxable: геймифицированная песочница для взлома облака](https://bishopfox.com/blog/cloudfoxable-gamified-cloud-hacking-sandbox)
# Предыстория
CloudFox помогает пентестерам и специалистам по безопасности находить эксплуатируемые пути атак в облачной инфраструктуре. Но что, если вы хотите находить и эксплуатировать сервисы, которых ещё нет в вашем текущем окружении? Что, если у вас нет доступа к корпоративной среде AWS?
Представляем CloudFoxable — намеренно уязвимую среду AWS, созданную специально для демонстрации возможностей CloudFox и помощи в более эффективном поиске скрытых путей атак. Черпая вдохновение из [CloudGoat](https://github.com/RhinoSecurityLabs/cloudgoat), [flaws.cloud](https://flaws.cloud/), [flaws2.cloud](https://flaws2.cloud/) и [Metasploitable 1-3](https://github.com/rapid7/metasploitable3), CloudFoxable предоставляет широкий набор флагов и путей атак в формате CTF.
Как и [CloudGoat](https://github.com/RhinoSecurityLabs/cloudgoat) и [IAM-Vulnerable](https://github.com/BishopFox/iam-vulnerable), CloudFoxable разворачивает намеренно уязвимые ресурсы AWS в управляемом пользователем аккаунте-песочнице, чтобы пользователи учились выявлять и эксплуатировать облачные уязвимости. Однако, как и в [flaws.cloud](https://flaws.cloud/), ваше взаимодействие в большей степени веб-ориентировано и сопровождается подсказками.
* Всего заданий: 18
# Настройка Terraform и базовое использование
CloudFoxable использует **Terraform** для развертывания и управления намеренно уязвимой инфраструктурой AWS. В этом разделе приведены минимально необходимые инструкции по установке Terraform, а также по развертыванию, изменению и удалению ресурсов CloudFoxable.
<details>
<summary>Нажмите, чтобы развернуть</summary>
### Установка Terraform
Terraform должен быть установлен локально перед развертыванием CloudFoxable.
Следуйте официальному руководству по установке HashiCorp для вашей операционной системы:
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
Проверьте установку:
```bash
terraform version
```
При успешной установке будет выведена версия Terraform.
### Предварительные требования
Перед запуском Terraform:
* У вас должен быть доступ к AWS-аккаунту, которым вы управляете.
* Учетные данные AWS должны быть настроены локально (например, через `aws configure`, переменные окружения или предполагаемую роль).
* Вы должны ожидать, что Terraform будет создавать и уничтожать ресурсы AWS в этом аккаунте.
**Важно:** CloudFoxable развертывает намеренно уязвимую инфраструктуру.
Не развертывайте это в производственных, общих или корпоративных AWS-аккаунтах.
### Рабочий процесс Terraform
Все команды Terraform следует запускать из следующего каталога:
```bash
cd cloudfoxable/aws
```
#### Инициализация Terraform
Инициализируйте рабочий каталог и загрузите необходимые провайдеры:
```bash
terraform init
```
Это требуется один раз для каждого рабочего пространства (или при изменении конфигурации провайдера).
#### Предварительный просмотр изменений (необязательно)
Чтобы просмотреть, что Terraform создаст, изменит или уничтожит:
```bash
terraform plan
```
#### Развертывание CloudFoxable
Для развертывания включенных в данный момент заданий:
```bash
terraform apply
```
Введите `yes` при появлении запроса на подтверждение.
#### Уничтожение всех ресурсов (очистка)
Чтобы удалить все ресурсы, созданные CloudFoxable:
```bash
terraform destroy
```
Подтвердите, введя `yes` при появлении запроса.
### Часто используемые команды Terraform
| Команда | Описание |
| ------------------- | ------------------------------------ |
| `terraform init` | Инициализирует проект Terraform |
| `terraform plan` | Показывает предлагаемые изменения инфраструктуры |
| `terraform apply` | Создает или обновляет ресурсы |
| `terraform destroy` | Удаляет все развернутые ресурсы |
</details>
# Модульный подход
Как и в IAM-Vulnerable, некоторые задания включены по умолчанию (те, которые почти не требуют затрат), а другие отключены по умолчанию (те, которые требуют затрат при развертывании). Таким образом, вы можете включать нужные модули по мере необходимости. Впрочем, механизм включения/отключения заданий немного отличается от IAM-Vulnerable.
На cloudfoxable.bishopfox.com каждое задание сообщит вам, нужно ли вносить какие-либо изменения в Terraform (то есть развертывать что-то) для выполнения задания. Для этого нужно отредактировать terraform.tfvars и при необходимости изменить флаг enabled с false на true.
Вот пример:
```
############################
# Enabled/Disabled Challenges
############################
# Always on (Low or No cost)
challenge_foo_enabled = true
challenge_bar_enabled = true
challenge_alice_enabled = true
# Enable as needed (These challenges incur cost)
challenge_bob_enabled = false
challenge_mallory_enabled = false
```
Чтобы включить задание mallory, просто обновите следующую строку:
```
challenge_mallory_enabled = true
```
После включения задания необходимо повторно запустить terraform apply:
```
terraform apply
```
Теперь вы развернули задание mallory.
**Очистка**
В любой момент, когда вы захотите удалить все ресурсы, созданные CloudFoxable, вы можете выполнить следующие команды:
1. `cd cloudfoxable/aws`
1. `terraform destroy`
# Сборка с помощью Docker
Если вы используете **Windows**, при развертывании некоторых заданий могут возникать проблемы из-за ограничений, связанных с конкретной платформой. Чтобы избежать этого, предоставляется Dockerfile, который помогает собрать и запустить приложение в единообразной среде на разных системах.
<details>
<summary>Нажмите, чтобы развернуть</summary>
## Клонирование репозитория
Начните с клонирования репозитория на локальную машину:
```bash
git clone https://github.com/BishopFox/cloudfoxable.git
cd cloudfoxable
```
## Сборка Docker-образа
После клонирования репозитория соберите Docker-образ следующей командой. Это гарантирует, что вы используете свежую сборку без кэшированных слоев:
```bash
docker build --no-cache -t cloudfoxable .
```
### Запуск Docker в Windows с помощью PowerShell
Если вы работаете в Windows, используйте следующую команду PowerShell для запуска Docker-контейнера. Это позволит:
- Подключить ваш файл учетных данных AWS к контейнеру для сохранения данных.
- Подключить файл(ы) Terraform (state) к контейнеру для сохранения данных. Вы можете напрямую редактировать **terraform.tfvars** в контейнере с помощью **nano**, и изменения будут синхронизированы с вашим хостом через bind mount.
- Запустить интерактивную сессию, в которой вы сможете выполнять команды Terraform.
```pwsh
cd aws
docker run -it -v $env:USERPROFILE/.aws/credentials:/root/.aws/credentials -v ${PWD}:/cloudfoxable/aws cloudfoxable
```
</details>
# Хотите большего?
https://github.com/iknowjason/Awesome-CloudSec-Labs
# Участие в разработке
Если вы хотите добавить новое задание, вот шаги внутри CloudFoxable после того, как вы сделаете форк репозитория:
* `cp aws/challenges/1_challenge_template aws/challenges/challenge_name`
* Переименуйте папку шаблона задания и файл `challenge_name.tf` в имя вашего задания.
* Добавьте свой terraform-код.
* Создайте новую переменную в aws/variables.tf
```
variable "challenge_name_enabled" {
description = "Enable or disable challenge_name challenge (true = enabled, false = disabled)"
type = bool
default = false
}
```
* Добавьте его в раздел «Enabled/Disabled Challenge» в `terraform.tfvars.example`. Укажите, должно ли оно быть включено по умолчанию (низкая/нулевая стоимость) или отключено по умолчанию (стоит $$)
```
challenge_name_enabled = false
```
* Добавьте модуль в aws/main.tf
```
module "challenge_challenge_name" {
source = "./challenges/challenge-name"
count = var.challenge_name_enabled ? 1 : 0
aws_assume_role_arn = (var.aws_assume_role_arn != "" ? var.aws_assume_role_arn : data.aws_caller_identity.current.arn)
account_id = data.aws_caller_identity.current.account_id
aws_local_profile = var.aws_local_profile
user_ip = local.user_ip
}
```
* Добавьте имя задания в локальную переменную `enabled_challenges`:
```
var.challenge_name_enabled ? "name | $12/month |" : ""
```