
Desplegar automáticamente un pequeño dominio de Windows intencionalmente inseguro y vulnerable para un honeypot RDP.
Despliega un pequeño dominio de Windows, intencionadamente inseguro y vulnerable, para un RDP Honeypot de forma totalmente automática.
Se ejecuta en virtualización autogestionada usando libvirt con QEMU/KVM (pero se puede personalizar fácilmente para soluciones basadas en la nube).
Se utiliza para configurar fácilmente un pequeño dominio de Windows desde cero automáticamente (sin interacción del usuario) con el propósito de probar RDP Honeypot.
Incluye un Controlador de Dominio, un Equipo de Escritorio y un servidor Graylog configurado para registrar las acciones de los atacantes.
Packer: descarga los medios de instalación necesarios y configura las imágenes de máquinas virtuales base automatizadas sin supervisión.
Terraform: aprovisiona la infraestructura de virtualización libvirt (red + máquinas virtuales) usando las imágenes de máquinas virtuales preparadas por Packer.
Ansible: configura la infraestructura (DC, Escritorio, Graylog) automáticamente, sin interacción del usuario.
Después de pasar por el pipeline Packer+Terraform+Ansible, el dominio de Windows configurado debería estar funcionando. Puedes conectar el servicio RDP del Escritorio a la internet pública y monitorear los eventos a través de Graylog.
Las características del sistema en funcionamiento son:
La virtualización necesita algo de potencia de tu sistema anfitrión:
Probado en un anfitrión Ubuntu 18.04 LTS.
Primero, clona el repositorio:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Antes de comenzar con Packer, configura las contraseñas iniciales (ten en cuenta los requisitos de complejidad):
./init_passwords.sh
Ahora construye las imágenes iniciales.
cd packer
Packer descargará los medios de instalación de Windows Server 2016 y Ubuntu. VirtIO debe descargarse mediante el script get-virtio.sh adjunto:
./get-virtio.sh
Windows 10 debe descargarse manualmente obteniendo un enlace de descarga temporal y guardándolo en la carpeta ISO. El enlace de descarga se puede obtener aquí. Selecciona la versión en inglés (internacional) de 64 bits y guarda la ISO en ISO/Win10_21H2_EnglishInternational_x64.iso.
Para mapear ubicaciones de IP en un mapa mundial en Graylog, se necesita la base de datos GeoIP de MaxMind. Desafortunadamente, debido a los términos de licencia, no se puede redistribuir, por lo que debes descargarla manualmente (después de registrarte) desde el sitio de MaxMind. La versión gratuita GeoLite2 debería funcionar; obtén la base de datos "GeoLite2 City" en formato MMDB (descarga el GZIP y descomprime) y colócala en resources/GeoLite2-City.mmdb.
Si no tienes Packer, obtén la última versión desde el sitio packer.io (descarga el binario precompilado) o intenta añadir el repositorio de Hashicorp a tu sistema de paquetes (útil también para Terraform).
Si estás reconstruyendo las imágenes, no olvides limpiar las construcciones anteriores:
rm -fr output_*
Si deseas volver a descargar las imágenes, elimina packer_cache:
rm -fr packer_cache
Después de estos pasos preparatorios, ejecuta las construcciones de Packer en paralelo:
./packer-build-all.sh

Las imágenes deberían estar listas en un tiempo razonable (~20-30 minutos según la potencia de tu hardware anfitrión).
Ahora la infraestructura se puede desplegar usando Terraform.
Obtén Terraform (>=0.13) si no lo tienes (mira los métodos de instalación en Packer, arriba).
El proveedor de Terraform para libvirt debería descargarse automáticamente desde el Registro de Terraform durante la fase de apply.
Entra en la carpeta de Terraform:
cd ../terraform
Inicializa el directorio de trabajo (solo necesario para la primera vez):
terraform init
Construye y lanza la infraestructura ("aplica los cambios"):
terraform apply
Ten en cuenta que si el usuario que ejecuta terraform apply no es root, se necesitan privilegios sudo para ejecutar /usr/sbin/iptables (sin contraseña).

Después de un breve tiempo (~2-3 minutos), la red y las máquinas virtuales estarán en funcionamiento. Si hay fallos, es posible que terraform destroy no sea suficiente; puede ser necesario borrar recursos manualmente.
ADVERTENCIA: Debes proteger tu red privada. La configuración de terraform (main.tf) proporcionada aquí solo contiene una regla de firewall personalizada para mi propio entorno de pruebas (bloqueando el tráfico de destino 192.168.0.0/16 desde la red honeypot 192.168.3.0/24).
A continuación, la fase de configuración.
Entra en la carpeta de ansible:
cd ../ansible
El método de instalación recomendado es instalar la última versión de Ansible con algunas dependencias adicionales necesarias en un entorno virtualizado con Python venv:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
Para usos posteriores, solo activa el venv con:
. ./venv/bin/activate
Y simplemente deactivate si ya no lo necesitas en tu sesión actual.
Debes colocar una clave pública SSH con el nombre id.pub (usa ssh-keygen) en la carpeta ansible para acceder a la máquina Ubuntu Graylog con el usuario ubuntu (ansible la añadirá a ~ubuntu/.ssh/authorized_keys).
El archivo wordlist.txt contiene algunas contraseñas (intencionadamente débiles) para los usuarios del dominio poblados, que se pueden personalizar.
Ejecuta la fase de configuración:
ansible-playbook -i hosts setup-domain.yml -v

Después de 20-25 minutos, todo estará listo.
Según la configuración de red de libvirt (NAT), los anfitriones pueden acceder a la internet pública (si tu sistema anfitrión lo permite).
El acceso a los anfitriones es posible a través del sistema anfitrión. Prácticamente, usar un túnel SSH socks y proxychains para acceso RDP o WinRM es muy cómodo.
Por ejemplo, si la IP de tu anfitrión libvirt es 192.168.0.10, crea un túnel socks escuchando en localhost:5000 con:
ssh 192.168.0.10 -D5000 -NTv
Y accede al escritorio de Windows 10 (usando un /etc/proxychains.conf apropiado configurado para el túnel :5000):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
O, accede a la interfaz web de Graylog que escucha en :9000 localmente en el servidor Ubuntu Graylog mediante SSH ProxyJump y un túnel de reenvío personalizado:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
Luego abre la URL http://localhost:9000 y llegarás a la interfaz web de Graylog.
Para activar el RDP honeypot, simplemente permite el acceso público a 192.168.3.112:3389 (por ejemplo, con alguna configuración de reenvío de puertos en tu router y reglas iptables en la máquina anfitriona; mi script auxiliar es rdp_public.sh) y mantén un ojo en Graylog. ;)
| nombre de host | dirección IP | sistema operativo | rol |
|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | Controlador de Dominio |
| desktop12 | 192.168.3.112 | Windows 10 (versión 2004) | Estación de trabajo del dominio |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | Servidor Graylog |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | Operaciones Ofensivas |