आधुनिक बूटकिट तकनीक और Win32 / Gapz का विस्तृत विश्लेषण

पिछले कुछ वर्षों में, सिस्टम के संक्रमण के दौरान बूट सेक्टरों को संशोधित करने वाले मैलवेयर (बूटकिट्स) का प्रसार बढ़ा है। सबसे प्रमुख प्रतिनिधियों में TDL4, Olmasco और Rovnix हैं। उनमें से प्रत्येक हार्ड डिस्क के संक्रमण के विभिन्न तरीकों का उपयोग करता है, यह या तो मास्टर बूट रिकॉर्ड (एमबीआर) का एक संशोधन है, या बूट विभाजन के पहले सेक्टरों का एक संशोधन है, अर्थात वीबीआर या आईपीएल (वॉल्यूम का पहला सेक्टर जिस पर नियंत्रण एमबीआर से स्थानांतरित किया जाता है - वॉल्यूम बूट रिकॉर्ड / प्रारंभिक कार्यक्रम लोडर )। इन परिवारों को नीचे दिए गए आंकड़े में स्पष्ट रूप से चित्रित किया गया है।


अंजीर। 1. विभिन्न बूटकिट परिवारों और डिस्क संक्रमण विधियों की योजना।

आधुनिक खतरों में बूटकिट का उपयोग करने के कई कारण हैं:
● ओएस कोड की तुलना में पहले दुर्भावनापूर्ण कोड चलाने की क्षमता, जो निर्विवाद फायदे देती है और आपको ओएस लोड करने की प्रक्रिया को नियंत्रित करने की अनुमति देती है।
● पहले पैराग्राफ के परिणामस्वरूप, यह आपको कुंजी कर्नेल घटकों की अखंडता निगरानी प्रणाली को बायपास करने की अनुमति देता है - पैचगार्ड (x64 वातावरण में रूटकिट उत्तरजीविता सुनिश्चित करने का लगभग एकमात्र तरीका)।
● अपने कोड को गहराई से छिपाने की क्षमता और, एवी स्कैनर के लिए इसे अदृश्य बनाते हैं।
● बूटकिट में डिस्क पर अपने शरीर के भंडारण के लिए एक सेक्टर-दर-क्षेत्र वास्तुकला है, जो फ़ाइल सिस्टम और यहां तक ​​कि डिस्क विभाजन से परे अपने दुर्भावनापूर्ण कोड और पेलोड कोड को लेना संभव बनाता है, जिससे इसे पता लगाना लगभग असंभव है।
● सिस्टम में रुटकिट इंस्टालेशन सुरक्षित।

2012 के लिए ईएसईटी खतरे और प्रवृत्ति रिपोर्ट में , हमने संकेत दिया कि बूटकिट पिछले वर्ष के प्रमुख तकनीकी रुझानों में से एक थे। हमारे विशेषज्ञ नए जटिल खतरों के उद्भव की निगरानी करते हैं। हमने Win32 / Gapz को भी अनदेखा नहीं किया, क्योंकि इसमें कई तकनीकी विशेषताएं हैं जो इसे वास्तव में दिलचस्प बनाती हैं। अलेक्जेंडर मैट्रोसोव और एवगेनी रोडियोनोव ने इस बूटकिट का विश्लेषण करने में एक बड़ा काम किया। आज की हमारी पोस्ट इसी विश्लेषण के लिए समर्पित है।

ड्रॉपर

आइए ड्रॉपर से शुरू करें - वह घटक जो बूटकिट कोड का प्रारंभिक वाहक है और सिस्टम में इसे स्थापित करने के लिए जिम्मेदार है। हम इसका पता लगाते हैं: Win32 / Gapz.X , X-version। हमने इसके तीन संस्करण पाए, A, B और C. नीचे दी गई तालिका उनकी विशेषताओं को दिखाती है:


अंजीर। 2।

हमारी टिप्पणियों के अनुसार, ड्रॉपर का पहला ज्ञात संस्करण पिछले साल अप्रैल में संकलित किया गया था और इसमें बहुत सी डिबगिंग जानकारी शामिल थी, अर्थात, यह बड़े पैमाने पर वितरण के लिए अभिप्रेत नहीं था। यह संभावना है कि Win32 / Gapz पिछले साल की गर्मियों में या सितंबर की शुरुआत में बड़े पैमाने पर वितरित किया जाने लगा। Win32 / Gapz एक सिस्टम पर अपने विशेषाधिकारों को बढ़ाने के लिए LPE कारनामों और COM एलिवेशन विधि का उपयोग करता है।
विश्लेषण की प्रक्रिया में, हमने पाया कि Win32 / Gapz से प्रभावित है: 32-बिट Windows XP SP2 और उच्चतर (Windows Vista और Vista SP1 को छोड़कर) और 64-बिट Windows XP SP2 और उच्चतर। Win32 / Gapz ड्रॉपर का चर्चा किया गया संस्करण x64 संस्करणों सहित विंडोज एक्सपी और विंडोज 7 को संक्रमित करने में सक्षम है, हालांकि, विंडोज 8 पर बूटकिट भाग ठीक से काम नहीं करता है और संक्रमण के बाद कर्नेल मोड में निष्पादन के लिए उपयुक्त भाग को निष्पादित नहीं किया गया था।


अंजीर। 3. ओएस संस्करण की जांच करने वाले ड्रॉपर कोड का हिस्सा।

ड्रॉपर जो सिस्टम में बूटकिट को स्थापित करता है, सावधानी से सोचा जाता है और आधुनिक सक्रिय सुरक्षा (एचआईपीएस) को दरकिनार करने में सक्षम होता है, साथ ही साथ अपने विशेषाधिकारों को सिस्टम के स्तर तक बढ़ाता है। इसके अलावा, इसमें एक प्रक्रिया के एड्रेस स्पेस में कोड को इंजेक्ट करने के लिए एक ट्रिकी तरीका होता है। ड्रॉपर फ़ाइल स्वयं से कई फ़ंक्शन निर्यात करती है, जो नीचे दिए गए आंकड़े में संकेतित हैं।


अंजीर। 4. ड्रॉपर निष्पादन योग्य द्वारा निर्यात किए गए कार्य।

तीन निर्यात किए गए फ़ंक्शंस हैं, जिन पर आपको ध्यान देना चाहिए: प्रारंभ, icmnf, और isyspf। संक्षिप्त विवरण:
● प्रारंभ - ड्रॉपर के लिए प्रवेश बिंदु, यह explorer.exe विश्वसनीय प्रक्रिया के पते स्थान में लागू किया गया है;
● icmnf - विशेषाधिकार बढ़ाने (बढ़ाने) के लिए जिम्मेदार है;
● isyspf - पीड़ित को बूटकिट कोड से संक्रमित करता है।

ड्रॉपर कोड एक विशेष खंड का उपयोग करता है जिसे एक्सप्लोरर प्रक्रिया के पता स्थान में अनुमानित किया जाता है। इस खंड के माध्यम से, वह शेल कोड को इस प्रक्रिया में लोड करता है और फिर, विशेष रूप से गठित एपीआई कॉल का उपयोग करके, इसकी सक्रियता बनाता है। तदनुसार, शेल कोड सक्रिय होने के बाद, यह ड्रॉपर की छवि को एक्सप्लोरर प्रक्रिया के पता स्थान में लोड करता है, विशेषाधिकार वृद्धि फ़ंक्शन को कॉल करता है और इसे डिस्क पर लिखकर बूटकिट संक्रमण प्रक्रिया शुरू करता है।


अंजीर। 5. ड्रॉपर के चरण और बूटकिट कोड के साथ पीड़ित के संक्रमण।

ड्रॉपर ने बूटकिट के साथ सिस्टम को संक्रमित करने के बाद, इसका कार्य पूरा हो गया है, और यह डिस्क से इसकी फाइल को हटा देता है।

दुर्भावनापूर्ण कोड MBR

हमें Win32 / Gapz बूटकिट के दो संशोधन मिले, जो पीड़ित की डिस्क के संक्रमण के तरीकों में भिन्न हैं। सबसे प्रारंभिक संशोधन 2012 की शुरुआती गर्मियों में दिखाई दिया, इस संस्करण का उद्देश्य एमबीआर को संक्रमित करना था। एक और, बाद में संशोधन जो VBR को संक्रमित करता है उसे 2012 के अंत में देखा गया था।


अंजीर। 6. MBR और VBR को संक्रमित करने के उद्देश्य से दो Win32 / Gapz संशोधन।

आइए पहले के बूटकिट संशोधन को देखें जो एमबीआर संक्रमण को अधिक विस्तार से लक्षित करता है। इस स्थिति में, बूटकिट कोड को कई भागों में विभाजित किया जा सकता है:
● दुर्भावनापूर्ण एमबीआर;
● कर्नेल मोड कोड और पेलोड प्रक्रियाओं में एम्बेडेड।

दुर्भावनापूर्ण कोड अपने कर्नेल मोड कोड और पेलोड को बहुत पहले विभाजन से पहले या हार्ड ड्राइव पर अंतिम विभाजन के बाद सहेजता है। यह दृष्टिकोण रोवनिक्स बूटकिट में उपयोग किए जाने वाले के समान है, सिवाय इसके कि रोवेनिक्स वीबीआर को संक्रमित करता है।
Win32 / Gapz बूटकिट भाग के लिए, इसमें कुछ भी असामान्य नहीं है: जैसे ही दुर्भावनापूर्ण MBR से कोड निष्पादित किया जाता है, यह मूल कोड को मेमोरी में पुनर्स्थापित करता है और हार्ड डिस्क के निम्नलिखित क्षेत्रों को पढ़ता है जिसमें बाद के निष्पादन के लिए कोड होता है, जिस पर नियंत्रण स्थानांतरित किया जाता है। बूटकिट कोड इंटरप्ट हैंडलर 0x13, int 13h को इंटरसेप्ट करता है और इस तरह इसे स्वीकार करने के लिए निम्नलिखित OS मॉड्यूल को लोड करने की निगरानी करता है:
ntldr (विंडोज विस्टा से पहले सिस्टम पर)
बूटमग्र (विस्टा + सिस्टम पर)
winload.ex e (विस्टा + सिस्टम पर)

बूटक कोड विशेष बाइट अनुक्रमों का उपयोग करके उपरोक्त प्रत्येक मॉड्यूल की पहचान करता है। निम्नलिखित कार्यों की एक सूची है जो बूटकिट इन मॉड्यूल में स्वीकार करता है:



जैसे ही दुर्भावनापूर्ण कोड यह पता लगाता है कि हार्ड ड्राइव से किसी विशेष मॉड्यूल को पढ़ा जा रहा है, यह इसे इस तरह से संशोधित करता है जैसे प्रोसेसर को संरक्षित मोड में स्विच करने के बाद नियंत्रण प्राप्त करना है। बूटकिट ओएस कर्नेल बूटलोडर पर हुक स्थापित करता है: या तो विंडोज विस्टा से पहले लीगेसी सिस्टम पर ntldr, या विस्टा और बाद में बूटमग्रे। Bootmgr के मामले में, यह winload.exe में OslArchTransferToKernel फ़ंक्शन को भी स्वीकार करता है।


अंजीर। 7. इंटरसेप्टर फ़ंक्शन winload.exe में OslArchTransferToKernel।

अगला कदम IoInitSystem फ़ंक्शन पर अवरोधन स्थापित करना है, जिसे OS आरंभीकरण प्रक्रिया के दौरान कहा जाता है। यह ओएस के संस्करण के आधार पर या तो ntldr या winload.exe से दुर्भावनापूर्ण कोड द्वारा इंटरसेप्ट किया जाता है।


अंजीर। 8. IoInitSystem फ़ंक्शन पर सेट किया गया इंटरसेप्शन कोड।

IoInitSystem से दुर्भावनापूर्ण कोड निष्पादित किए जाने के बाद, बूटकिट ntoskrnl कर्नेल छवि में संशोधित बाइट्स को पुनर्प्राप्त करता है और मूल IoInitSystem पर नियंत्रण स्थानांतरित करता है । मूल कोड पर नियंत्रण स्थानांतरित करने से पहले, बूटकिट अपने फ़ंक्शन के साथ स्टैक में रिटर्न एड्रेस को ओवरराइट करता है, जो तदनुसार, IoInitSystem के पूरा होने पर निष्पादित किया जाएगा। इस चाल के साथ, ओएस कर्नेल के आरंभ होने के बाद दुर्भावनापूर्ण कोड नियंत्रित हो जाता है। इसके बाद, दुर्भावनापूर्ण कोड हार्ड ड्राइव से बाकी को पढ़ता है और एक अलग सिस्टम थ्रेड बनाता है जो इन निर्देशों को निष्पादित करता है और अंत में कर्नेल पर नियंत्रण वापस करता है। बूटकिट के इस हिस्से में, जो कर्नेल मोड में चलता है, रूटकिट कार्यक्षमता को कार्यान्वित किया जाता है, प्रक्रियाओं में पेलोड का कार्यान्वयन और सी एंड सी सर्वर के साथ बातचीत।

दुर्भावनापूर्ण VBR कोड

जैसा कि हमने पहले ही उल्लेख किया है, नवीनतम Win32 / Gapz संशोधन एक वॉल्यूम के VBR को संक्रमित करता है जो MBR (वॉल्यूम बूट रिकॉर्ड - सक्रिय मात्रा के पहले क्षेत्रों में चिह्नित किया गया है जिसमें सेवा की जानकारी होती है, साथ ही VBR कोड जिस पर MBR से नियंत्रण स्थानांतरित किया जाता है और जो प्रतिक्रिया देता है। OS को और लोड करने के लिए)। बूटकिट VBR को संक्रमित करने के लिए एक मूल दृष्टिकोण का उपयोग करता है और फिर इसके कोड पर नियंत्रण स्थानांतरित करता है। अधिक गुप्त और अगोचर होने के लिए, यह मूल VBR के केवल कुछ बाइट्स को संशोधित करता है। इस दृष्टिकोण का सार यह है कि यह VBR सेवा संरचना के क्षेत्र में "हिडन सेक्टर" फ़ील्ड के मूल्य को संशोधित करता है, जबकि VBR कोड और IPL कोड बरकरार रहता है! IPL, इनिशियल प्रोग्राम लोडर - जिस कोड को VBR कोड निष्पादित होने के बाद कंट्रोल में ट्रांसफर किया जाता है, वह वॉल्यूम फाइल सिस्टम के भीतर बूटलोडर को खोजने और उस पर कंट्रोल ट्रांसफर करने के लिए जिम्मेदार है। VBR में निम्नलिखित भाग शामिल हैं:
● आईपीएल लोड करने के लिए जिम्मेदार बूटस्ट्रैप कोड (VBR कोड)।
● BIOS पैरामीटर ब्लॉक (BPB) - एक डेटा संरचना जो NTFS पैरामीटर ब्लॉक को स्टोर करती है।
● त्रुटि के मामले में उपयोगकर्ता को प्रदर्शित पाठ स्ट्रिंग।
● 1xAA55 - मानक दो-बाइट हस्ताक्षर, सेवा क्षेत्र मार्कर।


अंजीर। 9. पहले क्षेत्र की योजना वीबीआर।

Win32 / Gapz के मामले में, विश्लेषण के लिए सबसे दिलचस्प जगह BPB है और विशेष रूप से "हिडन सेक्टर" क्षेत्र है। इस फ़ील्ड में आईपीएल से पहले के सेक्टरों की संख्या शामिल है (यानी, उन सेक्टरों में आईपीएल की भरपाई होती है, जिनके द्वारा VBR से कोड निर्धारित करता है कि नियंत्रण को और कहाँ स्थानांतरित करना है) और NTFS वॉल्यूम पर संग्रहीत है, जैसा कि नीचे दिखाया गया है।


अंजीर। 10. NTFS वॉल्यूम की संरचना।

इस प्रकार, एक साफ प्रणाली पर बूट प्रक्रिया के दौरान, वीबीआर कोड 15 सेक्टरों को पढ़ता है, जो "हिडन सेक्टर" में निर्दिष्ट ऑफसेट से शुरू होता है, और वहां नियंत्रण स्थानांतरित करता है। यह वही है जो बूटकिट अपने नियंत्रण को स्थानांतरित करने के लिए उपयोग करता है। यह इस मान को अधिलेखित करता है, जो डिस्क पर संग्रहीत दुर्भावनापूर्ण कोड के लिए क्षेत्रों में ऑफसेट का संकेत देता है। संक्रमण के बाद, वॉल्यूम इस तरह दिखता है:


अंजीर। 11. बूटकिट द्वारा संशोधित "हिडन सेक्टर" मूल्य VBR कोड को बूटकिट कोड पर नियंत्रण स्थानांतरित करने का कारण बनता है, और आईपीएल को नहीं।

सिस्टम संक्रमण के मामले में, वीबीआर कोड कानूनी आईपीएल के बजाय निष्पादन के लिए बूटकिट कोड कहता है। बूटकिट कोड, जैसा कि पहले ही उल्लेख किया गया है, डिस्क के बहुत पहले विभाजन से पहले या आखिरी के बाद लिखा जाता है। अन्यथा, बूटक कोड अनिवार्य रूप से एमबीआर इन्फैक्टर के साथ संस्करण से अलग नहीं है।

कर्नेल मोड दुर्भावनापूर्ण कोड

इस भाग का मुख्य उद्देश्य, जिसे ऊपर वर्णित बूटकिट कहा जाता है, सिस्टम के पते स्थान में दुर्भावनापूर्ण कर्नेल मोड या रूटकिट कोड डाउनलोड करना है, इस तरह के विशेषाधिकार प्राप्त कोड के लिए ओएस द्वारा लगाए गए प्रतिबंधों को दरकिनार करना। हमने पहले ही उल्लेख किया है कि इस बूटकिट-लोडेड कोड में अपनी उपस्थिति को छिपाने के लिए एक रूटकिट है, जो C & C प्रबंधन सर्वर के साथ काम करने के लिए एक तंत्र है, और पेलोड भी है, जो प्रक्रियाओं में कार्यान्वयन के लिए अभिप्रेत है।
Rovnix, TDL4 और अन्य सामान्य बूटकिट्स के विपरीत, Win32 / Gapz में कर्नेल मोड दुर्भावनापूर्ण कोड में एक निष्पादन योग्य PE फ़ाइल संरचना नहीं है। इसके बजाय, यह एक विशेष तरीके से संरचित है। कोड में 12 ब्लॉक शामिल हैं, जिनमें से प्रत्येक में एक हेडिंग है - एक संरचना जो इसके बारे में सेवा की जानकारी संग्रहीत करती है। इसका निम्न रूप है:



प्रत्येक ब्लॉक एक निश्चित कार्यक्षमता को लागू करता है: पेलोड का कार्यान्वयन, सी एंड सी सर्वरों के साथ बातचीत, आत्मरक्षा, और इसी तरह। कर्नेल मोड कोड की कार्यक्षमता काफी जटिल है और इसे अलग से (इस पोस्ट के दायरे से परे) माना जा सकता है।

बूटकिट्स बनाम। Microsoft ELAM

हमारी पोस्ट के इस हिस्से में, हम एक विशेष उपकरण पर ध्यान केंद्रित करना चाहते हैं, जिसे Microsoft ने विभिन्न प्रकार के खतरों से निपटने के लिए उपयोग करने का फैसला किया, विशेष रूप से रूटकिट और बूटकिट्स जो सिस्टम में अन्य ड्राइवरों से पहले खुद को लोड करने का प्रयास करते हैं। टूल को ELAM, अर्ली लॉन्च एंटी-मालवेयर मॉड्यूल कहा जाता है, और इसे विंडोज 8 से शुरू होने वाले ऑपरेटिंग सिस्टम के साथ भेज दिया जाता है। संक्षेप में, ELAM एक ड्राइवर है जो एंटी-वायरस विक्रेता द्वारा प्रदान किया जाता है जो कर्नेल मोड ड्राइवरों को लोड करते समय प्राथमिकता की गारंटी देता है। ओएस कर्नेल के दृष्टिकोण से, ELAM एंटी-वायरस ड्राइवरों के लिए एक एपीआई है, साथ ही साथ नियमों का एक सेट है कि ऐसे ड्राइवर का पालन करना चाहिए। इस उपकरण की मुख्य विशेषताओं में से एक यह है कि सिस्टम में बाकी ड्राइवरों से पहले एवी चालक को लोड करने की अनुमति देने की गारंटी है और इस प्रकार, अन्य ड्राइवरों के लिए सामान्य स्टार्टअप नियमों से परे जाएं।

हम ध्यान दें कि अकेले ELAM बूटकिट्स से लड़ने में इतना प्रभावी नहीं हो सकता है, क्योंकि यह OS कर्नेल का हिस्सा है, और बूटकिट बहुत पहले नियंत्रित हो जाता है।


अंजीर। 12. हम देखते हैं कि एक बूटकिट सक्रिय ELAM के साथ एक प्रणाली से समझौता कर सकता है, जिससे यह एक बेकार उपकरण बन जाता है। ओएस आरंभीकरण से पहले बूटकिट बूट के बाद से, यह उस समय पहले से ही मेमोरी में होगा जब ईएलएएम नियंत्रण लेता है।

उसी समय, यह ध्यान दिया जाना चाहिए कि ELAM Microsoft की घोषित सुरक्षित बूट अवधारणा या योजना - सुरक्षित बूट का हिस्सा है। सिक्योर बूट के मामले में, यूईएफआई में निर्मित सॉफ्टवेयर (इस तरह के सॉफ्टवेयर जैसे ही कंप्यूटर काम करना शुरू कर देता है) कोड की अखंडता और वैधता को नियंत्रित कर सकता है, जिससे कोड के निष्पादन के दौरान नियंत्रण को स्थानांतरित किया जाता है जो मुख्य कंप्यूटर कोड के निष्पादन से पहले होता है। सिक्योर बूट कॉन्सेप्ट, नए यूईएफआई मानक के साथ संयोजन करके, महत्वपूर्ण ओएस / यूईएफआई डेटा संरचनाओं से समझौता करने से महत्वपूर्ण बूट-किट को रोकने के लिए डिज़ाइन किया गया है।

Source: https://habr.com/ru/post/In169131/


All Articles