
Автоматизированное развертывание инфраструктуры Red Team с использованием Docker
Ранний выпуск. Подписывайтесь на меня в Twitter, чтобы быть в курсе разработки Redcloud.
💁☁️🐚🌱
Быстрый старт - Архитектура - Варианты использования - Скриншоты
Redcloud — это мощный и удобный инструментарий для развертывания полнофункциональной инфраструктуры Red Team с использованием Docker. Используйте скорость облака для ваших инструментов. Развертывается за минуты. Используйте и управляйте им с помощью полированного веб-интерфейса.
Идеально подходит для тестов на проникновение, полигонов, red teaming и bug bounty!
Размещайте свою атакующую инфраструктуру самостоятельно без проблем, разверните свою собственную живую, масштабируемую и отказоустойчивую наступательную инфраструктуру за считанные минуты.
Следующая демонстрация показывает развертывание Redcloud через SSH, затем Metasploit. Затем мы смотрим на Traefik и живой том, подключенный к Metasploit. Наконец, мы проверяем, что база данных Metasploit работает через веб-терминал, удаляем контейнер и завершаем работу Redcloud.
Настройка:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
Развертывание:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud использует PyYAML для вывода списка доступных шаблонов. По умолчанию он установлен в большинстве систем.
Если нет, просто выполните:```bash
pip install -r requirements.txt
Redcloud имеет 3 различных способа развертывания:
1. **Локально**
2. **Удаленно, через ssh**. Требуется, чтобы ваш открытый ключ находился в файле `authorized_keys` на целевой машине.
3. **Удаленно, с помощью docker-machine**. Выполните команду `eval (docker-machine env deploy_target)`, чтобы загрузить окружение вашего docker-machine, и запустите `redcloud.py`. Redcloud должен автоматически обнаружить ваш docker-machine и подсветить пункты меню, относящиеся к развертыванию через docker-machine.
___
<h4 align="center">
<b>Шаблоны</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Шаблоны Redcloud">
</p>
___
**Кратко,**
`redcloud.py` разворачивает стек [Portainer](https://www.portainer.io/), **предварительно загруженный множеством шаблонов инструментов для ваших наступательных операций**, на базе Docker. После развертывания управляйте Redcloud через [веб-интерфейс](#screenshots). Использует [Traefik](https://traefik.io/) в качестве обратного прокси. Легкое удаленное развертывание на целевом сервере с помощью системного `ssh` или `docker-machine`.
* :rocket: Хотели когда-нибудь поднять Kali в облаке всего за несколько кликов?
* :package: Иметь чистые изолированные среды между вашими инструментами, методами и этапами?
* :ambulance: Мониторить состояние ваших сканов и C2?
* :fire: Пропустить задачи системного администратора по настройке фишинговой кампании и начать взламывать быстрее?
* :smiling_imp: Любопытно, как бы вы построили *идеальную* атакующую инфраструктуру?
Используйте веб-интерфейс для мониторинга, управления и **взаимодействия с каждым контейнером**. Используйте быстрый веб-терминал так же, как ваш собственный. Создавайте тома, сети и проброс портов с помощью простого интерфейса Portainer.
Развертывайте и управляйте всеми вашими любимыми инструментами и методами с мощью интернета дата-центровского уровня :rocket:
___
*В следующем разделе мы более подробно рассмотрим концепции дизайна Redcloud. Вы можете начать работу, не углубляясь в детали.*
___
* :book: **Содержание**
- [Введение](#introduction)
- [Возможности](#features)
- [Быстрый старт](#quick-start)
- [Подробности](#details)
- [Архитектура Redcloud](#redcloud-architecture)
- [Процесс развертывания](#deployment-workflow)
- [Сети](#networks)
- [Тома](#volumes)
- [Доступ к контейнерам из терминала](#accessing-containers-from-the-terminal)
- [Доступ к файлам](#accessing-files)
- [SSL-сертификаты](#ssl-certificates)
- [Остановка Redcloud](#stopping-redcloud)
- [Шаблоны приложений Portainer](#portainer-app-templates)
- [Обратный прокси Traefik](#traefik-reverse-proxy)
- [Вопросы безопасности Redcloud](#redcloud-security-considerations)
- [Проверенные варианты развертывания](#tested-deployment-candidates)
- [Устранение неполадок](#troubleshooting)
- [Сценарии использования](#use-cases)
- [Скриншоты](#screenshots)
- [Руководство по участию](#contribution-guideline)
- [Хостинг Redcloud](#hosting-redcloud)
- [Вдохновение и благодарности](#inspirations--shout-outs)
___
## Подробности
### Архитектура Redcloud
* `redcloud.py`: Запускает/Останавливает веб-интерфейс и шаблоны приложений, используя Docker и Portainer.
* `portainer`: Веб-интерфейс Portainer.
* `traefik`: Контейнер обратного прокси Traefik для веб-интерфейса, контейнеров API и файлов. Некоторые шаблоны имеют предварительно настроенные маршруты для удобства. См. `templates.yml`.
* `templates`: Контейнер `http.server` на Python3, который обслуживает шаблоны приложений. Находится во "внутренней" сети.
* `cert_gen`: Контейнер [omgwtfssl](https://github.com/paulczar/omgwtfssl), который генерирует SSL-сертификаты с использованием общепринятых лучших практик.
* https://your-server-ip/portainer: Веб-интерфейс Redcloud после развертывания.
* https://your-server-ip/files: Том `redcloud_files` Redcloud. Вы также можете получить доступ к содержимому контейнера `redcloud_log`, защищенному тем же `.htpasswd`, что и Traefik. Учетные данные по умолчанию: `admin:Redcloud`
* https://your-server-ip/api: Страница мониторинга состояния обратного прокси Traefik. Показывает статистику в реальном времени о маршрутах, бэкендах, кодах возврата. Также будет отображать данные обратного вызова имплантов, если настроено через Traefik.
### Процесс развертывания
**Процесс развертывания Redcloud выглядит следующим образом:**
1. Клонируйте/скачайте репозиторий Redcloud.
2. Запустите `redcloud.py`.
3. Выберите вариант развертывания из меню (локальный, ssh, docker-machine).
4. `redcloud.py` автоматически:
* проверяет наличие `docker` и `docker-compose` на целевой машине.
* устанавливает `docker` и `docker-compose`, если они отсутствуют.
* разворачивает веб-стек на целевой машине с помощью `docker-compose`.
5. После завершения развертывания `redcloud.py` выведет URL. Перейдите по адресу https://your-deploy-machine-ip/portainer.
6. Задайте имя пользователя/пароль через веб-интерфейс.
7. Выберите конечную точку (единственную в списке).
8. Получите доступ к шаблонам, используя пункт меню "Шаблоны приложений" слева :rocket:
**Развертывание шаблона приложения выглядит следующим образом:**
1. Выберите шаблон.
2. Если вы хотите добавить дополнительные параметры, выберите "+ Показать дополнительные параметры".
3. Добавьте сопоставление портов, сетевые параметры и сопоставление томов по своему усмотрению.
4. Выберите "Развернуть контейнер".
5. Portainer запустит контейнер. Это может занять несколько минут, если потребуется загрузить образ. Если ваш сервер находится в дата-центре, этот шаг будет очень быстрым.
6. Контейнер должен запуститься :rocket:
7. Portainer перенаправит вас на страницу "Контейнеры". Оттуда вы можете:
a. Просматривать логи контейнера в реальном времени.
b. Просматривать детали контейнера (`docker inspect`).
c. Просматривать статистику контейнера в реальном времени (память/ЦП/сеть/процессы).
d. Использовать веб-шелл для взаимодействия с контейнером.
e. В зависимости от шаблона приложения используйте `bash` или `sh`. Выберите соответствующий вариант из выпадающего меню.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Меню Redcloud">
</p>
### Сети
Redcloud упрощает работу с сетями и контейнерами.
Вы можете создавать дополнительные сети с разными драйверами и подключать к ним контейнеры по своему усмотрению. Redcloud поставляется с двумя сетями: `redcloud_default` и `redcloud_inside`.
### Тома
Вы можете обмениваться данными между контейнерами, используя общие тома. Redcloud поставляется с 3 томами:
* `certs`: Контейнер с сертификатами, сгенерированными [omgwtfssl](https://github.com/paulczar/omgwtfssl).
* `files`: Стандартный том для обмена файлами. В настоящее время файлы доступны при переходе по адресу https://your-server-ip/files и обслуживаются контейнером обратного прокси Traefik непосредственно из тома `files`. Типичный случай использования — подключить том к контейнеру Metasploit, сгенерировать полезную нагрузку непосредственно в том `files`. Теперь вы можете обслуживать свежую полезную нагрузку напрямую через маршрут Traefik к файловому серверу.
* `logs`: Доступен для логов, также обслуживается файловым сервером. Доступ требует базовой аутентификации. По умолчанию `admin:Redcloud`.
### Доступ к контейнерам из терминала
Если вы хотите оставаться в терминале для работы с развернутыми контейнерами, это очень просто с помощью Docker. Имейте в виду следующее:
* В большинстве контейнеров есть `bash`, но в некоторых вместо него используется `sh`
* Имена всех контейнеров шаблонов приложений Redcloud начинаются с `red_`, например `red_msf-postgresql`
* В Docker вы можете использовать `docker exec` или `attach` для взаимодействия с контейнером
* `exec` предпочтительнее, так как он создает новый процесс
* `attach` переносит вас непосредственно на запущенный процесс, что может привести к завершению работающего контейнера
* Если вы запускаете Redcloud:
* Локально или с помощью `docker-machine`, просто введите эти команды в локальной оболочке
* При использовании `ssh` сначала подключитесь по ssh к цели развертывания, чтобы выполнить следующие команды
Чтобы начать взаимодействие с нужным развернутым контейнером:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
Если вы видите следующее сообщение, это означает, что bash не установлен. В этом случае просто замените /bin/bash на /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
Чтобы использовать `docker attach`, просто запустите:```bash
> docker attach red_container-name
Если используется attach, контейнер должен быть запущен в интерактивном режиме, чтобы попасть в интерактивную оболочку.
Откройте браузер по адресу https://ваш-ip-redcloud/files.
Обратитесь к тому files для получения дополнительной информации.
Redcloud генерирует новый неподписанный SSL-сертификат при развертывании.
Сертификат генерируется с помощью omgwtfssl, реализуя большинство лучших практик.
После генерации:
Он поместит сгенерированные сертификаты в /certs по умолчанию, а также выведет их в stdout в стандартной форме YAML, что упрощает их использование в Ansible или других инструментах, работающих с YAML.
Сертификаты хранятся в общем томе Docker под названием certs. Ваши контейнеры могут получить доступ к этому тому, если вы укажете его в "+ Advanced Settings" при развертывании. Обратный прокси-сервер Traefik получает сертификаты непосредственно из своего файла конфигурации. Если вы хотите заменить эти сертификаты на свои, просто замените их в этом томе.
Это также означает, что можно делиться сгенерированными сертификатами с другими контейнерами, такими как Empire или Metasploit для обратных вызовов или для фишинговой кампании.
Большинство настроек, связанных с SSL, можно найти в traefik/traefik.toml или в файле docker-compose.yml.
Вы можете остановить Redcloud непосредственно из меню.
Развернутые шаблоны приложений необходимо остановить вручную перед остановкой Redcloud. Вы можете остановить их через веб-интерфейс Portainer или выполнив docker rm -f имя-контейнера.
Если вы хотите принудительно остановить контейнеры Portainer, которые запускают Redcloud, просто выполните docker-compose kill внутри папки redcloud/.
Варианты остановки local и docker-machine одинаковы, поэтому они объединены в один пункт.
Redcloud использует Portainer для оркестрации и взаимодействия с Docker-движком. Portainer сам по себе является фантастическим проектом для удаленного управления Docker-развертываниями. Portainer также включает в себя очень удобную систему шаблонов, которая является основным компонентом нашего развертывания Redcloud.
Шаблоны можно найти в ./templates/templates.yml. Portainer получает файл шаблонов из выделенного контейнера (templates).
Traefik — это замечательный «облачный пограничный маршрутизатор». Он заменил предыдущую настройку обратного прокси на NGINX.
Образ Traefik собирается во время развертывания с использованием Dockerfile, расположенного в traefik/Dockerfile. Он добавляет файл .htpasswd с учетными данными admin:Redcloud.
По умолчанию развертывание создает следующие маршруты:
https://ваш-ip-сервера/portainerhttps://ваш-ip-сервера/fileshttps://ваш-ip-сервера/apiАутентификация основана на данных из .htaccess.
В веб-интерфейсе Traefik api вы можете просматривать развернутые маршруты, мониторить состояние работоспособности, а также видеть метрики в реальном времени. Это очень удобно.
Вы можете добавлять дополнительные метки, которые сообщают Traefik, куда направлять трафик, используя:
traefik/traefik.tomldocker-compose.ymltemplates.ymlОбратитесь к официальной документации для получения дополнительной информации.

Redcloud разворачивается с самоподписанным HTTPS-сертификатом и проксирует все взаимодействия с веб-консолью через него.
Однако сеть по умолчанию открывает порты ваших контейнеров для внешнего мира.
Вы можете:
labels для создания маршрутов с помощью Traefik. Вдохновитесь файлом docker-compose.yml.Кроме того:
docker и docker-machine требует привилегий root. Вы можете понизить требования к привилегиям, следуя официальной документации.redcloud.py получает публичный IP-адрес Redcloud с помощью icanhazip.com.| Цель развертывания | Статус |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Strech | ✔️ |
python --version. Redcloud требует Python 3+.python3 вместо python в старых системах.redcloud.py требует, чтобы у кандидата на развертывание был открытый ключ в .ssh/authorized_keys, и обрабатывает аутентификацию без пароля, используя открытый ключ пользователя. Это конфигурация по умолчанию для большинства рабочих процессов VPS.eval, как показано выше.docker и docker-machine требует привилегий root. Вы можете понизить требования к привилегиям, следуя официальной документации.rm -rf /opt/portainer/data/files/./files/.
msfconsole Metasploit через веб-интерфейс
Любая помощь приветствуется. Это побочный проект, так что в нем, вероятно, не хватает нескольких болтов и гаек. Прежде всего:
Вы можете разместить Redcloud на любом Unix-сервере, на котором работает Docker.
Redcloud предназначен для использования в облачной среде, например, на простом VPS с SSH или даже на AWS EC2, GCP и т. д.
Многие облачные провайдеры предлагают бесплатные кредиты, чтобы вы могли ознакомиться с их услугами. Существует множество списков и руководств, охватывающих получение бесплатных кредитов на хостинг от крупных поставщиков. Этот список — хорошее место для начала.
Что касается метода развертывания, я лично предпочитаю работать с docker-machine, так как становится невероятно легко создавать новые машины и управлять ими, как только вы настроили драйвер вашего облачного провайдера. Если вы предпочитаете использовать ssh, обязательно ознакомьтесь с проектом evilsocket shellz для управления ключами и профилями.
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 за логотип — обязательно посмотрите его репозиторий!
Наконец, если вы хотите, чтобы ваш инструмент был интегрирован, свяжитесь со мной в Twitter. Этот проект поддерживается в мое свободное время. Следите за новыми функциями в ветке dev.
Redcloud изначально был разработан, чтобы упростить развертывание учебных сред для студентов, изучающих информационную безопасность.
Если вы хотите оставаться в курсе этого проекта:
python3-distutils с помощью apt-get install python3-distutils на системах Debian/Ubuntu.portainer не сможет использовать свой том по умолчанию /opt/. Чтобы решить эту проблему, откройте файл docker-compose.yml, замените /opt/portainer/data:/data на папку с правами на запись, например: /tmp/portainer/:/data и создайте каталог /tmp/portainer перед запуском Redcloud.