
नेटिव इमेज कैश में स्थित एक DLL को हाईजैक करके UAC को बायपास करें
यूज़र अकाउंट कंट्रोल (UAC) को बाईपास करें ताकि किसी भी प्रोग्राम को उच्च अखंडता स्तर पर चलाने के लिए उन्नत (प्रशासक) विशेषाधिकार प्राप्त करें।

मैंने ByeIntegrity को अपडेट करने का निर्णय लिया है ताकि यह बहुत तेज़, हल्का और विश्वसनीय हो। यह एक महत्वपूर्ण पुनर्निर्माण है, इसलिए मैंने VS समाधान में "ByeIntegrity2021" नामक एक नया प्रोजेक्ट बनाया है, जो इस हमले का अपडेटेड संस्करण है। निश्चित रूप से, मूल संस्करण अभी भी मौजूद है। नए संस्करण के बारे में अधिक जानकारी के लिए, नीचे दिए गए विवरण का विस्तार करें।
नया संस्करण अब NIC में स्थापित मौजूदा नेटिव इमेज पर निर्भर हुए बिना NIC को हाईजैक करने में सक्षम है। यह अपने स्वयं के नेटिव इमेज डिस्क्रिप्टर और पेलोड बनाकर, फिर उन्हें NIC में ले जाकर ऐसा करता है, जिससे निम्नलिखित की आवश्यकता समाप्त हो जाती है:
NGEN.exe द्वारा उत्पादित मौजूदा *.ni इमेजCLR प्रत्येक प्रविष्टि की पुनरावर्ती निर्देशिका स्कैन करके और फिर उसकी *.aux फ़ाइल पढ़कर NIC से नेटिव इमेज लोड करता है। इस फ़ाइल में नेटिव इमेज और उसकी निर्भरताओं के बारे में जानकारी होती है। AUX फ़ाइल में दी गई जानकारी के आधार पर, CLR या तो इमेज को लोड करेगा या अस्वीकार करेगा, और फिर अगले उम्मीदवार पर जाएगा। यदि कोई व्यवहार्य उम्मीदवार नहीं मिलता है, तो यह मानक इमेज लोड करता है और इसे सामान्य रूप से संकलित करने के लिए jit का उपयोग करता है। वास्तविक नेटिव इमेज का कोई भाग नहीं पढ़ा जाता है (केवल इसके अस्तित्व की जाँच की जाती है), इसलिए ByeIntegrity बस पेलोड DLL को उसी नाम से रखता है जो नेटिव इमेज का होता।
ByeIntegrity का अपडेटेड संस्करण AUXGen नामक एक उपकरण के साथ आता है, जो GAC से एक असेंबली का नाम लेता है और फिर उसका संगत AUX फ़ाइल उत्पन्न करता है। AUX फ़ाइल इस प्रकार उत्पन्न की जाती है कि यह CLR की जाँचों से मेल खाती है और CLR उस "नेटिव इमेज" को लोड करेगा जिसे AUX फ़ाइल द्वारा वर्णित किया गया है। नोट: AUXGen AUX फ़ाइल उत्पन्न करते समय निर्भरताओं को संभालता नहीं है। यह केवल उतना ही करता है जितना CLR को इमेज लोड करने के लिए आवश्यक है। मैं बाद में AUX फ़ाइल प्रारूप का विवरण पोस्ट करूंगा।
ByeIntegrity अब ISecurityEditor का उपयोग करता है, ठीक उसी तरह जैसे UACMe करता है, जो आवश्यक कोड को कम करता है। इसके लिए यह भी आवश्यक है कि आपने असेंबली MMCEx के लिए AUX फ़ाइल उत्पन्न की हो, और इसे ByeIntegrity के समान निर्देशिका में रखा हो। MMCEx अब इसके लोड ऑर्डर और छोटे नाम के कारण लक्षित इमेज है।
ByeIntegrity नेटिव इमेज कैश (NIC) में स्थित एक DLL को हाईजैक करता है। NIC का उपयोग .NET Framework द्वारा अनुकूलित .NET असेंबलियों को संग्रहीत करने के लिए किया जाता है जो Ngen, .NET Framework नेटिव इमेज जनरेटर जैसे प्रोग्रामों से उत्पन्न हुई हैं। चूंकि Ngen आमतौर पर टास्क शेड्यूलर के माध्यम से वर्तमान उपयोगकर्ता के अंतर्गत प्रशासकीय विशेषाधिकारों के साथ चलाया जाता है, NIC प्रशासक समूह के सदस्यों के लिए संशोधन पहुँच प्रदान करता है।
माइक्रोसॉफ्ट मैनेजमेंट कंसोल (MMC) विंडोज फ़ायरवॉल स्नैप-इन .NET Framework का उपयोग करता है, और इसे आरंभ करने पर, NIC से मॉड्यूल MMC प्रक्रिया में लोड होते हैं। MMC निष्पादन योग्य AutoElevate का उपयोग करता है, जो एक तंत्र है जिसका उपयोग विंडोज UAC संकेत के बिना स्वचालित रूप से प्रक्रिया के टोकन को उन्नत करने के लिए करता है।
ByeIntegrity NIC में स्थित Accessibility.ni.dll नामक एक विशिष्ट DLL को हाईजैक करता है। यह DLL के .text अनुभाग में उपयुक्त आकार के पैडिंग क्षेत्र में कुछ शेलकोड लिखता है। फिर DLL के एंट्री पॉइंट को शेलकोड की ओर इंगित करने के लिए अपडेट किया जाता है। DLL लोड होने पर, एंट्री पॉइंट (जो वास्तव में शेलकोड है) निष्पादित होता है। शेलकोड kernel32!CreateProcessW का पता गणना करता है, प्रशासक के रूप में चल रहे cmd.exe का एक नया उदाहरण बनाता है, और फिर बस TRUE लौटाता है। यह केवल DLL_PROCESS_ATTACH कारण के लिए है; अन्य सभी कारण तुरंत TRUE लौटाएंगे।
यह हमला UACMe में विधि #63 के रूप में लागू किया गया है। यदि आप इस हमले को आज़माना चाहते हैं, तो कृपया पहले UACMe का उपयोग करें। हमला वही है, हालांकि, UACMe NIC को संशोधित करने के लिए एक अलग विधि का उपयोग करता है। ByeIntegrity IFileOperation का उपयोग करता है जबकि UACMe ISecurityEditor का उपयोग करता है। इसके अलावा, UACMe आपके सिस्टम के लिए सही Accessibility.ni.dll चुनता है और यदि आवश्यक हो तो सिस्टम मेंटेनेंस कार्य करता है (NIC घटकों को उत्पन्न करने के लिए)। ByeIntegrity बस पहली मौजूदा NIC प्रविष्टि चुनता है (जो MMC द्वारा उपयोग की जा रही सही प्रविष्टि हो भी सकती है और नहीं भी) और सिस्टम मेंटेनेंस कार्य नहीं चलाता है। ByeIntegrity में UACMe की तुलना में काफी अधिक कोड है, इसलिए UACMe कार्यान्वयन को पढ़ना ByeIntegrity कोड को पढ़ने की तुलना में बहुत आसान होगा। अंत में, ByeIntegrity हमले के दौरान एक चाइल्ड प्रक्रिया लॉन्च करता है जबकि UACMe ऐसा नहीं करता है।
tl;dr: UACMe ByeIntegrity की तुलना में सरल और अधिक प्रभावी है, इसलिए पहले UACMe का उपयोग करें।
यदि आप यह पढ़ रहे हैं तो आप शायद जानते होंगे कि स्रोत को कैसे संकलित करना है। बस ध्यान दें कि इसका x86 के साथ परीक्षण या डिज़ाइन बिल्कुल नहीं किया गया है, और यह शायद x86 पर काम भी नहीं करेगा।
ठीक UACMe की तरह, मैं इस रिपॉजिटरी में कभी भी संकलित बाइनरी अपलोड नहीं करूंगा। हमेशा ऐसे लोग होते हैं जो दुनिया को तबाह और जलाना चाहते हैं, और मैं उनके लिए किसी और के कंप्यूटर पर इसे चलाने और जानबूझकर नुकसान पहुंचाने का आसान तरीका प्रदान नहीं करने जा रहा हूं। मैं यह भी नहीं चाहता कि स्क्रिप्ट-किडीज़ इस हमले का उपयोग यह समझे बिना करें कि यह क्या करता है और इससे क्या नुकसान हो सकता है।
यह हमला विंडोज 7 (7600) से लेकर विंडोज के नवीनतम संस्करण तक काम करता है।