
मैलवेयर में उपयोग किए जाने वाले हैशिंग एल्गोरिदम का संग्रह
HashDB समुदाय-स्रोत हैशिंग एल्गोरिदम की लाइब्रेरी है जिसका उपयोग मैलवेयर में किया जाता है।
HashDB को एक स्टैंड-अलोन हैशिंग लाइब्रेरी के रूप में उपयोग किया जा सकता है, लेकिन यह OALabs द्वारा संचालित HashDB Lookup Service को भी फ़ीड करता है। यह सेवा विश्लेषकों को हैश रिवर्स करने और हैश किए गए API नामों और स्ट्रिंग मानों को प्राप्त करने की अनुमति देती है।
HashDB को क्लोन किया जा सकता है और किसी भी मानक Python मॉड्यूल की तरह आपकी रिवर्स इंजीनियरिंग स्क्रिप्ट में उपयोग किया जा सकता है। कुछ उदाहरण कोड निम्नलिखित है।
>>> import hashdb
>>> hashdb.list_algorithms()
['crc32']
>>> hashdb.algorithms.crc32.hash(b'test')
3632233996
OALabs एक मुफ्त HashDB Lookup Service चलाता है जिसका उपयोग HashDB लाइब्रेरी में सूचीबद्ध किसी भी हैश के लिए हैश टेबल क्वेरी करने के लिए किया जा सकता है। हैश टेबल में Windows API का पूरा सेट और मैलवेयर में उपयोग होने वाले कई सामान्य स्ट्रिंग शामिल हैं। आप अपने स्वयं के स्ट्रिंग भी जोड़ सकते हैं!
HashDB लुकअप सेवा में एक IDA Pro प्लगइन है जिसका उपयोग सीधे IDA से हैश लुकअप को स्वचालित करने के लिए किया जा सकता है! क्लाइंट को GitHub से यहाँ डाउनलोड किया जा सकता है।
HashDB हमारी हैश लाइब्रेरी को अद्यतन रखने के लिए समुदाय के समर्थन पर निर्भर करता है! हमारा लक्ष्य है कि योगदानकर्ता पहले कमिट से लेकर PR तक, एक नया हैश जोड़ने में पाँच मिनट से अधिक नहीं बिताएँ। इस लक्ष्य को प्राप्त करने के लिए हम निम्नलिखित सुव्यवस्थित प्रक्रिया प्रदान करते हैं।
सुनिश्चित करें कि हैश एल्गोरिदम पहले से मौजूद नहीं है… हम जानते हैं कि यह मूर्खतापूर्ण लगता है लेकिन बस दोबारा जाँच लें।
वर्णनात्मक नाम के साथ एक ब्रांच बनाएँ।
अपने हैश एल्गोरिदम के नाम के साथ /algorithms निर्देशिका में एक नई Python फ़ाइल जोड़ें। एल्गोरिदम का आधिकारिक नाम उपयोग करने का प्रयास करें, या यदि यह अद्वितीय है, तो उस मैलवेयर का नाम उपयोग करें जिसके लिए यह अद्वितीय है।
अपने नए हैश एल्गोरिदम को सेटअप करने के लिए निम्नलिखित टेम्पलेट का उपयोग करें। सभी फ़ील्ड अनिवार्य हैं और केस सेंसिटिव हैं।
#!/usr/bin/env python
DESCRIPTION = "your hash description here"
# Type can be either 'unsigned_int' (32bit) or 'unsigned_long' (64bit)
TYPE = 'unsigned_int'
# Test must match the exact hash of the string 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
TEST_1 = hash_of_string_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
def hash(data):
# your hash code here
अपनी Python शैली की दोबारा जाँच करें, हम Python 3.9 पर Flake8 का उपयोग करते हैं। आप git रिपॉजिटरी के रूट से निम्नलिखित lint कमांड स्थानीय रूप से आज़मा सकते हैं।
pip install flake8
flake8 ./algorithms --count --select=E9,F63,F7,F82 --show-source --statistics
हमारे टेस्ट सूट का उपयोग करके अपने कोड का स्थानीय रूप से परीक्षण करें। git रिपॉजिटरी के रूट से निम्नलिखित कमांड स्थानीय रूप से चलाएँ। ध्यान दें कि आपको pytest को सीधे नहीं बल्कि एक मॉड्यूल के रूप में चलाना होगा, अन्यथा यह हमारी टेस्ट निर्देशिका को नहीं उठाएगा।
pip install pytest
python -m pytest
एक पुल रिक्वेस्ट जारी करें — आपका नया एल्गोरिदम स्वचालित रूप से परीक्षण के लिए कतारबद्ध हो जाएगा और सफल होने पर इसे मर्ज कर दिया जाएगा।
बस इतना ही! आपका नया हैश न केवल HashDB लाइब्रेरी में उपलब्ध होगा, बल्कि HashDB Lookup Service के लिए एक नई हैश टेबल भी उत्पन्न होगी और आप तुरंत हैश रिवर्स करना शुरू कर सकते हैं!
/algorithms निर्देशिका के बाहर बदलाव वाले PR हमारे स्वचालित CI का हिस्सा नहीं हैं और अतिरिक्त जाँच के अधीन होंगे।
सभी हैशों के पास DESCRIPTION फ़ील्ड में एक मान्य विवरण होना चाहिए।
सभी हैशों के पास TYPE फ़ील्ड में unsigned_int या unsigned_long प्रकार होना चाहिए। HashDB वर्तमान में केवल unsigned 32bit या 64bit हैश स्वीकार करता है।
सभी हैशों के पास TEST_1 फ़ील्ड में स्ट्रिंग ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 का हैश होना चाहिए।
सभी हैशों में एक hash(data) फ़ंक्शन शामिल होना चाहिए जो एक बाइट स्ट्रिंग स्वीकार करता है और स्ट्रिंग का हैश लौटाता है।
कुछ हैश एल्गोरिदम मॉड्यूल नाम और API को अलग-अलग हैश करते हैं और एकल मॉड्यूल+API हैश बनाने के लिए हैशों को जोड़ते हैं। इसका एक उदाहरण मानक Metasploit ROR13 hash है। ये एल्गोरिदम मानक वर्डलिस्ट के साथ काम नहीं करेंगे और एक कस्टम वर्डलिस्ट की आवश्यकता होती है जिसमें मॉड्यूल नाम और API दोनों शामिल हों। इन्हें संभालने के लिए हम कस्टम एल्गोरिदम की अनुमति देते हैं जो केवल कुछ शब्दों के लिए एक मान्य हैश लौटाएंगे।
कस्टम API हैश जोड़ने के लिए निम्नलिखित अतिरिक्त घटकों की आवश्यकता होती है।
TEST_1 फ़ील्ड को 4294967294 (-1) पर सेट किया जाना चाहिए।
हैश एल्गोरिदम को सभी अमान्य हैशों के लिए मान 4294967294 लौटाना चाहिए।
एल्गोरिदम के लिए मान्य एक उदाहरण शब्द के साथ एक अतिरिक्त TEST_API_DATA_1 फ़ील्ड जोड़ा जाना चाहिए।
TEST_API_DATA_1 फ़ील्ड के हैश के साथ एक अतिरिक्त TEST_API_1 फ़ील्ड जोड़ा जाना चाहिए।
FLARE टीम को उनके shellcode_hashes के प्रयासों के लिए एक बड़ा धन्यवाद। कई साल पहले इस प्रोजेक्ट ने त्वरित और आसान मैलवेयर हैश रिवर्सिंग के लिए मानक स्थापित किया था और यह आज भी एक अत्यंत उपयोगी उपकरण है। तो इसे दोहराना क्यों?
सच कहूँ तो, यह सब वर्डलिस्ट और पहुँच के बारे में है। हमने अब मैलवेयर में सभी प्रकार के स्ट्रिंग्स के लिए हैश का उपयोग करने की दिशा में एक नाटकीय बदलाव देखा है, और Windows DLL एक्सपोर्ट्स को हैश करने की पुरानी विधि पर्याप्त नहीं है। हम एक ऐसा समाधान चाहते थे जो लाखों रजिस्ट्री कुंजियों और मानों, फ़ाइलनामों और प्रोसेस नामों को निरंतर संसाधित कर सके। और हम चाहते थे कि यह डेटा REST API के माध्यम से उपलब्ध हो ताकि हम इसे अपने ऑटोमेशन वर्कफ़्लो में उपयोग कर सकें, न कि केवल अपने स्टैटिक विश्लेषण उपकरणों में। यह कहने के बाद, हम shellcode_hashes के बिना अस्तित्व में नहीं होते, तो जहाँ श्रेय देना चाहिए वहाँ श्रेय दें 🙌