
AD Miner एक Active Directory ऑडिट टूल है जो #Bloodhound ग्राफ डेटाबेस से डेटा को क्रंच करने और सुरक्षा कमजोरियों का पता लगाने के लिए साइफर क्वेरी का उपयोग करता है।
वेब-आधारित रिपोर्ट की विशेषताएं:
Active Directory कमज़ोरियों की जोखिम-आधारित रेटिंग, साथ ही व्यापक शमन पथ।
खोज पट्टी और नियंत्रण जो सबसे जोखिमपूर्ण गलत कॉन्फ़िगरेशन की पहचान करने के लिए सावधानीपूर्वक तैयार किए गए हैं।
आप शमन दक्षता मापने में मदद के लिए समय के साथ संकेतकों का भी निरीक्षण कर सकते हैं।
AD Miner मूल रूप से Forvis Mazars द्वारा बनाया गया था और इसका रखरखाव Grant Thornton Cybersecurity Audit & Advisory Team द्वारा किया जाता है।
AD Miner चलाने के लिए, आपको सबसे पहले एक neo4j डेटाबेस की आवश्यकता है जिसमें Active Directory ऑब्जेक्ट हों:
[!सावधानी] हम दृढ़ता से BloodHound Automation का उपयोग करने की अनुशंसा करते हैं, क्योंकि यह Graph Data Science Neo4j प्लगइन स्थापित करता है, जो:
- गणना समय और समग्र प्रदर्शन में काफी सुधार करता है।
- अंतर्निहित Neo4j shortestPath() के बजाय Smartest Path का उपयोग सक्षम करता है (अर्थात, वे पथ जिनका शोषण करना आसान है बजाय कम से कम नोड हॉप्स के)।
अपना BloodHound वातावरण (GUI और Neo4j डेटाबेस सहित) स्थापित करने के लिए, BloodHound Automation अत्यधिक अनुशंसित है क्योंकि इसका Graph Data Science प्लगइन के साथ सहज एकीकरण है। हालाँकि डिफ़ॉल्ट BloodHound CE इंस्टालेशन का उपयोग करना पूरी तरह से ठीक है, ध्यान रखें कि आप GDS के लाभों (जैसे, स्मार्ट पथ खोज, बेहतर निष्पादन गति, आदि) से वंचित रह जाएंगे।
डिफ़ॉल्ट रूप से, BloodHound पोर्ट 7687 पर एक neo4j बेस बनाता है जिसे एक्सेस किया जा सकता है।
सबसे आसान तरीका pipx का उपयोग करके निम्नलिखित कमांड करना है:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner कुछ Linux वितरणों पर भी उपलब्ध है:
pacman -S ad-minernix-env -iA nixos.ad-minerएक Docker इमेज बनाने के लिए उपलब्ध है। निम्नलिखित कमांड से इमेज बनाएं:
docker build -t ad-miner .
Windows पर BloodHound Community Edition डेटा के साथ इसे चलाने के लिए, नीचे दिए गए कमांड का उपयोग करें:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Linux पर BloodHound Community Edition डेटा के साथ इसे चलाने के लिए, नीचे दिए गए कमांड का उपयोग करें:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
ध्यान दें कि -v के साथ वॉल्यूम माउंट करना डेटा का आउटपुट प्राप्त करने के लिए महत्वपूर्ण है। यह मानता है कि BHCE सर्वर डिफ़ॉल्ट सेटिंग्स के साथ Docker होस्ट पर चल रहा है।
टूल चलाएं:
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
उदाहरण:
AD-miner -cf My_Report -u neo4j -p mypassword
प्रत्येक Neo4j अनुरोध के पूरा होने पर कैश फ़ाइलें उत्पन्न होती हैं। यह सुविधा आपको अपनी प्रक्रिया के दौरान किसी भी बिंदु पर AD Miner को पहले से गणना किए गए परिणामों को खोए बिना रोकने या बंद करने की अनुमति देती है। कैश का लाभ उठाने के लिए, -c पैरामीटर का उपयोग करें। कैश फ़ाइलें आपके वर्तमान रिपॉजिटरी में cache_neo4j फ़ोल्डर में संग्रहीत की जाती हैं। कैश का उपयोग करने के लिए, रिपोर्ट का नाम कैश फ़ाइल के नाम उपसर्ग से मेल खाना चाहिए:
AD-miner -c -cf My_Report -u neo4j -p mypassword
बड़े डेटा सेट को बेहतर ढंग से संभालने के लिए, मल्टी-थ्रेडिंग सक्षम करना और neo4j डेटाबेस के क्लस्टर का उपयोग करना संभव है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है (जहाँ server1 32 थ्रेड और server2 16 को संभालता है):
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
यदि पासवर्ड नवीनीकरण नीति ज्ञात है, तो आप यह सुनिश्चित करने के लिए -r पैरामीटर का उपयोग करके इसे निर्दिष्ट कर सकते हैं कि पासवर्ड नवीनीकरण नियंत्रण आपके वातावरण की सेटिंग्स के अनुरूप हों (डिफ़ॉल्ट 90 दिन है)। उदाहरण के लिए, यदि पासवर्ड नीति 180 दिनों पर सेट है, तो आप निम्न का उपयोग कर सकते हैं:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] Bloodhound CE neo4j डेटाबेस का डिफ़ॉल्ट पासवर्ड
bloodhoundcommunityeditionयाneo5jहै यदि आप BloodHound Automation का उपयोग करते हैं
विकल्प:
-h, --help यह सहायता संदेश दिखाएं और बाहर निकलें
-b BOLT, --bolt BOLT Neo4j बोल्ट कनेक्शन (डिफ़ॉल्ट: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Neo4j उपयोगकर्ता नाम (डिफ़ॉल्ट: neo4j)
-p PASSWORD, --password PASSWORD
Neo4j पासवर्ड (डिफ़ॉल्ट: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
निष्कर्षण तिथि (जैसे, 20220131)। डिफ़ॉल्ट: अंतिम लॉगऑन तिथि
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
पासवर्ड नवीनीकरण नीति दिनों में। डिफ़ॉल्ट: 90
-c, --cache Neo4j डेटा के लिए स्थानीय फ़ाइल का उपयोग करें
-l LEVEL, --level LEVEL
पथ क्वेरीज़ के लिए पुनरावर्ती स्तर
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
उपयोग करने के लिए कैश फ़ाइल (एकाधिक कंपनी कैश फ़ाइलों के मामले में)
--gpo_low GPO के लिए तेज़ लेकिन अपूर्ण क्वेरी करें (नियमित क्वेरी से तेज़)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
समानांतर neo4j अनुरोधों के लिए चंक्स की संख्या। डिफ़ॉल्ट: CPU की संख्या * 20
-co NB_CORES, --nb_cores NB_CORES
समानांतर neo4j अनुरोधों के लिए कोर की संख्या। डिफ़ॉल्ट: CPU की संख्या
--rdp ग्राफ़ में CanRDP किनारे को शामिल करें
--evolution EVOLUTION
समय के साथ विकास: json डेटा फ़ाइलों का स्थान। उदा.: '../../tests/'
--cluster CLUSTER समानांतर neo4j क्वेरी चलाने के लिए क्लस्टर के नोड। उदा.: host1:port1:nCore1,host2:port2:nCore2,...
ग्राफ़ पृष्ठों में, आप ग्राफ़ नोड्स पर राइट-क्लिक करके उन्हें क्लस्टर कर सकते हैं या क्लस्टर खोल सकते हैं।
यदि आपके पास समय के साथ कई AD-Miner रिपोर्ट हैं, तो आप --evolution तर्क के साथ आसानी से विकास को ट्रैक कर सकते हैं: प्रत्येक AD-Miner रिपोर्ट index.html फ़ाइल के साथ एक JSON डेटा फ़ाइल उत्पन्न करती है। आपको बस इन विभिन्न JSON फ़ाइलों को एक फ़ोल्डर में इकट्ठा करना होगा और --evolution तर्क के बाद उस फ़ोल्डर का पथ निर्दिष्ट करना होगा।
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
मुख्य पृष्ठ पर एक 'समय के साथ विकास' टैब दिखाई देता है, जो प्रत्येक श्रेणी (अनुमतियाँ, पासवर्ड, Kerberos और Misc) के लिए विकास ग्राफ़ प्रदान करता है।
प्रत्येक नियंत्रण के लिए विस्तृत विकास भी उपलब्ध है और प्रत्येक श्रेणी के लिए "विकास दिखाएं" बटन के माध्यम से पहुँचा जा सकता है। समय के साथ सूक्ष्म भिन्नताओं को बेहतर ढंग से उजागर करने के लिए एक लघुगणकीय पैमाना उपलब्ध है।
AD Miner उनके वास्तविक शोषण क्षमता के आधार पर पथों की गणना कर सकता है। वास्तव में, कभी-कभी सबसे छोटा पथ दोहन करना कठिन होता है (यहाँ HasSession से पहले ExecuteDCOM के कारण)।
जबकि एक लंबा लेकिन सरल पथ मौजूद है (यहाँ ExecuteDCOM के बजाय MemberOf और AdminTo के साथ)।
AD Miner स्वचालित रूप से स्मार्टेस्ट पथ मोड पर स्विच हो जाता है जब आपके neo4j डेटाबेस में Graph Data Science प्लगइन स्थापित होता है (https://neo4j.com/docs/graph-data-science/current/)।
इस प्लगइन को स्थापित करने का सबसे आसान तरीका आपके neo4j डॉकर में एक पर्यावरण चर परिभाषित करना है: NEO4J_PLUGINS=["graph-data-science"] (यह BloodHound Automation के साथ डिफ़ॉल्ट रूप से स्थापित होता है)।
वर्तमान में, 10 नियंत्रण पूर्ण ग्राफ़ कवरेज का उपयोग करते हैं और विश्लेषण के लिए स्मार्टेस्ट पथों को अनुकूलित करते हैं।
निम्नलिखित AD Miner में पहले से कार्यान्वित नियंत्रणों की सूची प्रदान करता है:
यहाँ देखें कि कैसे योगदान करें।
| श्रेणी | विवरण | श्रेणी | विवरण |
|---|
| Kerberos | AS-REP Roast योग्य खाते | Misc | पुराने OS वाले कंप्यूटर | |
| Kerberos | Kerberoast योग्य खाते | Misc | निष्क्रिय खाते | |
| Kerberos | Kerberos प्रतिबंधित प्रतिनिधि | Misc | डोमेन का कार्यात्मक स्तर | |
| Kerberos | कंप्यूटरों के विरुद्ध Kerberos RBCD | Misc | भूत कंप्यूटर | |
| Kerberos | Kerberos अप्रतिबंधित प्रतिनिधि | Misc | बिना किसी सदस्य के समूह | |
| Kerberos | पुराना KRBTGT पासवर्ड | Misc | बिना किसी सदस्य के OU | |
| Kerberos | विशेषाधिकार प्राप्त खातों पर शैडो क्रेडेंशियल्स | Misc | डोमेन नियंत्रकों पर शैडो क्रेडेंशियल्स | |
| Kerberos | सामान्य खातों पर शैडो क्रेडेंशियल्स | Misc | अप्रत्याशित PrimaryGroupID | |
| पासवर्ड | LAPS पासवर्ड तक पहुंच | Misc | उपयोगकर्ता FGPP | |
| पासवर्ड | LAPS के बिना कंप्यूटर | अनुमतियाँ | ACL विसंगतियाँ | |
| पासवर्ड | ऑब्जेक्ट प्रशासकों के GMSA पासवर्ड पढ़ सकते हैं | अनुमतियाँ | हमले के पथों के अवरोध बिंदु | |
| पासवर्ड | पासवर्ड आवश्यकता को दरकिनार करना | अनुमतियाँ | कंप्यूटर जो अन्य कंप्यूटरों के प्रशासक हैं | |
| पासवर्ड | स्पष्ट पाठ पासवर्ड वाले उपयोगकर्ता | अनुमतियाँ | डोमेन प्रशासक के लिए क्रॉस-डोमेन पथ | |
| पासवर्ड | पुराने पासवर्ड वाले उपयोगकर्ता | अनुमतियाँ | अतिथि खाते | |
| पासवर्ड | पासवर्ड समाप्ति के बिना उपयोगकर्ता | अनुमतियाँ | DCSync विशेषाधिकारों तक अपर्याप्त पहुंच | |
| अनुमतियाँ | अपर्याप्त AdminCount सेटिंग्स | अनुमतियाँ | अपर्याप्त GPO संशोधन विशेषाधिकार | |
| अनुमतियाँ | डोमेन प्रशासकों की अपर्याप्त संख्या | अनुमतियाँ | अपर्याप्त विशेषाधिकारों वाले मशीन खाते | |
| अनुमतियाँ | अपर्याप्त विशेषाधिकारों वाले मशीन खाते | अनुमतियाँ | ADCS पर गैर-स्तर 0 स्थानीय प्रशासक विशेषाधिकार | |
| अनुमतियाँ | SID इतिहास वाले ऑब्जेक्ट | अनुमतियाँ | DNS प्रशासकों के पथ | |
| अनुमतियाँ | डोमेन प्रशासकों के पथ | अनुमतियाँ | ऑपरेटर समूहों के पथ | |
| अनुमतियाँ | संगठनात्मक इकाइयों (OU) के पथ | अनुमतियाँ | सर्वरों के पथ | |
| अनुमतियाँ | AdminSDHolder कंटेनर के पथ | अनुमतियाँ | "Pre-Windows 2000 Compatible Access" समूह | |
| अनुमतियाँ | संरक्षित उपयोगकर्ता समूह के बाहर विशेषाधिकार प्राप्त खाता | अनुमतियाँ | RDP पहुंच (कंप्यूटर) | |
| अनुमतियाँ | RDP पहुंच (उपयोगकर्ता) | अनुमतियाँ | स्तर-0 उल्लंघन (सत्र) | |
| अनुमतियाँ | शक्तिशाली क्रॉस-डोमेन विशेषाधिकार वाले उपयोगकर्ता | अनुमतियाँ | स्थानीय प्रशासक विशेषाधिकार वाले उपयोगकर्ता |
| श्रेणी | विवरण | श्रेणी | विवरण |
|---|
| Entra ID Misc | Azure निष्क्रिय खाते | Entra ID MS Graph | MS Graph के प्रत्यक्ष नियंत्रक | |
| Entra ID पासवर्ड | Entra ID पासवर्ड रीसेट विशेषाधिकार | Entra ID MS Graph | ऑन-प्रिमाइस सिंक न किए गए Entra ID खाते | |
| Entra ID पासवर्ड | असंगत अंतिम पासवर्ड परिवर्तन | Entra ID MS Graph | अक्षम जुड़वां खाते वाले सिंक किए गए खाते | |
| Entra ID अनुमतियाँ | विशेषाधिकार प्राप्त Entra ID भूमिकाओं तक पहुंच | Entra ID अनुमतियाँ | ऑन-प्रिमाइस और Azure दोनों पर विशेषाधिकार प्राप्त खाते | |
| Entra ID अनुमतियाँ | ऑन-प्रिमाइस/Entra ID क्रॉस पथ से स्तर-0 तक | Entra ID अनुमतियाँ | AADConnect से संबंधित संभावित उपयोगकर्ता | |
| Entra ID अनुमतियाँ | उच्च मूल्य लक्ष्यों वाले Entra ID उपयोगकर्ता |