
पोस्ट-एक्सप्लॉइटेशन EVTX विश्लेषक BloodHound मैपिंग के लिए
BloodHound मैपिंग के लिए पोस्ट-एक्सप्लॉइटेशन EVTX विश्लेषक
LogHound Windows सुरक्षा इवेंट लॉग्स (.evtx) को एकत्रित और पार्स करता है ताकि प्रमाणीकरण घटनाओं, सत्र डेटा और लॉगऑन मेटाडेटा को BloodHound में इन्जेस्ट किया जा सके और गहन प्रतिकूल टेलीमेट्री के लिए उपयोग किया जा सके।
LogHound को Red Teams और नेटवर्क पेनिट्रेशन टेस्टर्स के लिए एक विशिष्ट समस्या को हल करने के लिए बनाया गया था: लेटरल मूवमेंट लक्ष्यों को कुशलतापूर्वक ट्रैक करना, सक्रिय उपयोगकर्ता सत्रों को समझना, और ऑपरेशनल सुरक्षा (OpSec) को जलाए बिना निश्चित मशीन स्वामित्व स्थापित करना।
एक्टिव डायरेक्टरी डोमेन कंट्रोलर पर इवेंट लॉग फ़ाइलें (Security.evtx) मल्टी-गीगाबाइट आकार की हो सकती हैं। पारंपरिक लोडिंग तकनीकें अक्सर सिस्टम मेमोरी को समाप्त कर देती हैं या क्रैश हो जाती हैं, जिससे शोरगुल वाले आर्टिफैक्ट्स बनते हैं। LogHound मजबूत Impacket फ्रेमवर्क के शीर्ष पर चंक-आधारित स्ट्रीमिंग पैराडाइम का उपयोग करके इसका समाधान करता है।
यह नेटवर्क संरचनाओं को मैप करता है, यह स्थापित करता है कि लॉगिन आवृत्ति के आधार पर वास्तव में मशीन का "मालिक" कौन है, ऑफ-ऑवर्स (नाइट आउल) संचालन की पहचान करने के लिए सटीक कार्य घंटों की गणना करता है, और इस बुद्धिमत्ता को BloodHound CE (v5+) में सहजता से फीड करता है।
LogHound Python 3 और Impacket पर निर्भर करता है। वर्चुअल एनवायरनमेंट का उपयोग करने की अत्यधिक अनुशंसा की जाती है।
# 1. रिपॉजिटरी को क्लोन करें
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (वैकल्पिक लेकिन अनुशंसित) Python वर्चुअल एनवायरनमेंट बनाएं
python3 -m venv venv
source venv/bin/activate
# 3. आवश्यक निर्भरताएं स्थापित करें
pip install -r requirements.txt
LogHound का CLI मानक Impacket मॉड्यूल (जैसे secretsdump.py) के समान इंटरैक्ट करता है, जिसमें आपको एक स्पष्ट ऑपरेशन मोड (--local या --remote) निर्दिष्ट करना आवश्यक है।
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: अपनी स्थानीय मशीन पर पहले से मौजूद .evtx फ़ाइल को पार्स करें।--remote: प्रदान किए गए क्रेडेंशियल्स का उपयोग करके रिमोट टार्गेट सिस्टम से Security.evtx को डाउनलोड करें।-hashes LMHASH:NTHASH: पास-द-हैश प्रमाणीकरण के लिए NTLM हैश का उपयोग करें।-k: Kerberos प्रमाणीकरण का उपयोग करें। KRB5CCNAME एनवायरनमेंट वेरिएबल द्वारा निर्दिष्ट .ccache फ़ाइल से क्रेडेंशियल्स खींचता है।-aesKey hex_key: Kerberos के लिए विशिष्ट AES कुंजी (128 या 256 बिट) का उपयोग करें।-no-pass: इंटरैक्टिव रूप से पासवर्ड न मांगें।-keytab KEYTAB_FILE: प्रमाणीकरण के लिए Kerberos कीटैब फ़ाइल का उपयोग करें।-dc-ip IP: डोमेन कंट्रोलर का स्पष्ट IP पता।-target-ip IP: टार्गेट मशीन का स्पष्ट IP पता (NetBIOS नाम रिज़ॉल्यूशन विफलताओं को बायपास करता है)।-format {json,csv,md,all}: टेक्स्ट-आधारित आउटपुट फ़ॉर्मेट निर्धारित करता है। नोट: एक इंटरैक्टिव HTML रिपोर्ट और BloodHound JSON फ़ाइलें हमेशा उत्पन्न होती हैं। डिफ़ॉल्ट json है।-outputfile BASENAME: उपनिर्देशिकाओं में उत्पन्न आउटपुट रिपोर्ट के लिए नाम उपसर्ग।-threads N: समानांतर में चलने वाले पार्सर थ्रेड्स की संख्या (डिफ़ॉल्ट: 4)।-chunk-size N: प्रति पार्सिंग चंक में लॉग रिकॉर्ड की संख्या। कम मान RAM ओवरहेड को कम करते हैं; अधिक मान थोड़ा तेज़ पार्स करते हैं (डिफ़ॉल्ट: 1000)।
LogHound एक उच्च-स्तरीय डिकपल्ड, मेमोरी-कुशल विश्लेषणात्मक पाइपलाइन का उपयोग करता है:
core/collector.py): SMB के माध्यम से लक्ष्य से जुड़ता है, फिर सुरक्षा इवेंट लॉग को लक्ष्य पर एक अस्थायी फ़ाइल में निर्यात करने के लिए WMI के माध्यम से wevtutil epl Security निष्पादित करता है। निर्यात की गई फ़ाइल को फिर ओवरराइट से बचने के लिए SMB के माध्यम से loot/YYYY-MM-DD_<target>_Security.evtx में डाउनलोड किया जाता है।core/parser.py): एक थ्रेडेड चंक पार्सर कच्चे .evtx बाइनरी पर स्ट्रीम करता है और पार्स की गई घटनाओं को एक अस्थायी JSON लाइन बफर (jsonl/loghound_dump.jsonl) में लगातार उत्सर्जित करता है। यदि बाधित होता है, तो यह सटीक चेकपॉइंट्स से फिर से शुरू हो सकता है।core/analyzer.py): कम RAM फुटप्रिंट बनाए रखने के लिए .jsonl स्ट्रीम पर लाइन दर लाइन पुनरावृत्त करता है। यह मध्यवर्ती स्थिति शब्दकोशों (सत्र ट्रैकिंग, स्वामित्व स्कोरिंग, तर्क ट्रैकिंग) की गणना करता है।core/exporter.py और core/exporter_bloodhound.py): विश्लेषण RAM-स्थिति को अंतिम html/ और निर्यात प्रारूपों में गतिशील रूप से फ्लश करता है।गहन आर्किटेक्चरल तर्क और पहले से संबोधित इन्जेस्ट त्रुटियों के लिए, कृपया आंतरिक दस्तावेज़ीकरण ARCHITECTURE.md देखें।
LogHound मूल रूप से छह स्पष्ट Windows सुरक्षा इवेंट आईडी के लिए फ़िल्टर करता है: 4624, 4634, 4648, 4768, 4769, 4776।
इन घटनाओं का उपयोग करके, LogHound Properties ब्लॉक के माध्यम से निम्नलिखित कस्टम गुणों को सीधे उत्पन्न User नोड्स से जोड़कर BloodHound CE को बढ़ाता है:
ObjectIdentifier मैपिंग मौजूदा SharpHound इन्जेस्ट के साथ पूरी तरह से संरेखित हो। AD डोमेन उपयोगकर्ताओं को उनका मूल Windows SID (S-1-5-21-...) प्राप्त होता है। BloodHound नोड टूटने को रोकने के लिए, स्थानीय मशीन खाते सटीक रूप से फ़ॉलबैक USER@HOSTNAME मानक बनाए रखते हैं।computers.json मशीनों और उपयोगकर्ताओं के बीच वास्तविक "HasSession" किनारों को चित्रित करने के लिए सटीक मूल SessionAPIResult डेटा संरचना का उपयोग करता है।विश्लेषण इंजन ट्रैक किए गए लॉगऑन/लॉगऑफ़ इवेंट के आधार पर कार्य संचालन घंटों की गणना करता है, विसंगतियों (जैसे कई दिनों तक फैले सत्र) को छोड़कर।
विश्लेषण सबसे लगातार इंटरैक्टिव लॉगऑन की गणना करके किसी भी वर्कस्टेशन या IP पते के स्पष्ट स्वामी को निर्धारित करता है। यह मूल नोड से एक प्राथमिक Owner को बांधता है, साथ ही द्वितीयक Other Users की एक सरणी भी।
यह सॉफ़्टवेयर केवल शैक्षिक, अधिकृत पेनिट्रेशन टेस्टिंग और फोरेंसिक जांच उद्देश्यों के लिए प्रदान किया जाता है। उन नेटवर्कों के विरुद्ध इसका उपयोग न करें जिनके लिए आपके पास संचालित करने की स्पष्ट अनुमति नहीं है।
यह प्रोजेक्ट Apache License 2.0 के तहत लाइसेंस प्राप्त है - LICENSE फ़ाइल देखें।
json/| गुण नाम | प्रकार | मीट्रिक विवरण |
|---|
loghound_avg_start_time | String | उपयोगकर्ता के लिए सभी मान्य दिनों में रिकॉर्ड किए गए औसत पहले लॉगऑन (00:00 HH:MM) की गणना करता है। |
loghound_avg_end_time | String | प्रति दिन रिकॉर्ड किए गए औसत अंतिम गतिविधि (लॉगऑफ़ या अंतिम स्पर्श) की गणना करता है। |
loghound_active_days | Integer | औसत समय सरणियों की गणना करने के लिए उपयोग किए जाने वाले मान्य दिनों की कुल संख्या (कम से कम एक उचित सत्र के साथ)। |
loghound_outside_hours | Boolean | True/False। विशेष रूप से एक नाइट आउल की पहचान करता है। यदि उपयोगकर्ता की गणना की गई सक्रिय प्रारंभ-से-अंत विंडो 22:00 से 06:00 की रात भर की सीमा को ओवरलैप करती है, तो True के रूप में मूल्यांकन करता है। |
Avg Hours per Day | Float | आंतरिक रूप से उपयोगकर्ता के average start time और average end time के बीच सटीक समय अंतर के रूप में गणना की जाती है। (टेक्स्ट/HTML रिपोर्ट में प्रदर्शित)। |