
Implementar de forma totalmente automática um pequeno Domínio Windows intencionalmente inseguro e vulnerável para um Honeypot RDP.
Implante um pequeno Domínio Windows intencionalmente inseguro e vulnerável para Honeypot RDP de forma totalmente automática.
Funciona em virtualização auto-hospedada usando libvirt com QEMU/KVM (mas pode ser personalizado facilmente para soluções baseadas em nuvem).
Usado para configurar sem dificuldades um pequeno Domínio Windows do zero automaticamente (sem interação do usuário) para fins de teste de Honeypot RDP.
Possui um Controlador de Domínio, um Computador Desktop e um servidor Graylog configurado para registrar as ações dos invasores.
Packer: baixar a mídia de instalação necessária e configurar as imagens de máquina virtual base automatizadas sem supervisão.
Terraform: provisionar a infraestrutura de virtualização libvirt (rede + máquinas virtuais) usando as imagens de máquina virtual preparadas pelo Packer.
Ansible: Configurar a infraestrutura (DC, Desktop, Graylog) automaticamente, sem interação do usuário.
Após passar pelo pipeline Packer+Terraform+Ansible, o Domínio Windows configurado deve estar em execução. Você pode conectar o serviço RDP do Desktop à internet pública, e vamos monitorar os eventos através do Graylog.
As funcionalidades do sistema em execução são:
A virtualização precisa de alguma potência do seu sistema hospedeiro:
Testado no host Ubuntu 18.04 LTS.
Primeiro, clone o repositório:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Antes de começar com o Packer, configure as senhas iniciais (observe os requisitos de complexidade):
./init_passwords.sh
Agora construa as imagens iniciais.
cd packer
A mídia de instalação do Windows Server 2016 e Ubuntu deve ser baixada pelo script Packer. O VirtIO precisa ser baixado pelo script get-virtio.sh anexado:
./get-virtio.sh
O Windows 10 deve ser baixado manualmente, obtendo um link de download temporário
e salvando-o na pasta ISO. O link de download
pode ser obtido aqui. Selecione a versão em inglês (internacional), 64 bits e
salve a ISO em ISO/Win10_21H2_EnglishInternational_x64.iso.
Para mapear localizações de IP em um Mapa Mundial no Graylog, o banco de dados
GeoIP da MaxMind é necessário. Infelizmente, devido aos termos de licenciamento, ele não pode
ser redistribuído, então você precisa baixá-lo manualmente (após se registrar)
no site da MaxMind. A versão gratuita GeoLite2 deve funcionar. Obtenha o
banco de dados "GeoLite2 City" no formato MMDB (baixe o GZIP e descompacte)
e coloque-o em resources/GeoLite2-City.mmdb.
Se você não tiver o Packer, obtenha a versão mais recente no site packer.io (baixe o binário pré-compilado) ou tente adicionar o repositório Hashicorp ao seu sistema de empacotamento (útil também para o Terraform).
Se você estiver reconstruindo as imagens, não se esqueça de limpar as construções anteriores:
rm -fr output_*
Se quiser baixar novamente as imagens, remova o packer_cache:
rm -fr packer_cache
Após essas etapas de preparação, execute as construções do Packer em paralelo:
./packer-build-all.sh

As imagens devem ficar prontas em um tempo razoável (~20-30 minutos, dependendo da potência do hardware do seu host).
Agora a infraestrutura pode ser implantada usando o Terraform.
Obtenha o Terraform (>=0.13) se você não o tiver (veja os métodos de instalação do Packer, acima).
O provedor Terraform para libvirt deve ser baixado automaticamente do Terraform Registry durante a fase de apply.
Entre na pasta do Terraform:
cd ../terraform
Inicialize o diretório de trabalho (necessário apenas na primeira vez):
terraform init
Construa e inicie a infraestrutura ("aplique as alterações"):
terraform apply
Observe que, se o usuário que executa terraform apply não for root, são necessários
privilégios sudo para executar /usr/sbin/iptables (sem senha).

Após um curto período (~2-3 minutos),
a rede e as máquinas virtuais estarão em execução. Se houver falhas, terraform destroy pode não ser suficiente;
pode ser necessário desdefinir recursos manualmente.
AVISO: Você deve cuidar da proteção da sua rede privada. A configuração do terraform (main.tf) fornecida aqui contém apenas uma regra de firewall personalizada para meu próprio ambiente de teste (bloqueando o tráfego de destino 192.168.0.0/16 da rede honeypot 192.168.3.0/24).
A seguir está a fase de configuração.
Entre na pasta ansible:
cd ../ansible
O método de instalação recomendado é instalar o Ansible mais recente com algumas dependências adicionais necessárias em um ambiente virtualizado Python venv:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
Para uso posterior, basta ativar o venv com:
. ./venv/bin/activate
E deactivate se não for mais necessário na sua sessão atual.
Você deve colocar uma chave pública SSH com nome id.pub (use ssh-keygen) na pasta ansible
para acessar a máquina Ubuntu Graylog com o usuário ubuntu
(o ansible a adicionará a ~ubuntu/.ssh/authorized_keys).
O arquivo wordlist.txt contém algumas senhas (intencionalmente fracas)
para os usuários do domínio populados, que podem ser personalizadas.
Execute a fase de configuração:
ansible-playbook -i hosts setup-domain.yml -v

Após 20-25 minutos, tudo estará pronto.
De acordo com a configuração de rede libvirt (NAT), os hosts podem acessar a internet pública (se o seu sistema hospedeiro permitir).
O acesso aos hosts é possível através do sistema hospedeiro. Na prática, usar um túnel SSH socks e proxychains para acesso RDP ou WinRM é muito confortável.
Por exemplo, se o IP do seu host libvirt for 192.168.0.10,
crie um túnel socks ouvindo em localhost:5000 com:
ssh 192.168.0.10 -D5000 -NTv
E acesse o desktop Windows 10 (usando um /etc/proxychains.conf apropriado
configurado para o túnel :5000):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
Ou acesse a interface web do Graylog ouvindo em :9000 localmente no servidor Graylog Ubuntu via SSH ProxyJump e túnel de encaminhamento personalizado:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
Em seguida, abra a URL http://localhost:9000 e você acessará a interface
web do Graylog.
Para ativar o honeypot RDP, basta permitir o acesso público a 192.168.3.112:3389 (por exemplo, com alguma configuração de encaminhamento de porta no seu roteador e regras iptables na máquina hospedeira; meu script auxiliar é rdp_public.sh) e fique de olho no Graylog. ;)
| hostname | endereço IP | sistema operacional | função |
|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | Controlador de Domínio |
| desktop12 | 192.168.3.112 | Windows 10 (versão 2004) | Estação de Trabalho Membro do Domínio |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | Servidor Graylog |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | Operações Ofensivas |