
TUI-आधारित Active Directory डेटा संग्राहक जो LDAP ऑब्जेक्ट्स को ग्रहण करता है, दूरस्थ RPC/SMB/HTTP संग्रह करता है, और आक्रमण पथ विश्लेषण के लिए BloodHound CE-संगत डंप उत्पन्न करता है।
सक्रिय निर्देशिका संग्रह के लिए एक TUI।
इस परियोजना के मुख्य लक्ष्य हैं:
Flashingestor 3 मूलभूत अलग-अलग चरणों LDAP आहरण, दूरस्थ संग्रह और रूपांतरण को लागू करता है, अन्य कलेक्टरों के विपरीत जो निर्दिष्ट विधियों को एक ही चरण में चलाते हैं:
आहरण (Ctrl+l) - LDAP से कच्ची वस्तु विशेषताओं का डेटा एकत्र करता है और इसे output/ldap के अंतर्गत मध्यवर्ती msgpack फ़ाइलों में संग्रहीत करता है। config.yaml में क्वेरी अनुकूलित की जा सकती है।
दूरस्थ (Ctrl+r) - इन मध्यवर्ती फ़ाइलों को मेमोरी में पढ़ता है, एकत्र करने के लिए कंप्यूटरों की सूची की गणना करता है, और Computer और EnterpriseCA ऑब्जेक्ट्स के लिए प्रासंगिक दूरस्थ जानकारी प्राप्त करने के लिए RPC/SMB/HTTP अनुरोधों की एक श्रृंखला निष्पादित करता है, जो output/remote के अंतर्गत संग्रहीत होते हैं।
रूपांतरण (Ctrl+s) - मध्यवर्ती फ़ाइलों को मेमोरी में पढ़ता है, आहरण और दूरस्थ संग्रह चरणों से जानकारी को मर्ज करता है, और output/bloodhound के अंतर्गत BloodHound-संगत डंप उत्पन्न करता है - यह चरण पूरी तरह से ऑफ़लाइन है।
अधिक तकनीकी विवरण और अंतर्दृष्टि के लिए, हमारा 📖 विकी देखें।
$ git clone https://github.com/Macmod/flashingestor
$ cd flashingestor
# To build only:
$ go build ./cmd/flashingestor
# To install the executable to $GOBIN or $GOPATH/bin:
$ go install ./cmd/flashingestor
[!NOTE] आप प्रदान किए गए रिलीज़ से पूर्व-निर्मित बाइनरी का भी उपयोग कर सकते हैं।
निम्नलिखित में से किसी एक के साथ प्रमाणित करें:
# Anonymous
# [Requires dSHeuristics of 0000002 in the DirectoryServices object
# and can have limited visibility due to lack of Read ACEs]
$ ./flashingestor -u '@<DOMAIN>' -p '' [...]
# User + Password
$ ./flashingestor -u <USER>@<DOMAIN> -p <PASSWORD> [-k] [...]
# User + NTHash
$ ./flashingestor -u <USER>@<DOMAIN> -H <NTHASH> [-k] [...]
# User + PFX
$ ./flashingestor -u <USER>@<DOMAIN> --pfx <PFXPATH> [--pfx-password <PFXPASS>] [-k] [...]
# User + PEM
$ ./flashingestor -u <USER>@<DOMAIN> --cert <PEMPATH> --key <KEYPATH> [-k] [...]
# User + AESKey
$ ./flashingestor -u <USER>@<DOMAIN> --aes-key <AESKEY> -k [...]
# User + Ticket
$ ./flashingestor -u <USER>@<DOMAIN> --ccache /path/to/ticket.ccache -k [...]
or
$ KRB5CCNAME=/path/to/ticket.ccache ./flashingestor -u <USER>@<DOMAIN> -k [...]
फिर चाहें तो चरणों को चलाएँ। केवल LDAP संग्रह (DCOnly जिसमें GPOLocalGroup और CertServices अपवाद हैं) के लिए, बस Ctrl+l चलाएँ, जाँचें कि आहरण सफल हुआ या नहीं, और फिर अंतिम डंप उत्पन्न करने के लिए Ctrl+s चलाएँ।
flashingestor चलाने के लिए --dc और --dns निर्दिष्ट करने की अनुशंसा की जाती है। यदि आप --dc निर्दिष्ट नहीं करते हैं, तो flashingestor इसे SRV / A लुकअप के साथ खोजने का प्रयास करेगा, जिससे प्रारंभिक आहरण चरण में देरी हो सकती है।
फिर आपको --dns निर्दिष्ट करना होगा यदि आपका मानक DNS सर्वर डोमेन से अवगत नहीं है - जब AD-एकीकृत DNS उपयोग में हो, तो बस --dns को उस DC की ओर इंगित करें जो इसे होस्ट करता है। इसके अतिरिक्त, --dc की परवाह किए बिना, यदि आप दूरस्थ संग्रह चरण चलाना चाहते हैं और आपका DNS सर्वर डोमेन में कंप्यूटरों से अवगत नहीं है, तो आपको लुकअप के लिए --dns निर्दिष्ट करना होगा।
[!TIP] एकाधिक DC वाले वातावरण में, आप सभी DC के लिए विलंबता को बेंचमार्क करने और आहरण के लिए एक अच्छा लक्ष्य उम्मीदवार खोजने के लिए
dcprobeउपयोगिता का भी उपयोग कर सकते हैं:$ go build ./cmd/dcprobe $ ./dcprobe --dns 192.168.88.6 -d creta.local -r 10
यदि कॉन्फ़िगरेशन फ़ाइल वर्तमान निर्देशिका में config.yaml के रूप में या --config के माध्यम से प्रदान किए गए पथ में मौजूद नहीं है, तो डिफ़ॉल्ट विकल्प (प्रदान की गई config.yaml के समान) मान लिए जाएंगे - वे config/fallback.go में हार्डकोडेड हैं। अधिक जानकारी के लिए, कॉन्फ़िगरेशन फ़ाइल पढ़ें।
लॉग के लिए आउटपुट फ़ाइल निर्दिष्ट करने के लिए --log का उपयोग करने पर विचार करें (यदि आपको TUI बंद करने के बाद उनकी समीक्षा करने की आवश्यकता होगी) और डीबग लॉग संदेश देखने के लिए -vv का उपयोग करें, क्योंकि ये संभावित समस्याओं के समाधान में सहायता कर सकते हैं। कमांड-लाइन तर्कों के पूर्ण संदर्भ के लिए, कमांड-लाइन तर्क पढ़ें।
[!NOTE] प्रदान की गई
config.yamlमें डिफ़ॉल्ट क्वेरीज़ BloodHound रूपांतरण के लिए आवश्यक जानकारी को ध्यान में रखकर डिज़ाइन की गई हैं। आपconfig.yamlमें क्वेरी या विशेषताओं को अनुकूलित करना चुन सकते हैं, लेकिन आवश्यक विशेषताओं को हटाने और खोज फ़िल्टर के अर्थ को बदलने से बचने का प्रयास करना सबसे अच्छा है।
यदि recurse_trusts को true पर सेट किया गया है, तो यह आहरण के लिए प्रदान किए गए प्रारंभिक क्रेडेंशियल के साथ पुनरावर्ती रूप से पाए गए किसी भी विश्वसनीय डोमेन को आहरित करेगा।
यदि search_forest को true पर सेट किया गया है, तो यह Configuration विभाजन से प्रारंभिक डोमेन के समान फ़ॉरेस्ट का हिस्सा डोमेन को आहरित करेगा - कोई अतिरिक्त क्वेरी जारी नहीं की जाएगी, क्योंकि यह पहले से ही डिफ़ॉल्ट आहरण योजना का हिस्सा है। दोनों विकल्प एक साथ सेट किए जा सकते हैं, और flashingestor किसी भी डोमेन को केवल एक बार आहरित करेगा (या तो ट्रस्ट के माध्यम से, या वर्तमान फ़ॉरेस्ट के माध्यम से)।
यदि recurse_trusts सक्षम है और recurse_feasible_only भी true पर सेट है, तो यह केवल एक विश्वसनीय डोमेन को आहरित करने का प्रयास करेगा यदि ट्रस्ट:
इसका मतलब है कि केवल आउटबाउंड ट्रस्ट को पार नहीं किया जाएगा, और ट्रस्ट के पहले स्तर के अलावा, आहरण पथ गैर-संक्रमणीय ट्रस्ट पर रुक जाते हैं - यदि B, A पर गैर-संक्रमणीय रूप से भरोसा करता है, तो A अभी भी B में प्रमाणित कर सकता है; लेकिन यदि C भी B पर गैर-संक्रमणीय रूप से भरोसा करता है, तो A, C में प्रमाणित नहीं कर सकता है।
[!IMPORTANT]
recurse_trusts/search_forestखोजे गए डोमेन में LDAP में केवल स्रोत डोमेन से निर्दिष्ट क्रेडेंशियल के साथ प्रमाणित करेंगे जब प्रदान किए गए क्रेडेंशियल या तोसादा पासवर्डयाNT हैशहों; इस उद्देश्य के लिए रेफरल टिकट जारी करने के लिए TGT का उपयोग करना सैद्धांतिक रूप से संभव है लेकिनadauthलाइब्रेरी में अभी तक लागू नहीं किया गया है।
Macmod/ldapx से मिडलवेयर चेन का उपयोग सीधे flashingestor के साथ -f (--ldapx-filter), -a (--ldapx-attrs) और -b (--ldapx-basedn) विकल्पों का उपयोग करके आहरण चरण में LDAP प्रश्नों को अस्पष्ट करने के लिए किया जा सकता है। -vv के साथ, अस्पष्टीकरण से पहले और बाद की कच्ची क्वेरी भी लॉग में दिखाई जाएंगी।
यदि आप दूरस्थ संग्रह चरण चलाने का इरादा रखते हैं, तो सक्षम methods की जाँच करें - ये मोटे तौर पर SharpHound द्वारा प्रदान की गई विधियों के अनुरूप हैं और RPC या HTTP के माध्यम से विशिष्ट संग्रह को टॉगल करने के लिए उपयोग किए जा सकते हैं।
--remote-* तर्कों का उपयोग दूरस्थ संग्रह के लिए क्रेडेंशियल का एक अलग सेट निर्दिष्ट करने के लिए किया जा सकता है। यदि निर्दिष्ट नहीं किया गया है, तो flashingestor मानक आहरण तर्कों (--user, --password, आदि) में प्रदान किए गए उपयोगकर्ता के लिए समान क्रेडेंशियल का उपयोग करने का प्रयास करेगा।
--remote-user Administrator@. निर्दिष्ट करके दूरस्थ संग्रह के लिए स्थानीय व्यवस्थापक का भी उपयोग किया जा सकता है, उदाहरण के लिए, लेकिन इस दृष्टिकोण की प्रभावशीलता इस बात पर निर्भर करेगी कि खाता अंतर्निहित व्यवस्थापक है या नहीं, और FilterAdministratorToken / LocalAccountTokenFilterPolicy रजिस्ट्री कुंजियों के मानों पर। इस व्यवहार पर अधिक विवरण के लिए, Pass-the-Hash Is Dead: Long Live LocalAccountTokenFilterPolicy देखें।
विकल्प compress_output और cleanup_after_compression डिस्क उपयोग को छोटा रखने में मदद कर सकते हैं। BloodHound में अंतिम डंप लोड करने के बाद आप output/ldap और output/remote के अंतर्गत फ़ाइलों को सुरक्षित रूप से हटा सकते हैं यदि आपको उनकी आवश्यकता नहीं है, लेकिन इन फ़ाइलों को पूर्ण संग्रह को फिर से चलाए बिना महत्वपूर्ण जानकारी देखने के लिए रखा जा सकता है।
[!TIP]
output/ldapऔरoutput/remoteफ़ोल्डरों के अंतर्गतmsgpackफ़ाइलों का प्राथमिक उद्देश्य पूरी प्रक्रिया के लिए जिम्मेदारियों को अलग करने के लिए एक मध्यवर्ती प्रारूप के रूप में कार्य करना है, लेकिन इन फ़ाइलों का उपयोग JSON में परिवर्तित करके जानकारी के स्रोत के रूप में भी किया जा सकता है - इस तरह आपको कच्ची वस्तु विशेषताओं या दूरस्थ संग्रह परिणामों को देखने की आवश्यकता नहीं है:$ go build ./cmd/ingest2json $ ./ingest2json output/ldap/YOURDOMAIN/SelectedFile.msgpack -o output.jsonइन फ़ाइलों का निरीक्षण करने का एक अच्छा तरीका JQ/FX, या आपकी पसंदीदा प्रोग्रामिंग भाषा का उपयोग करना होगा 🙂
एक मुद्दा खोलकर या पुल अनुरोध सबमिट करके योगदान का स्वागत है।
SpecterOps को BloodHound, SharpHound / SharpHoundCommon और dirkjanm को BloodHound.py के लिए बहुत धन्यवाद, जो इस उपकरण के मुख्य संदर्भ थे।
rtpt-erikgeiser & RedTeamPentesting को adauth के लिए और p0dalirius को winacl के लिए धन्यवाद, दोनों बहुत उपयोगी लाइब्रेरी हैं।
oiweiwei को go-msrpc के लिए धन्यवाद, क्योंकि उनकी लाइब्रेरी ने RPC पर आधारित दूरस्थ संग्रह विधियों को लागू करना संभव बनाया।
क्रॉस-डोमेन प्रमाणीकरण के लिए अनुमत विधियों की सीमा के समान, केरबेरोस के साथ दूरस्थ संग्रह चलाते समय (उदाहरण के लिए, जब उपयोगकर्ता Protected Users का हिस्सा हो या जब NTLM प्रमाणीकरण सुरक्षा सेटिंग्स के माध्यम से अवरुद्ध हो) या प्रमाणपत्रों के साथ (जो पर्दे के पीछे PKINIT का उपयोग करता है), दूरस्थ संग्रह उस डोमेन से भिन्न डोमेन के कंप्यूटरों में प्रमाणित करने का प्रयास नहीं करेगा जिसमें उपयोगकर्ता संबंधित है। यह GPOLocalGroup विधि पर भी लागू होता है, जो उन मामलों में अन्य डोमेन के DC से GPO फ़ाइलों को पढ़ने का प्रयास नहीं करेगी, भले ही आहरित डेटा में कई डोमेन हों।
Computer प्रकार के लिए SmbInfo अभी भी एक बुनियादी कार्यान्वयन है (केवल रजिस्ट्री जाँच)।
HttpEnrollmentEndpoints केवल प्रदान किए गए उपयोगकर्ता नाम/पासवर्ड के साथ काम करता है।
AllowedToDelegateTo / ServicePrincipalNames रिज़ॉल्यूशन अभी भी एक बुनियादी कार्यान्वयन है।
SharpHound में लागू किए गए लगभग सभी गुणों का समर्थन किया जाता है, लेकिन इस उपकरण और SharpHound के बीच कई आर्किटेक्चरल अंतर हैं, इसलिए आउटपुट से आधिकारिक कार्यान्वयन से बिल्कुल मेल खाने की उम्मीद न करें (अंतिम बग के अपवाद के साथ)। मुख्य अंतर विशेष रूप से अधिक जटिल कार्यान्वयन, जैसे RPC के माध्यम से दूरस्थ संग्रह और CA/प्रमाणपत्र दुरुपयोग से संबंधित संग्रह के लिए उत्पन्न हो सकते हैं।
टाइमआउट अभी भी अधिकतर स्थिर हैं - SharpHound का कार्यान्वयन एक अनुकूली टाइमआउट का उपयोग करता है (बहुत चतुर!), लेकिन मेरे पास अभी तक इसका अध्ययन करने का समय नहीं है। यदि आवश्यक हो, तो --timeout, --computer-timeout और --method-timeout विकल्पों के साथ टाइमआउट को अनुकूलित करें (config/config.go अन्य ऑपरेशन-विशिष्ट टाइमआउट निर्दिष्ट करता है)।
परीक्षण वर्तमान में लागू नहीं किए गए हैं और मैंने केवल सुविधाओं के एक छोटे उपसमूह का मैन्युअल रूप से परीक्षण किया है।
MIT लाइसेंस (MIT)
कॉपीराइट (c) 2023 Artur Henrique Marzano Gonzaga
इसके द्वारा, किसी भी व्यक्ति को जो इस सॉफ़्टवेयर और संबद्ध दस्तावेज़ फ़ाइलों ("सॉफ़्टवेयर") की एक प्रति प्राप्त करता है, बिना किसी प्रतिबंध के सॉफ़्टवेयर में सौदा करने की अनुमति दी जाती है, जिसमें बिना सीमा के, सॉफ़्टवेयर का उपयोग, प्रतिलिपि, संशोधन, विलय, प्रकाशन, वितरण, उप-लाइसेंस और/या बेचने के अधिकार शामिल हैं, और ऐसा करने वाले व्यक्तियों को सॉफ़्टवेयर प्रदान करने की अनुमति दी जाती है, निम्नलिखित शर्तों के अधीन:
उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सॉफ़्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल किए जाएंगे।
सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, स्पष्ट या निहित, जिसमें बिना सीमा के व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन की वारंटी शामिल है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध की कार्रवाई, अपकृत्य या अन्यथा से उत्पन्न हो, सॉफ़्टवेयर से या सॉफ़्टवेयर के उपयोग या अन्य सौदों से संबंधित हो।