
Aggrokatz एक आक्रामक प्लगइन एक्सटेंशन है जो Cobalt Strike के लिए है, जो pypykatz को बीकन के साथ दूरस्थ रूप से इंटरफेस करने में सक्षम बनाता है और इसे LSASS डंप फ़ाइलों और रजिस्ट्री हाइव फ़ाइलों को पार्स करके फ़ाइल डाउनलोड किए बिना और बीकन पर कोई संदिग्ध कोड अपलोड किए बिना क्रेडेंशियल्स और अन्य संग्रहीत रहस्यों को निकालने की अनुमति देता है।

aggrokatz एक Aggressor प्लगइन एक्सटेंशन है CobaltStrike के लिए, जो pypykatz को बीकन के साथ दूरस्थ रूप से इंटरफ़ेस करने में सक्षम बनाता है।
aggrokatz का वर्तमान संस्करण pypykatz को LSASS डंप फ़ाइलों और Registry Hive फ़ाइलों को पार्स करने की अनुमति देता है ताकि क्रेडेंशियल और अन्य रहस्यों को निकाला जा सके, बिना फ़ाइल डाउनलोड किए और बिना कोई संदिग्ध कोड बीकन पर अपलोड किए (Cobalt Strike तो पहले से ही है)।
भविष्य में इस परियोजना का उद्देश्य गुप्त ऑपरेशनों के लिए अतिरिक्त सुविधाएँ प्रदान करना है, जैसे कि सभी DPAPI रहस्यों/केर्बेरोस्टिंग आदि की खोज और डिक्रिप्ट करना।
हमने इस टूल रिलीज़ के लिए एक छोटा blog post प्रकाशित किया है, जिसमें कुछ स्क्रीनशॉट भी शामिल हैं।
LSASS/Registry डंप करना इस प्रोजेक्ट का लक्ष्य नहीं है, केवल पार्स करना है। कारण:
CredBandit के एक संशोधित संस्करण का उपयोग करना शुरू किया है जो बेस64 के बजाय डिस्क पर रॉ बाइट्स डंप करता है। बढ़िया टूल, इसे देखें।CS क्लाइंट में, यदि आपने स्क्रिप्ट को संशोधित किया है तो "reload" का उपयोग न करें या मैन्युअल रूप से अनलोड और फिर से लोड करने का प्रयास न करें। आपको इसे अनलोड करना होगा, क्लाइंट को बंद करना होगा और फिर से शुरू करना होगा, फिर संशोधित स्क्रिप्ट को लोड करना होगा। अन्यथा आपके पास एक साथ कई संस्करण चल रहे होंगे और बहुत सारी त्रुटियाँ और अजीब व्यवहार होंगे!
दूरस्थ सिरे पर LSASS/Registry फ़ाइलों को पार्स करते समय कृपया उस विशेष बीकन के साथ इंटरैक्ट न करें जिस पर आपने स्क्रिप्ट शुरू की थी। सामान्यतः इससे कोई समस्या नहीं होगी, लेकिन मैं कोई गारंटी नहीं दे सकता।
pycobalt को स्थापित और सेटअप करना होगा। उनके गिटहब पेज पर एक readme है।pypykatz स्थापित करना होगा, संस्करण >=0.4.8 होना चाहिएaggressor.cna फ़ाइल सेटअप है और आपके पायथन इंटरप्रेटर के स्थान के बारे में जानता हैaggrokatz.cna में pycobalt_path को pycobalt.cna की ओर इंगित करने के लिए बदलेंView > Script Console और Cobalt Strike > Script Manager विंडो का उपयोग करें। Script Manager का उपयोग करके aggkatz.cna स्क्रिप्ट लोड करें।aggkatz.cna स्क्रिप्ट सफलतापूर्वक लोड हुई, तो आपको बीकन पर राइट-क्लिक करने पर एक नया मेनू आइटम pypykatz दिखाई देगा।Script Console विंडो में डीबग संदेश दिखाई देंगे।Script Console विंडो और बीकन की अपनी विंडो दोनों में प्रदर्शित होंगे।LSASS file: रिमोट कंप्यूटर पर lsass.dmp फ़ाइल का स्थान। आप SMB पर साझा lsass.dmp फ़ाइलों तक पहुँचने के लिए UNC पथों का भी उपयोग कर सकते हैं।chunksize : अधिकतम मात्रा जो एक बार में पढ़ी जाएगीBOF file : BOF फ़ाइल (Beacon Object File) जो चंक्ड रीड को अनुमति देती है। यह फ़ाइल प्रत्येक बार जब कोई नया चंक पढ़ा जाता है, अपलोड और निष्पादित (इन-मेमोरी) की जाएगी।(module) : निर्दिष्ट करता है कि कौन से मॉड्यूल पार्स किए जाएंगे। डिफ़ॉल्ट: allOutput : आउटपुट प्रारूप निर्दिष्ट करता हैPopulate Credential tab : सफल पार्सिंग के बाद प्राप्त सभी क्रेडेंशियल Cobalt Strike के क्रेडेंशियल टैब पर उपलब्ध होंगे। यह सुविधा बीटा में हैDelete remote file after parsing : सफल पार्सिंग के बाद LSASS डंप फ़ाइल लक्ष्य से हटा दी जाएगीSYSTEM file: रिमोट कंप्यूटर पर SYSTEM.reg फ़ाइल का स्थान। आप SMB पर साझा फ़ाइलों तक पहुँचने के लिए UNC पथों का भी उपयोग कर सकते हैं।SAM file (optional): रिमोट कंप्यूटर पर SAM.reg फ़ाइल का स्थान। आप SMB पर साझा फ़ाइलों तक पहुँचने के लिए UNC पथों का भी उपयोग कर सकते हैं।SECURITY file (optional): रिमोट कंप्यूटर पर SECURITY.reg फ़ाइल का स्थान। आप SMB पर साझा फ़ाइलों तक पहुँचने के लिए UNC पथों का भी उपयोग कर सकते हैं।SOFTWARE file (optional): रिमोट कंप्यूटर पर SOFTWARE.reg फ़ाइल का स्थान। आप SMB पर साझा फ़ाइलों तक पहुँचने के लिए UNC पथों का भी उपयोग कर सकते हैं।chunksize : अधिकतम मात्रा जो एक बार में पढ़ी जाएगीBOF file : BOF फ़ाइल (Beacon Object File) जो चंक्ड रीड को अनुमति देती है। यह फ़ाइल प्रत्येक बार जब कोई नया चंक पढ़ा जाता है, अपलोड और निष्पादित (इन-मेमोरी) की जाएगी।Output : आउटपुट प्रारूप निर्दिष्ट करता हैफ़ाइल रीड BOF वर्तमान में 4Gb तक की फ़ाइल रीड का समर्थन करता है। कुछ संशोधनों के साथ इसे बढ़ाया जा सकता है, लेकिन अब तक ऐसी बड़ी फ़ाइलें देखी नहीं गई हैं।
सामान्यतः pypykatz का पार्सर डिस्क पर फ़ाइल रीड ऑपरेशनों की एक श्रृंखला करता है, लेकिन aggrokatz की मदद से ये रीड ऑपरेशन बीकन पर एक विशेष रूप से तैयार BOF (Beacon Object File) के माध्यम से टनेल किए जाते हैं जो रिमोट फ़ाइल सामग्री को चंक में पढ़ने की अनुमति देता है। यह pypykatz को पूरी फ़ाइल को पढ़े बिना रिमोट फ़ाइलों से सभी रहस्यों को निकालने में सक्षम बनाता है, केवल उन आवश्यक चंकों को पकड़कर जहाँ रहस्य स्थित हैं।
पूरी प्रक्रिया की पूरी तस्वीर प्राप्त करने के लिए, हमें दो भागों पर प्रकाश डालना होगा:
pypykatz कैसे CobaltStrike के साथ एकीकृत होता हैpypykatz पूरी फ़ाइल पढ़े बिना क्रेडेंशियल निष्कर्षण कैसे करता हैCobaltStrike (एजेंट) Java में लिखा गया है, pypykatz Python में लिखा गया है। यह एक समस्या है। हमारे लिए भाग्यशाली है कि एक अज्ञात इकाई ने pycobalt बनाया है जो दो दुनियाओं के बीच एक साफ-सुथरा इंटरफ़ेस प्रदान करता है, जिसमें उपयोगी APIs शामिल हैं जिन्हें सीधे Python से लागू किया जा सकता है। pycobalt एक शानदार इंजीनियरिंग का टुकड़ा होने के बावजूद, इसके साथ कुछ समस्याएँ/कमियाँ हैं जिन्हें हमें इंगित करना होगा:
pycobalt प्रोजेक्ट पर भरोसा करने के बारे में:pycobalt प्रोजेक्ट भविष्य में बनाए रखा जाएगा।pycobalt के विकास के किसी भी पहलू को नियंत्रित नहीं करते हैं।pycobalt और CobaltStrike के बीच कुछ एन्कोडिंग समस्याएँ हैं। इसके परिणामस्वरूप कुछ API कॉल्स ऐसे बाइट्स लौटाती हैं जिनका उपयोग नहीं किया जा सकता क्योंकि एन्कोडर द्वारा कुछ बाइट्स खराब हो जाते हैं। कोड की जाँच करके हम निष्कर्ष निकालते हैं कि अधिकांश एन्कोडिंग/डीकोडिंग समस्याएँ इसलिए हैं क्योंकि pycobalt Java प्रक्रिया के साथ संवाद करने के लिए STDOUT/STDIN का उपयोग करता है।bof_pack API कॉल, जो इस प्रोजेक्ट के लिए महत्वपूर्ण है, को शुद्ध-aggressor स्क्रिप्ट के रूप में लागू करना पड़ा और केवल बुनियादी डेटा संरचनाओं (स्ट्रिंग और int) का उपयोग करके Python से लागू किया गया, बाइट्स का उपयोग नहीं किया गया।pycobalt पैकेज द्वारा प्रदान किए गए केवल ब्लॉकिंग APIs बिना थ्रेडिंग समर्थन के। कम से कम, हमने देखा कि थ्रेडिंग बेतरतीब ढंग से टूट जाती है, लेकिन हमने कुछ हद तक इसकी उम्मीद की थी।pypykatz और इसके साथी मॉड्यूल minidump को संशोधित करना पड़ा ताकि पहले से लागू की तुलना में अधिक कुशल चंकड पार्सिंग की अनुमति मिल सके, लेकिन यह किसी और दिन की बात है।
pypykatz के pycobalt के माध्यम से CobaltStrike के साथ इंटरफ़ेस करने में सक्षम होने के बाद अगला कदम चंकड फ़ाइल रीडिंग की अनुमति देना था। दुर्भाग्य से यह सुविधा हमारे द्वारा देखे गए किसी भी C2 समाधान में डिफ़ॉल्ट रूप से उपलब्ध नहीं है, इसलिए हमें इसे लागू करना पड़ा। हमने इस समस्या को हल करने का तरीका यह है कि CobaltStrike के Beacon Object Files इंटरफ़ेस का उपयोग करके चंकड रीडिंग लागू किया जाए, जिसे BOF के रूप में जाना जाता है। BOFs C प्रोग्राम होते हैं जो बीकन पर एक अलग निष्पादन योग्य के रूप में नहीं बल्कि पहले से चल रहे बीकन के भाग के रूप में चलते हैं। यह इंटरफ़ेस अत्यंत उपयोगी है क्योंकि यह BOFs को और अधिक गुप्त बनाता है क्योंकि सभी कोड मेमोरी में निष्पादित होता है, डिस्क पर कुछ भी नहीं लिखा जाता है।
हमारा BOF समाधान एक सरल फ़ंक्शन है और 4 तर्क लेता है:
fileName : LSASS डंप फ़ाइल या registry hive का पूर्ण फ़ाइल पथ (रिमोट एंड पर)buffsize : फ़ाइल से पढ़ी जाने वाली मात्रा (बाइट्स में)seekSize : वह स्थान जहाँ फ़ाइल रीड ऑपरेशन शुरू होना चाहिए (फ़ाइल की शुरुआत से)rplyid : एक पहचान संख्या जो संभावित टकरावों से बचने के लिए प्रतिक्रिया में शामिल की जाएगीइन मापदंडों के साथ, pypykatz (एजेंट पर चल रहा) बीकन (लक्ष्य कंप्यूटर) पर फ़ाइल रीड ऑपरेशन जारी कर सकता है जो विशेष रूप से फ़ाइल के कुछ हिस्सों को लक्षित करता है।
दूसरी तरफ (CobaltStrike में) aggrokatz एक कॉलबैक पंजीकृत करता है जो लक्ष्य बीकन द्वारा लौटाए गए प्रत्येक संदेश की निगरानी करता है। यदि संदेश का हेडर फ़ाइल रीड ऑपरेशन के हेडर से मेल खाता है, तो इसे minidump फ़ाइल के एक चंक के रूप में संसाधित किया जाएगा और minidump पार्सर को भेजा जाएगा जो परिणाम pypykatz को भेजेगा। यदि अधिक पढ़ने की आवश्यकता है तो pypykatz minidump रीडर का उपयोग करके एक पढ़ने का आदेश जारी करेगा जो BOF इंटरफ़ेस के माध्यम से बीकन पर एक नया पढ़ने का आदेश भेजेगा। यह प्रक्रिया तब तक दोहराई जाती है जब तक फ़ाइल पार्स नहीं हो जाती।
इस विधि का उपयोग करके लगभग 100 LSASS डंप पार्स करने के बाद, हम निम्नलिखित कह सकते हैं (उपयोग किए गए चंक का आकार 20k था):
dcsync - pycobalt के लेखक
@anthemtotheego Twitter - CredBandit के निर्माता
Nicol Jos @shinepaw - लोगो डिज़ाइन