
RDP Honeypot के लिए एक छोटा, जानबूझकर असुरक्षित, कमजोर Windows Domain को पूरी तरह से स्वचालित रूप से तैनात करें।
एक छोटा, जानबूझकर असुरक्षित, कमजोर विंडोज डोमेन को पूरी तरह से स्वचालित रूप से तैनात करें RDP Honeypot के लिए।
स्व-होस्टेड वर्चुअलाइजेशन पर चलता है libvirt के साथ QEMU/KVM (लेकिन इसे क्लाउड-आधारित समाधानों के लिए आसानी से अनुकूलित किया जा सकता है)।
बिना उपयोगकर्ता इंटरैक्शन के स्वचालित रूप से एक छोटा विंडोज डोमेन स्थापित करने के लिए उपयोग किया जाता है, जो RDP Honeypot परीक्षण के उद्देश्य से है।
इसमें एक डोमेन कंट्रोलर, एक डेस्कटॉप कंप्यूटर और बुरे लोगों के कार्यों को लॉग करने के लिए एक कॉन्फ़िगर किया गया Graylog सर्वर शामिल है।
Packer: आवश्यक इंस्टॉल मीडिया डाउनलोड करें और स्वचालित बेस वर्चुअल मशीन इमेज को बिना देखरेख के सेटअप करें।
Terraform: packer द्वारा तैयार वर्चुअल मशीन इमेज का उपयोग करके libvirt वर्चुअलाइजेशन इंफ्रास्ट्रक्चर (नेटवर्क + वर्चुअल मशीन) प्रदान करें।
Ansible: बिना उपयोगकर्ता इंटरैक्शन के स्वचालित रूप से इंफ्रास्ट्रक्चर (DC, Desktop, Graylog) कॉन्फ़िगर करें।
Packer+Terraform+Ansible पाइपलाइन से गुजरने के बाद, कॉन्फ़िगर किया गया विंडोज डोमेन चालू हो जाना चाहिए, आप डेस्कटॉप की RDP सेवा को सार्वजनिक इंटरनेट से जोड़ सकते हैं, और Graylog के माध्यम से घटनाओं की निगरानी कर सकते हैं।
चल रहे सिस्टम की विशेषताएं हैं:
वर्चुअलाइजेशन को आपके होस्ट सिस्टम की कुछ शक्ति की आवश्यकता होती है:
पहले, रिपॉजिटरी को क्लोन करें:
git clone https://github.com/tothi/ad-honeypot-autodeploy
cd ad-honeypot-autodeploy
Packer से शुरू करने से पहले, प्रारंभिक पासवर्ड सेट करें (जटिलता आवश्यकताओं का ध्यान रखें):
./init_passwords.sh
अब प्रारंभिक इमेज बनाएं।
cd packer
विंडोज सर्वर 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 पर इंस्टॉल विधियों को देखें, ऊपर)।
आवेदन चरण के दौरान Terraform Registry से libvirt के लिए Terraform प्रदाता स्वचालित रूप से डाउनलोड किया जाना चाहिए।
Terraform फ़ोल्डर में प्रवेश करें:
cd ../terraform
कार्य निर्देशिका को आरंभ करें (केवल पहली बार उपयोग के लिए आवश्यक):
terraform init
इंफ्रास्ट्रक्चर बनाएं और लॉन्च करें ("परिवर्तन लागू करें"):
terraform apply
ध्यान दें, कि यदि terraform apply चलाने वाला उपयोगकर्ता root नहीं है, तो /usr/sbin/iptables चलाने के लिए sudo विशेषाधिकार (बिना पासवर्ड) आवश्यक है।

थोड़े समय (~2-3 मिनट) के बाद, नेटवर्क और वर्चुअल मशीन चालू हो जाती हैं। यदि कोई विफलता होती है, तो terraform destroy पर्याप्त नहीं हो सकता है, मैन्युअल रूप से संसाधनों को अनडिफाइन करना आवश्यक हो सकता है।
चेतावनी: आपको अपने निजी नेटवर्क की सुरक्षा का ध्यान रखना चाहिए। यहां प्रदान की गई terraform config (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 Graylog मशीन तक ubuntu उपयोगकर्ता के साथ पहुँचने के लिए आपको फ़ाइल नाम id.pub ( ssh-keygen का उपयोग करें) के साथ एक SSH सार्वजनिक कुंजी 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) | आक्रामक संचालन |