
एक स्वचालित अनपैकर और लॉगर जो DotNet Framework को लक्षित करने वाली फ़ाइलों के लिए है।
DotNet फ्रेमवर्क लक्षित फ़ाइलों के लिए एक स्वचालित अनपैकर और लॉगर! इस उपकरण का अनावरण Black Hat USA 2022 में किया गया था। Black Hat Asia 2023 में, DotDumperGUI और DotDumperNative को DotDumper के संस्करण 1.1-stable के साथ प्रकाशित किया गया। ये तीनों उपकरण एक साथ उपयोग किए जाने के लिए हैं, जहाँ DotDumper 1.1-stable को DotDumperNative की DLLs की आवश्यकता होती है, जबकि DotDumperGUI एक ग्राफिकल यूज़र-इंटरफ़ेस के रूप में है जो DotDumper रन से JSON आउटपुट को खोलने और फ़िल्टर करने के लिए है।
किसी भी फ़ाइल का स्वचालित रूप से विश्वसनीय तरीके से पता लगाना और वर्गीकरण करना अक्सर मैलवेयर विश्लेषण की पवित्र कलश (holy grail) माना जाता है। वहाँ पहुँचने के लिए कई परीक्षण और कठिनाइयाँ हैं, यही कारण है कि ऐसी प्रणाली के निर्माण को उच्च सम्मान दिया जाता है। जब DotNet लक्षित बाइनरी की बात आती है, तो हमारा नया ओपन-सोर्स उपकरण DotDumper रास्ते में कई महत्वपूर्ण चरणों में सहायता करने का लक्ष्य रखता है: (इन-मेमोरी) गतिविधि लॉग करना, दिलचस्प मेमोरी सेगमेंट डंप करना, और दिए गए नमूने से विशेषताएँ निकालना।
संक्षेप में, मैन्युअल अनपैकिंग एक कठिन प्रक्रिया है जो विश्लेषकों के लिए असमान समय खर्च करती है। अस्पष्ट बाइनरी (obfuscated binaries) उस समय को और बढ़ा देती हैं जो एक विश्लेषक को किसी फ़ाइल को अनपैक करने में लगाना पड़ता है। जब इसे स्केल किया जाता है, तो संगठनों को कई विश्लेषकों की आवश्यकता होती है जो हर दिन मैलवेयर का विश्लेषण करते हैं, संभवतः एक स्केलेबल सैंडबॉक्स के साथ। खोया हुआ मूल्यवान समय नए खतरों को उजागर करने के लिए दिलचस्प अभियानों या नमूनों में गहराई से जाने में उपयोग किया जा सकता था, न कि व्यापक रूप से फैले सामान्य मैलवेयर के बजाय। आखिरकार, विश्लेषक घास के ढेर में कुछ सुइयों की तलाश करते हैं।
तो, DotDumper क्या अंतर लाता है? DotDumper के माध्यम से एक DotNet आधारित मैलवेयर नमूना चलाने से तीन प्रारूपों (मानव-पठनीय सादा पाठ, JSON, और XML) में महत्वपूर्ण, प्रासंगिक और सामान्य फ़ंक्शन कॉल की लॉग फ़ाइलें मिलती हैं, साथ ही उपयोगी इन-मेमोरी सेगमेंट की प्रतियां भी मिलती हैं। इस प्रकार, एक विश्लेषक फ़ंक्शन कॉल लॉग को स्किम कर सकता है। इसके अतिरिक्त, डंप की गई फ़ाइलों को वर्गीकृत करने के लिए स्कैन किया जा सकता है, जिससे मैलवेयर नमूने और उसमें निहित डेटा के बारे में अतिरिक्त जानकारी मिलती है। इससे ट्रायेज और घटना प्रतिक्रिया प्रक्रियाओं के लिए महत्वपूर्ण समय कम होता है, और SOC विश्लेषक और शोधकर्ता का समय अधिक परिष्कृत विश्लेषण आवश्यकताओं के लिए मुक्त होता है।
प्रासंगिक फ़ंक्शन कॉल और उनके परिणामों को लॉग और डंप करने के लिए, DotDumper रिफ्लेक्शन और प्रबंधित हुक के मिश्रण का उपयोग करता है, जो सभी शुद्ध C# में लिखे गए हैं। नीचे, प्रमुख विशेषताओं पर प्रकाश डाला और विस्तार से बताया जाएगा, साथ ही एक पैक किए गए AgentTesla स्टीलर नमूने के DotDumper परिणामों के अंश दिए जाएंगे, जिनके हैश नीचे दिए गए हैं।
| हैश प्रकार | हैश मान |
|---|---|
| SHA-256 | b7512e6b8e9517024afdecc9e97121319e7dad2539eb21a79428257401e5558d |
| SHA-1 | c10e48ee1f802f730f41f3d11ae9d7bcc649080c |
| MD-5 | 23541daadb154f1f59119952e7232d6b |
DotDumper एक कमांड-लाइन इंटरफ़ेस के माध्यम से सुलभ है, जिसमें विभिन्न तर्क हैं। नीचे दी गई छवि सहायता मेनू दिखाती है। ध्यान दें कि सभी तर्कों पर चर्चा नहीं की जाएगी, बल्कि केवल सबसे अधिक उपयोग किए जाने वाले तर्कों पर चर्चा की जाएगी।

किसी दिए गए नमूने को चलाने के लिए न्यूनतम आवश्यकता " -file " तर्क प्रदान करना है, साथ ही एक फ़ाइल नाम या फ़ाइल पथ। यदि पूरा पथ दिया गया है, तो इसका उपयोग किया जाता है। यदि फ़ाइल नाम दिया गया है, तो वर्तमान कार्यशील निर्देशिका के साथ-साथ DotDumper के निष्पादन योग्य स्थान के फ़ोल्डर की जाँच की जाती है।
जब तक कोई निर्देशिका नाम प्रदान नहीं किया जाता, तब तक " -log " फ़ोल्डर नाम नमूने के फ़ाइल नाम के बराबर सेट किया जाता है (यदि कोई एक्सटेंशन है तो उसके बिना)। फ़ोल्डर उसी फ़ोल्डर में स्थित होता है जहाँ DotDumper रहता है, जहाँ लॉग और डंप की गई फ़ाइलें सहेजी जाएंगी।
लाइब्रेरी या बाइनरी में वैकल्पिक प्रवेश बिंदु के मामले में, किसी को " -overrideEntry true " का उपयोग करके प्रवेश बिंदु को ओवरराइड करना होगा। इसके अतिरिक्त, किसी को पूरी तरह से योग्य क्लास प्रदान करनी होगी, जिसमें नाम स्थान शामिल है, " -fqcn My.NameSpace.MyClass " का उपयोग करके। यह DotDumper को बताता है कि किस क्लास का चयन करना है, जहाँ से प्रदान किया गया फ़ंक्शन नाम (" -functionName MyFunction " का उपयोग करके) प्राप्त किया जाता है।
यदि चयनित फ़ंक्शन को तर्कों की आवश्यकता है, तो किसी को " -argc " का उपयोग करके तर्कों की संख्या और आवश्यक तर्कों की संख्या प्रदान करनी होगी। तर्क प्रकार और मान " string|myValue int|9 " के रूप में प्रदान किए जाने हैं। ध्यान दें कि जब मानों में स्पेस का उपयोग किया जाता है, तो कमांड-लाइन इंटरफ़ेस पर तर्क को उद्धरणों के बीच संलग्न करने की आवश्यकता होती है ताकि यह सुनिश्चित हो सके कि इसे एकल तर्क के रूप में पारित किया गया है।
" -raceTime " या " -deprecated " जैसे अन्य कम उपयोग किए जाने वाले विकल्प अपनी डिफ़ॉल्ट सेटिंग्स में सुरक्षित हैं, लेकिन DotNet फ्रेमवर्क में बदलावों के कारण भविष्य में ट्वीकिंग की आवश्यकता हो सकती है। वे वर्तमान में कमांड-लाइन इंटरफ़ेस में उजागर होते हैं ताकि यदि आवश्यक हो, तो परिवर्तन आसानी से किए जा सकें, भले ही कोई DotDumper के पुराने संस्करण का उपयोग कर रहा हो।
लॉगिंग और डंपिंग DotDumper की दो मुख्य विशेषताएं हैं। विश्लेषण में लगने वाले समय को कम करने के लिए, लॉगिंग को विश्लेषक को संदर्भ प्रदान करना चाहिए। यह विश्लेषक को प्रत्येक लॉग किए गए फ़ंक्शन कॉल के लिए निम्नलिखित जानकारी प्रदान करके किया जाता है:
ध्यान दें कि प्रत्येक डंप की गई फ़ाइल के लिए, फ़ाइल का नाम फ़ाइल के SHA-256 हैश के बराबर होता है।
उपरोक्त को स्पष्ट करने के लिए, लॉग का एक अंश नीचे दिया गया है। अंश उपरोक्त AgentTesla नमूने का विवरण दिखाता है, जहाँ यह DotNet के Assembly.Load फ़ंक्शन का उपयोग करके दूसरे चरण को लोड करता है।
![इंटरसेप्ट किए गए Assembly.Load(byte[] rawAssembly) फ़ंक्शन कॉल का लॉग](images/assembly_load.png)
पहले, स्थानीय सिस्टम समय दिया जाता है, साथ ही मूल फ़ंक्शन के वापसी प्रकार, नाम और तर्क दिए जाते हैं। दूसरे, स्टैक ट्रेस दिया जाता है, जहाँ यह दिखाता है कि नमूने का मुख्य फ़ंक्शन एक कंस्ट्रक्टर की ओर जाता है, घटकों को आरंभ करता है, और दो कस्टम फ़ंक्शन कॉल करता है। Assembly.Load फ़ंक्शन को "NavigationLib.TaskEightBestOil.GGGGGGGGGGGGGGGGGGGG(String str)" के अंदर से कॉल किया गया था। यह विश्लेषक के लिए संदर्भ प्रदान करता है ताकि यदि रुचि हो तो इस कॉल के आसपास के कोड को ढूंढ सके।