
RDP 허니팟을 위해 의도적으로 보안이 취약하게 구성된 소규모 Windows 도메인을 완전 자동으로 배포합니다.
소형의 의도적으로 안전하지 않은 취약한 Windows 도메인을 RDP 허니팟용으로 완전 자동으로 배포합니다.
자체 호스팅 가상화 환경에서 libvirt와 QEMU/KVM을 사용하여 실행됩니다 (하지만 클라우드 기반 솔루션에 맞게 쉽게 사용자 지정할 수 있습니다).
RDP 허니팟 테스트를 목적으로 작은 Windows 도메인을 처음부터 사용자 개입 없이 자동으로 쉽게 설정하는 데 사용됩니다.
도메인 컨트롤러, 데스크톱 컴퓨터 및 악의적인 행위자의 행동을 로깅하기 위해 구성된 Graylog 서버를 제공합니다.
Packer: 필요한 설치 미디어를 다운로드하고 자동화된 기본 가상 머신 이미지를 무인으로 설정합니다.
Terraform: Packer로 준비된 가상 머신 이미지를 사용하여 libvirt 가상화 인프라(네트워크 + 가상 머신)를 프로비저닝합니다.
Ansible: 사용자 개입 없이 인프라(DC, 데스크톱, 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에 저장하세요.
Graylog의 세계 지도에서 IP 위치를 매핑하려면 MaxMind GeoIP 데이터베이스가 필요합니다. 불행히도 라이선스 조건으로 인해 재배포할 수 없으므로 MaxMind 사이트에서 등록 후 수동으로 다운로드해야 합니다. 무료 GeoLite2 버전이 작동해야 합니다. MMDB 형식의 'GeoLite2 City' 데이터베이스(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의 설치 방법 참조).
libvirt용 Terraform 공급자는 apply 단계 중에 Terraform Registry에서 자동으로 다운로드되어야 합니다.
Terraform 폴더로 이동:
cd ../terraform
작업 디렉터리 초기화 (처음 사용 시에만 필요):
terraform init
인프라 빌드 및 시작 ("변경 사항 적용"):
terraform apply
참고: terraform apply를 실행하는 사용자가 root가 아닌 경우 /usr/sbin/iptables를 실행하기 위한 sudo 권한이 필요합니다(암호 없이).

짧은 시간(~2-3분) 후에 네트워크와 가상 머신이 가동됩니다. 오류가 발생한 경우 terraform destroy만으로는 충분하지 않을 수 있으며, 리소스를 수동으로 정의 해제해야 할 수도 있습니다.
경고: 개인 네트워크를 보호하는 데 주의를 기울여야 합니다. 여기 제공된 terraform 구성(main.tf)에는 내 테스트 환경을 위한 사용자 지정 방화벽 규칙(192.168.3.0/24 허니팟 네트워크에서 192.168.0.0/16 대상 트래픽 차단)만 포함되어 있습니다.
다음은 구성 단계입니다.
ansible 폴더로 이동:
cd ../ansible
권장 설치 방법은 Python venv 가상 환경에 필요한 추가 종속성과 함께 최신 Ansible을 설치하는 것입니다:
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
나중에 사용하려면 다음을 실행하여 venv를 활성화하세요.
. ./venv/bin/activate
현재 세션에서 더 이상 필요하지 않으면 deactivate를 실행하세요.
ubuntu 사용자로 Ubuntu Graylog 머신에 액세스하기 위해 SSH 공개 키(파일명 id.pub, ssh-keygen 사용)를 ansible 폴더에 넣어야 합니다(ansible이 ~ubuntu/.ssh/authorized_keys에 추가합니다).
wordlist.txt 파일에는 채워진 도메인 사용자를 위한 (의도적으로 약한) 암호가 포함되어 있으며 사용자 지정할 수 있습니다.
구성 단계 실행:
ansible-playbook -i hosts setup-domain.yml -v

20-25분 후에 모든 것이 준비됩니다.
libvirt 네트워크 구성(NAT)에 따라 호스트는 공용 인터넷에 액세스할 수 있습니다(호스트 시스템이 허용하는 경우).
호스트에 대한 액세스는 호스트 시스템을 통해 가능합니다. 실제로 SSH socks 터널과 proxychains를 사용하여 RDP 또는 WinRM에 액세스하는 것이 매우 편리합니다.
예를 들어 libvirt 호스트 IP가 192.168.0.10인 경우 다음을 통해 localhost:5000에서 수신 대기하는 socks 터널을 생성합니다:
ssh 192.168.0.10 -D5000 -NTv
그리고 Windows 10 데스크톱에 액세스합니다(:5000 터널에 대해 구성된 적절한 /etc/proxychains.conf 사용):
proxychains xfreerdp /v:192.168.3.112 /u:administrator
또는 SSH ProxyJump 및 사용자 지정 포워드 터널을 통해 Graylog Ubuntu 서버에서 로컬로 :9000에서 수신 대기하는 Graylog 웹 인터페이스에 액세스합니다:
ssh -J 192.168.0.10 [email protected] -NTv -L9000:127.0.0.1:9000
그런 다음 URL http://localhost:9000을 열면 Graylog 웹 인터페이스에 도달합니다.
RDP 허니팟을 활성화하려면 192.168.3.112:3389에 대한 공용 액세스를 허용하기만 하면 됩니다(예: 라우터의 포트 포워딩 구성 및 호스트 머신의 iptables 규칙 사용, 도우미 스크립트는 rdp_public.sh입니다). 그리고 Graylog를 계속 지켜보세요. ;)
| 호스트명 | IP 주소 | 운영 체제 | 역할 |
|---|
| dc1 | 192.168.3.100 | Windows Server 2016 | 도메인 컨트롤러 |
| desktop12 | 192.168.3.112 | Windows 10 (version 2004) | 도메인 구성원 워크스테이션 |
| graylog | 192.168.3.191 | Ubuntu 18.04 LTS | Graylog 서버 |
| kali | 192.168.3.192 | Kali Rolling (2022.3) | 공격 작업 |