
pyCobaltHound Cobalt Strike के लिए एक Aggressor स्क्रिप्ट एक्सटेंशन है जिसका उद्देश्य Cobalt Strike और Bloodhound के बीच गहरा एकीकरण प्रदान करना है।
pyCobaltHound Cobalt Strike के लिए एक Aggressor स्क्रिप्ट एक्सटेंशन है जिसका उद्देश्य Cobalt Strike और Bloodhound के बीच गहन एकीकरण प्रदान करना है।
pyCobaltHound रेड टीम ऑपरेटरों की सहायता करने का प्रयास करता है:
BloodHound डेटाबेस से क्वेरी करना।इसे पूरा करने के लिए, pyCobaltHound अंतर्निहित क्वेरीज़ के एक सेट का उपयोग करता है। ऑपरेटर अपनी स्वयं की क्वेरीज़ जोड़/हटा भी सकते हैं ताकि pyCobaltHound की निगरानी क्षमताओं को ठीक से ट्यून किया जा सके। यह उन्हें अभियानों के दौरान pyCobaltHound को तुरंत अनुकूलित करने की लचीलापन प्रदान करता है, ताकि अभियान-विशिष्ट लक्ष्यों (उपयोगकर्ता, होस्ट आदि) को ध्यान में रखा जा सके।
pyCobaltHound को स्थापित करने के लिए इस रिपॉजिटरी को क्लोन करें। शामिल सबमॉड्यूल को भी क्लोन करना न भूलें!
आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesसुनिश्चित करें कि निम्नलिखित निर्भरताएँ सही ढंग से स्थापित हैं:
PyCobalt Cobalt Strike के लिए एक Python API है। यह कई Aggressor फ़ंक्शन को सीधे Python से उपयोग करने के लिए प्रस्तुत करता है।
सुनिश्चित करें कि आपके पास Python3+ स्थापित है। जबकि PyCobalt macOS और Windows पर भी काम कर सकता है, हमने वास्तव में इसका परीक्षण केवल Linux पर किया है।
PyCobalt Python लाइब्रेरी का उपयोग करने के दो तरीके हैं:
pyCobaltHound इस दृष्टिकोण को अपनाता है, Python प्रोग्राम के अंदर sys.path वेरिएबल का उपयोग करके खोज पथ सेट करता है।PyCobalt Python लाइब्रेरी स्थापित करें। ऐसा करने के लिए, python3 setup.py install चलाएं। आपको pycobalthound.py को संशोधित करना होगा ताकि यह सुनिश्चित हो सके कि यह शामिल रिपॉजिटरी के बजाय स्थापित लाइब्रेरी का उपयोग करता है।ध्यान दें कि भविष्य में PyCobalt परियोजना के रखरखाव की कोई गारंटी नहीं है। वास्तव में, परियोजना में नवीनतम अपडेट Cobalt Strike 4.2 में किए गए परिवर्तनों को शामिल करना था। चूंकि pyCobaltHound वास्तव में Cobalt Strike और इसके ऑपरेटर के साथ इंटरफेस करने के लिए केवल बुनियादी Aggressor फ़ंक्शन का उपयोग करता है, यह pyCobaltHound के लिए कोई बड़ी समस्या नहीं है।
इस परियोजना में उपयोग किया गया PyCobalt सबमॉड्यूल हमारे द्वारा किया गया एक फोर्क है। हालाँकि, हम PyCobalt रिपॉजिटरी को नियंत्रित नहीं करते हैं।
PyCobalt चल रहे Python स्क्रिप्ट को प्रबंधित करने के लिए कुछ Script Console कमांड के साथ आता है। जब आप अपनी Aggressor स्क्रिप्ट को रीलोड करते हैं, तो आपको पहले Python स्क्रिप्ट को स्पष्ट रूप से रोक देना चाहिए। अन्यथा वे कुछ किए बिना हमेशा चलती रहेंगी। pyCobaltHound के विकास के दौरान हमने देखा कि इससे अपरिभाषित व्यवहार भी हो सकता है।
pyCobaltHound को रीलोड करना निम्नानुसार किया जा सकता है:
aggressor> python-stop-all`
[pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
[pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
aggressor> reload example.cna`
[pycobalt] Executing script /root/pycobalthound/pycobalthound.py
PyCobalt के ठीक से काम करने के लिए आप केवल एक Aggressor स्क्रिप्ट में PyCobalt को कॉल कर सकते हैं। यदि आप pyCobaltHound को अन्य Aggressor स्क्रिप्ट के साथ उपयोग करना चाहते हैं जो PyCobalt का उपयोग करते हैं, तो इसे ध्यान में रखें। हमारा दृष्टिकोण प्रत्येक PyCobalt आधारित टूल के लिए python() और include() के कॉल के साथ एक Aggressor स्क्रिप्ट रखना है।
notify2 Linux पर डेस्कटॉप सूचनाएं प्रदर्शित करने का एक पैकेज है (या था)। जैसा कि हम बाद में देखेंगे, pyCobaltHound ऑपरेटर को सूचित करने के कुछ तरीकों का समर्थन करता है। notify2 का उपयोग Linux पर D-Bus के माध्यम से नोटिफिकेशन डेमॉन को सूचनाएं भेजने के लिए किया जाता है।
इसे सक्षम करने के लिए, notify2 को निम्नलिखित का उपयोग करके स्थापित करने की आवश्यकता है:
pip install notify2
Cobalt Strike में pyCobaltHound का उपयोग करना उतना ही सरल है जितना कि अपने क्लाइंट में pycobalthound.cna Aggressor स्क्रिप्ट को आयात करना। एक बार यह हो जाने के बाद, आपको अपने Cobalt Strike मेन्यूबार में pyCobaltHound मेनू दिखाई देना चाहिए।

pyCobaltHound का प्रारंभिक लक्ष्य नई प्रविष्टियों के लिए Cobalt Strike के क्रेडेंशियल कैश (View > Credentials) की निगरानी करना था। यह Cobalt Strike द्वारा क्रेडेंशियल स्टोर में परिवर्तन होने पर फायर किए जाने वाले on_credentials इवेंट पर प्रतिक्रिया करके ऐसा करता है।
जब यह इवेंट फायर होता है, तो pyCobaltHound निम्नलिखित करेगा:
Cobalt Strike से प्राप्त डेटा को पार्स और मान्य करेंBloodHound डेटाबेस में मौजूद हैंBloodHound डेटाबेस से क्वेरी करेंचूंकि यह सब मुख्य Cobalt Strike क्लाइंट से अतुल्यकालिक रूप से होता है, इसलिए इस प्रक्रिया को आपके UI को अवरुद्ध नहीं करना चाहिए, ताकि आप pyCobaltHound के पृष्ठभूमि में जांच करते रहने के दौरान काम करते रह सकें।
pyCobaltHound एकाधिक टीमसर्वर का उपयोग करते समय समस्याओं को रोकने के लिए प्रति टीमसर्वर अलग-अलग कैश का उपयोग करता है।
कभी-कभी ऐसी स्थितियाँ होती हैं जहाँ आप विशिष्ट उपयोगकर्ताओं (या संपूर्ण क्रेडेंशियल स्टोर) की फिर से जांच करना चाहते हैं। ऐसा तब हो सकता है जब आपने BloodHound डेटाबेस में नया डेटा अपलोड किया हो।
चूंकि pyCobaltHound ने आपके क्रेडेंशियल स्टोर में सभी संस्थाओं की पहले ही जांच कर ली होनी चाहिए (और इसलिए कैश कर लिया है), यह कुछ ऑपरेटर हस्तक्षेप के बिना इस नए डेटा के विरुद्ध उनका मूल्यांकन नहीं करेगा।
ऑपरेटरों के लिए यह नियंत्रित करने के लिए दो विधियाँ उपलब्ध हैं कि कौन सी संस्थाएँ कैश की गई हैं।
ऐसे मामलों में जहाँ आप कैश से किसी विशिष्ट इकाई (या एकाधिक) को हटाना चाहते हैं, आप क्रेडेंशियल व्यूअर (View > Credentials) में ऐसा कर सकते हैं। बस अपने लक्ष्य(ों) का चयन करें और pyCobaltHound मेनू प्रविष्टि के तहत remove from cache विकल्प पर क्लिक करें।
ऐसे मामलों में जहाँ आप कैश से सभी संस्थाओं को हटाना चाहते हैं, आप pyCobaltHound के मुख्य मेनू (Cobalt Strike > pyCobaltHound > Wipe cache) में ऐसा कर सकते हैं। यह तब सबसे उपयोगी होता है जब आप अपने पूरे क्रेडेंशियल स्टोर का पुनर्मूल्यांकन करना चाहते हैं।

अपने लक्ष्यों को कैश से हटाने के बाद, आप मैन्युअल रूप से pyCobaltHound को क्रेडेंशियल स्टोर की सामग्री की फिर से जांच करने के लिए प्रॉम्प्ट कर सकते हैं। यह बिल्कुल उपरोक्त प्रक्रिया का पालन करता है।
pyCobaltHound में मौजूदा बीकन सत्रों के साथ बातचीत करने की कार्यक्षमता शामिल है। यह बीकन संदर्भ मेनू में पाया जा सकता है। ध्यान दें कि इन कमांड को एकल बीकन या बीकन के चयन पर निष्पादित किया जा सकता है।