AlphaGolang
जुआन एंड्रेस ग्युरेरो-सादे (JAG-S @ SentinelLabs) द्वारा
विवरण:
AlphaGolang IDAPython स्क्रिप्ट्स का एक संग्रह है जो मैलवेयर रिवर्स इंजीनियर्स को Go बाइनरीज़ में महारत हासिल करने में मदद करता है। विचार यह है कि स्क्रिप्ट्स को ठोस चरणों में विभाजित किया जाए, जिससे भंगुर मोनोलिथिक स्क्रिप्ट्स से बचा जा सके, और एक विश्लेषक द्वारा Go बाइनरी से निपटने के दौरान अपनाई जाने वाली पद्धति का अनुकरण किया जा सके।
स्क्रिप्ट्स GPL लाइसेंस के तहत जारी की गई हैं (टिम स्ट्रैज़ेरे के मूल GolangLoaderAssist के सम्मान में जिसे हमने python3 के लिए रीफ़ैक्टर और अपडेट किया, टिम को सलाम :) )। योगदान का स्वागत है और प्रोत्साहित किया जाता है!
आवश्यकताएँ: IDA Pro (आदर्शतः v7.6+) और Python3 (ew)
पहले दो चरण (recreate_pclntab और function_discovery_and_renaming) IDA v7.5- पर काम करेंगे, लेकिन उससे आगे की स्क्रिप्ट्स के लिए IDAv7.6+ की आवश्यकता है। नए संस्करण आगे चलकर नई स्क्रिप्ट्स के लिए आदर्श लक्ष्य हैं।
मूल संदर्भ: Mandiant Cyber Defense Summit 2021 वार्ता (वीडियो लंबित)
AlphaGolang विश्लेषण पद्धति
-
चरण 0: Go बाइनरीज़ (PE/ELF/MachO) की पहचान करने के लिए YARA नियम
- identify_go_binaries.yara
- Go बिल्ड ID स्ट्रिंग के लिए सरल हेडर जाँच + रेगेक्स।
- शायद बिल्ड ID लंबाई श्रेणी में सुधार किया जा सकता है।
-
चरण 1: pcln तालिका को पुनः निर्मित करें
- recreate_pclntab.py (IDA v7.5- संगत)
- अनुमानित विधियों से gopclntab अनुभाग को पुनः निर्मित करता है
- मुख्यतः IDA v7.5- के लिए उपयोगी
-
चरण 2: pcln तालिका पर चलकर फ़ंक्शंस खोजें और सभी में नाम जोड़ें
- function_renaming.py (IDA v7.5- संगत)
- golang loader assist से अलग किया गया
- pcln तालिका के आधार पर लापता फ़ंक्शंस की ब्रूटफोर्स खोज
- py3 संक्रमण से कुछ फ़ंक्शन नाम सफाई समस्याओं को ठीक किया
- अकामाई के Panchan! के आधार पर Go v1.18 के लिए सुधार जोड़ने के लिए रीफ़ैक्टर किया गया। एलेक्स (CycleOfTheAbsurd) का धन्यवाद।
-
चरण 3: उपयोगकर्ता-निर्मित फ़ंक्शंस को सतह पर लाएँ
- categorize_go_folders.py (IDA v7.6+ आवश्यक)
- स्वचालित रूप से फ़ंक्शंस को फ़ोल्डरों में वर्गीकृत करता है
- IDAv7.6 + फ़ंक्शंस दृश्य में 'show folders' सक्षम होना आवश्यक है
- अपडेट 05.16.2022: IDA v7.7 फ़ोल्डर सॉर्ट के साथ संघर्ष ठीक किया गया
- इस प्लगइन को चलाने से पहले Lumina से मेटाडेटा वापस लाने की अत्यधिक अनुशंसा की जाती है।
-
चरण 4: स्ट्रिंग संदर्भों को ठीक करें
- fix_string_cast.py
- golang loader assist से अलग किया गया
- नई स्ट्रिंग को परिभाषित करने से पहले पहले से मौजूद स्ट्रिंग ब्लॉब्स को असंभावित करने की तर्क जोड़ा गया
- नई संगति जाँच इसे कहीं अधिक प्रभावी बनाती है
-
चरण 5: प्रकार की जानकारी निकालें (इवान क्वियाटकोव्स्की द्वारा)
- extract_types.py
newobject, makechan, आदि के सभी कॉल्स के तर्कों पर टिप्पणी करता है
- इन ऑब्जेक्ट्स पर सही C प्रकार लागू करता है और उनका नाम बदलता है
- मानव-पठनीय नाम प्राप्त करता है और इसे टिप्पणी के रूप में जोड़ता है
लंबित सुधार और योगदान के लिए गुंजाइश:
- fix_string_cast.py
- अभी भी रीफ़ैक्टरिंग + बेहतर स्ट्रिंग लोड अनुमानित विधियों की आवश्यकता है
- विशाल बाइनरीज़ में लॉकअप का कारण बन सकता है।
- कुछ अप्रत्यक्ष स्ट्रिंग लोड तंत्र गायब हैं।
- extract_types.py
- वर्तमान में PE और Mach-O फ़ाइलों पर हार्डकोडेड
.rdata या __rodata अनुभाग नामों को देखकर काम करता है।
- varint-एन्कोडेड आकारों के लिए एक उचित जाँच / कार्यान्वयन की आवश्यकता है
अगले कदम:
- उपयोगकर्ता-निर्मित फ़ंक्शंस द्वारा स्ट्रिंग संदर्भों को ट्रैक करें
- उपयोगकर्ता-निर्मित फ़ंक्शंस के आधार पर स्वचालित रूप से YARA हस्ताक्षर उत्पन्न करें
- उपयोगकर्ता-निर्मित फ़ंक्शंस के लिए hex-rays स्यूडोकोड आउटपुट उत्पन्न करें
- तर्कों के गतिशील विश्लेषण के लिए स्वचालित रूप से ब्रेकपॉइंट सेट करें
- ???
श्रेय:
- टिम स्ट्रैज़ेरे को मूल golang_loader_assist जारी करने के लिए
- मिलान बोहासेक (Avast Software s.r.o.) को idatree API को समझने में उनकी अमूल्य सहायता के लिए।
- जोआकिम केनेडी (Intezer)
- इवान क्वियाटकोव्स्की (Kaspersky GReAT) को चरण 5 के लिए।
- इगोर कुज़नेत्सोव (Kaspersky GReAT)
- एलेक्स (उर्फ CycleOfTheAbsurd) ESET से, Go v1.18 समर्थन के लिए चरण 2 को रीफ़ैक्टर करने के लिए।