
Distribuisci un piccolo dominio Windows volutamente insicuro e vulnerabile per un honeypot RDP in modo completamente automatico.
Distribuisci un piccolo dominio Windows intenzionalmente insicuro e vulnerabile per un RDP Honeypot in modo completamente automatico.
Funziona su virtualizzazione self-hosted usando libvirt con QEMU/KVM (ma può essere personalizzato facilmente per soluzioni basate su cloud).
Utilizzato per impostare senza sforzo un piccolo dominio Windows da zero automaticamente (senza interazione dell'utente) per scopi di test RDP Honeypot.
Include un Domain Controller, un Computer Desktop e un server Graylog configurato per registrare le azioni dei malintenzionati.
Packer: scarica i supporti di installazione necessari e prepara le immagini delle macchine virtuali di base in modo automatico e non presidiato.
Terraform: fornisce l'infrastruttura di virtualizzazione libvirt (rete + macchine virtuali) utilizzando le immagini delle macchine virtuali preparate da Packer.
Ansible: Configura l'infrastruttura (DC, Desktop, Graylog) automaticamente, senza interazione dell'utente.
Dopo aver eseguito la pipeline Packer+Terraform+Ansible, il dominio Windows configurato dovrebbe essere attivo e funzionante, puoi collegare il servizio RDP del Desktop a Internet pubblico e monitorare gli eventi tramite Graylog.
Caratteristiche del sistema in esecuzione:
La virtualizzazione richiede un po' di potenza dal tuo sistema host:
Testato su host Ubuntu 18.04 LTS.
Per prima cosa, clona il repository:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Prima di iniziare con Packer, imposta le password iniziali (attenzione ai requisiti di complessità):
./init_passwords.sh
Ora costruisci le immagini iniziali.
cd packer
I supporti di installazione di Windows Server 2016 e Ubuntu dovrebbero essere scaricati dallo script Packer. VirtIO deve essere scaricato utilizzando lo script get-virtio.sh allegato:
./get-virtio.sh
Windows 10 deve essere scaricato manualmente ottenendo un link di download
temporaneo e salvandolo nella cartella ISO. Il link di download
può essere ottenuto da qui. Seleziona la versione inglese (internazionale) a 64 bit e
salva l'ISO in ISO/Win10_21H2_EnglishInternational_x64.iso.
Per la mappatura delle posizioni IP su una mappa mondiale in Graylog, è necessario
il database GeoIP di MaxMind. Purtroppo, a causa delle condizioni di licenza, non può essere
ridistribuito, quindi devi scaricarlo manualmente (dopo la registrazione)
dal sito MaxMind. La versione gratuita GeoLite2 dovrebbe funzionare, ottieni il
database "GeoLite2 City" in formato MMDB (scarica il GZIP e decomprimi)
e posizionalo in resources/GeoLite2-City.mmdb.
Se non hai Packer, ottieni l'ultima versione dal sito packer.io (scarica il binario precompilato) oppure prova ad aggiungere il repository Hashicorp al tuo sistema di pacchettizzazione (utile anche per Terraform).
Se stai ricostruendo le immagini, non dimenticare di pulire le build precedenti:
rm -fr output_*
Se vuoi scaricare di nuovo le immagini, rimuovi packer_cache:
rm -fr packer_cache
Dopo questi passaggi preparatori, esegui le build Packer in parallelo:
./packer-build-all.sh

Le immagini dovrebbero essere pronte in un tempo ragionevole (~20-30 minuti a seconda della potenza hardware del tuo host).
Ora l'infrastruttura può essere distribuita utilizzando Terraform.
Ottieni Terraform (>=0.13) se non lo hai (guarda i metodi di installazione per Packer, sopra).
Il provider Terraform per libvirt dovrebbe essere scaricato automaticamente dal Terraform Registry durante la fase di applicazione.
Entra nella cartella Terraform:
cd ../terraform
Inizializza la directory di lavoro (necessario solo per il primo utilizzo):
terraform init
Costruisci e avvia l'infrastruttura ("applica le modifiche"):
terraform apply
Nota che se l'utente che esegue terraform apply non è root, sono necessari i privilegi sudo per eseguire /usr/sbin/iptables
(senza password).

Dopo un breve periodo (~2-3 minuti),
la rete e le macchine virtuali sono attive e funzionanti. Se ci sono errori, terraform destroy potrebbe non essere sufficiente,
potrebbe essere necessario rimuovere manualmente le risorse.
AVVERTENZA: Dovresti occuparti di proteggere la tua rete privata. La configurazione terraform (main.tf) fornita qui contiene solo una regola firewall personalizzata per il mio ambiente di test (blocco del traffico verso destinazione 192.168.0.0/16 dalla rete honeypot 192.168.3.0/24).
La fase successiva è quella di configurazione.
Entra nella cartella ansible:
cd ../ansible
Il metodo di installazione consigliato è installare l'ultima versione di Ansible con alcune dipendenze aggiuntive richieste in un ambiente virtualizzato Python venv:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
Per un uso successivo, attiva semplicemente il venv con
. ./venv/bin/activate
E usa deactivate se non è più necessario nella tua
sessione corrente.
Dovresti mettere una chiave pubblica SSH con nome file id.pub (usa ssh-keygen) nella cartella ansible
per accedere alla macchina Ubuntu Graylog con l'utente ubuntu
(ansible la aggiungerà a ~ubuntu/.ssh/authorized_keys).
Il file wordlist.txt contiene alcune password (intenzionalmente deboli)
per gli utenti del dominio popolati che possono essere personalizzate.
Esegui la fase di configurazione:
ansible-playbook -i hosts setup-domain.yml -v

Dopo 20-25 minuti tutto è pronto.
| hostname | indirizzo IP | sistema operativo | ruolo |
|---|---|---|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | Domain Controller |
| desktop12 | 192.168.3.112 | Windows 10 (versione 2004) | Workstation membro del dominio |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | Server Graylog |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | Operazioni offensive |
In base alla configurazione di rete libvirt (NAT), gli host possono accedere a Internet pubblico (se il tuo sistema host lo consente).
L'accesso agli host è possibile tramite il sistema host. Praticamente, utilizzare un tunnel SSH socks e proxychains per RDP o WinRM è molto comodo.
Ad esempio, se l'IP del tuo host libvirt è 192.168.0.10,
crea un tunnel socks in ascolto su localhost:5000 con
ssh 192.168.0.10 -D5000 -NTv
E accedi al desktop Windows 10 (utilizzando un /etc/proxychains.conf appropriato
configurato per il tunnel :5000):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
Oppure, accedi all'interfaccia web Graylog in ascolto su :9000 localmente sul server Ubuntu Graylog tramite SSH ProxyJump e tunnel di inoltro personalizzato:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
Poi apri l'URL http://localhost:9000 e raggiungi l'interfaccia web
Graylog.
Per attivare l'honeypot RDP, consenti semplicemente l'accesso pubblico a 192.168.3.112:3389 (ad esempio con una configurazione di port forwarding sul tuo router e regole iptables sulla macchina host; il mio script di supporto è rdp_public.sh) e continua a guardare Graylog. ;)