
Автоматически разверните небольшой, намеренно небезопасный, уязвимый домен Windows для RDP Honeypot.
Развертывание небольшого, intentionally небезопасного, уязвимого домена Windows для RDP Honeypot полностью автоматически.
Работает на собственной виртуализации с использованием libvirt с QEMU/KVM (но может быть легко настроено для облачных решений).
Используется для безболезненной настройки небольшого домена Windows с нуля автоматически (без взаимодействия с пользователем) с целью тестирования RDP Honeypot.
Включает контроллер домена, рабочий компьютер и настроенный сервер Graylog для логирования действий злоумышленников.
Packer: загрузка необходимых установочных носителей и настройка автоматизированных базовых образов виртуальных машин без участия пользователя.
Terraform: подготовка инфраструктуры виртуализации libvirt (сеть + виртуальные машины) с использованием образов виртуальных машин, подготовленных Packer.
Ansible: настройка инфраструктуры (DC, Desktop, Graylog) автоматически, без взаимодействия с пользователем.
После прохождения конвейера Packer+Terraform+Ansible настроенный домен Windows должен быть запущен и работать, вы можете подключить RDP-сервис рабочего стола к публичному интернету и наблюдать за событиями через Graylog.
Возможности работающей системы:
Виртуализация требует некоторых ресурсов вашей хост-системы:
Тестировалось на хост-системе Ubuntu 18.04 LTS.
Сначала клонируйте репозиторий:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Перед началом работы с Packer установите начальные пароли (следите за требованиями к сложности):
./init_passwords.sh
Теперь создайте начальные образы.
cd packer
Установочные носители Windows Server 2016 и Ubuntu должны быть загружены скриптом Packer. VirtIO необходимо загрузить с помощью прилагаемого скрипта get-virtio.sh:
./get-virtio.sh
Windows 10 необходимо загрузить вручную, получив временную
ссылку для скачивания и сохранив ее в папку ISO. Ссылку для скачивания
можно получить здесь. Выберите английскую (международную) 64-битную версию и
сохраните ISO как ISO/Win10_21H2_EnglishInternational_x64.iso.
Для сопоставления IP-адресов с местоположением на карте мира в Graylog необходима
база данных GeoIP MaxMind. К сожалению, из-за лицензионных ограничений она не может быть
распространена, поэтому вам придется загрузить ее вручную (после регистрации)
с сайта MaxMind. Бесплатная версия GeoLite2 должна подойти, получите
базу данных "GeoLite2 City" в формате MMDB (скачайте GZIP и распакуйте)
и поместите ее по пути resources/GeoLite2-City.mmdb.
Если у вас нет Packer, загрузите последнюю версию с сайта packer.io (скачайте предварительно скомпилированный бинарник) или попробуйте добавить репозиторий Hashicorp в вашу систему пакетов (полезно и для Terraform).
Если вы пересобираете образы, не забудьте очистить предыдущие сборки:
rm -fr output_*
Если вы хотите перезагрузить образы, удалите packer_cache:
rm -fr packer_cache
После этих подготовительных шагов запустите сборки Packer параллельно:
./packer-build-all.sh

Образы должны быть готовы за разумное время (~20-30 минут в зависимости от мощности вашего хост-оборудования).
Теперь инфраструктура может быть развернута с помощью Terraform.
Получите Terraform (>=0.13), если у вас его нет (посмотрите методы установки в разделе Packer выше).
Провайдер Terraform для libvirt должен быть автоматически загружен из Terraform Registry во время фазы apply.
Перейдите в папку Terraform:
cd ../terraform
Инициализируйте рабочую директорию (требуется только при первом использовании):
terraform init
Соберите и запустите инфраструктуру ("примените изменения"):
terraform apply
Обратите внимание: если пользователь, запускающий terraform apply, не является root, требуются привилегии sudo для выполнения /usr/sbin/iptables
(без пароля).

Через короткое время (~2-3 минуты)
сеть и виртуальные машины будут запущены и работать. Если возникнут какие-либо сбои, terraform destroy может не помочь,
может потребоваться ручное удаление ресурсов.
ПРЕДУПРЕЖДЕНИЕ: Вы должны позаботиться о защите вашей частной сети. Предоставленная здесь конфигурация terraform (main.tf) содержит только пользовательское правило брандмауэра для моей собственной тестовой среды (блокировка исходящего трафика назначения 192.168.0.0/16 из сети honeypot 192.168.3.0/24).
Далее следует этап настройки.
Перейдите в папку ansible:
cd ../ansible
Рекомендуемый метод установки — установка последней версии Ansible с некоторыми необходимыми дополнительными зависимостями в виртуальном окружении Python venv:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
Для последующего использования просто активируйте venv командой
. ./venv/bin/activate
И выполните deactivate, если он больше не нужен в вашей текущей сессии.
Вы должны поместить открытый ключ SSH с именем файла id.pub (используйте ssh-keygen) в папку ansible
для доступа к машине Ubuntu Graylog от пользователя ubuntu
(ansible добавит его в ~ubuntu/.ssh/authorized_keys).
Файл wordlist.txt содержит некоторые (намеренно слабые) пароли
для созданных пользователей домена, которые можно настроить.
Запустите фазу настройки:
ansible-playbook -i hosts setup-domain.yml -v

Через 20-25 минут всё готово.
Согласно конфигурации сети libvirt (NAT), хосты могут обращаться к публичному интернету (если ваша хост-система это позволяет).
Доступ к хостам возможен через хост-систему. Практически очень удобно использовать SSH socks-туннель и proxychains для доступа к RDP или WinRM.
Например, если IP вашего хоста libvirt равен 192.168.0.10,
создайте socks-туннель, слушающий на localhost:5000 командой
ssh 192.168.0.10 -D5000 -NTv
И подключитесь к рабочему столу Windows 10 (используя соответствующий /etc/proxychains.conf,
настроенный на туннель :5000):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
Или откройте веб-интерфейс Graylog, слушающий на :9000 локально на сервере Graylog Ubuntu, через SSH ProxyJump и пользовательский форвард-туннель:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
Затем откройте URL http://localhost:9000 — вы попадете в веб-интерфейс Graylog.
Для активации RDP honeypot просто разрешите публичный доступ к 192.168.3.112:3389 (например, с помощью настройки перенаправления портов на вашем роутере и правил iptables на хост-машине; мой вспомогательный скрипт — rdp_public.sh) и наблюдайте за Graylog. ;)
| hostname | ip address | operating system | role |
|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | контроллер домена |
| desktop12 | 192.168.3.112 | Windows 10 (версия 2004) | рабочая станция домена |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | сервер Graylog |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | наступательные операции |