
Internal Monologue Attack: बिना LSASS को छुए NTLM हैश प्राप्त करना
मिमिकैट्ज़, जिसे बेंजामिन डेल्पी (@gentilkiwi) ने विकसित किया है, एक प्रसिद्ध पोस्ट-एक्स्प्लॉयटेशन उपकरण है, जो विरोधियों को मेमोरी से सादा पाठ पासवर्ड, NTLM हैश और केर्बेरोस टिकट निकालने के साथ-साथ pass-the-hash, pass-the-ticket या गोल्डन टिकट बनाने जैसे हमले करने की अनुमति देता है। निस्संदेह, मिमिकैट्ज़ का प्राथमिक उपयोग LSASS प्रक्रिया मेमोरी से उपयोगकर्ता क्रेडेंशियल्स प्राप्त करना है, जिसका उपयोग पोस्ट-एक्स्प्लॉयटेशन लेटरल मूवमेंट में किया जाता है।
हाल ही में, माइक्रोसॉफ्ट ने विंडोज 10 एंटरप्राइज और विंडोज सर्वर 2016 में क्रेडेंशियल गार्ड पेश किया है, जो रहस्यों को अलग करने के लिए वर्चुअलाइजेशन-आधारित सुरक्षा का उपयोग करता है, और यह मिमिकैट्ज़ को मेमोरी से सीधे हैश प्राप्त करने से रोकने में बहुत प्रभावी है। साथ ही, मिमिकैट्ज़ अधिकांश एंडपॉइंट सुरक्षा समाधानों का प्रमुख लक्ष्य बन गया है, और वे इसका पता लगाने और रोकने के अपने प्रयासों में बहुत आक्रामक हैं। हालाँकि ये प्रयास विफल होने के लिए बाध्य हैं, वे तेजी से एक उपद्रव बनते जा रहे हैं।
NetNTLM विंडोज का चैलेंज-रिस्पॉन्स प्रोटोकॉल है जिसका उपयोग मुख्य रूप से वहाँ किया जाता है जहाँ केर्बेरोस समर्थित नहीं है। NetNTLM में, सर्वर क्लाइंट को एक यादृच्छिक 8-बाइट नॉन्स चैलेंज के रूप में भेजता है, और क्लाइंट एक प्रतिक्रिया की गणना करता है जो NTLM हैश को कुंजी के रूप में उपयोग करके चैलेंज को प्रोसेस करता है, जो उपयोगकर्ता के पासवर्ड का MD4 हैश है। NetNTLM प्रमाणीकरण प्रोटोकॉल के दो संस्करण हैं, और दोनों कुछ हमलों के प्रति संवेदनशील हैं। स्वाभाविक रूप से, संस्करण 1 संस्करण 2 की तुलना में काफी कमजोर है, और इसलिए विंडोज विस्टा/2008 के अनुसार NetNTLM संस्करण 1 डिफ़ॉल्ट रूप से अक्षम है।
क्योंकि NTLM हैश प्रतिक्रिया की गणना करने की कुंजी है, एक विरोधी को प्रमाणित करने के लिए पीड़ित का सादा पाठ पासवर्ड प्राप्त करना आवश्यक नहीं है, इसलिए मिमिकैट्ज़ का उपयोग करके LSASS मेमोरी से हैश प्राप्त करना लगभग सादा पाठ पासवर्ड चुराने के बराबर है। क्रिस हम्मेल ने 2009 में इस तकनीक का वर्णन करते हुए एक लेख प्रकाशित किया और इसका नाम "Pass the Hash" रखा [https://www.sans.org/reading-room/whitepapers/testing/crack-pass-hash-33219]।
डेफकॉन 2012 में, मोक्सी मार्लिनस्पाइक और डेविड हल्टन ने NetNTLMv1 के खिलाफ एक "Divide and Conquer" हमला प्रस्तुत किया [https://www.youtube.com/watch?v=sIidzPntdCM]। NetNTLMv1 में, क्लाइंट 8-बाइट चैलेंज प्राप्त करता है और NTLM हैश के विभिन्न भागों को कुंजी के रूप में उपयोग करके इसे तीन बार DES का उपयोग करके एन्क्रिप्ट करके प्रतिक्रिया की गणना करता है। DES के लिए कुंजी की लंबाई प्रभावी रूप से 56 बिट्स है, जो 7 बाइट्स है, जबकि NTLM हैश 16 बाइट्स है। NetNTLMv1 पहले NTLM हैश के पहले 7 बाइट्स को कुंजी के रूप में उपयोग करके चैलेंज को एन्क्रिप्ट करता है, फिर NTLM हैश के अगले 7 बाइट्स को कुंजी के रूप में उपयोग करके चैलेंज को एन्क्रिप्ट करता है, और अंत में NTLM हैश के अंतिम 2 बाइट्स को शून्य-बाइट्स से पैड करके कुंजी के रूप में उपयोग करके चैलेंज को एन्क्रिप्ट करता है। प्रभावी रूप से, इसका मतलब है कि NetNTLMv1 चैलेंज और प्रतिक्रिया दिए जाने पर NTLM हैश प्राप्त करने के लिए, एक विरोधी को दो 56-बिट DES कुंजियों को क्रैक करना होगा, जो एकल 128-बिट कुंजी को क्रैक करने की तुलना में अधिक आसान है। मोक्सी और हल्टन ने इस कार्य के लिए कस्टम हार्डवेयर विकसित किया और 24 घंटे से भी कम समय में पूरे DES कीस्पेस को ब्रूट-फोर्स करने में सक्षम थे, जो एक उचित समय में NTLM हैश की सफल पुनर्प्राप्ति की गारंटी देता है। ध्यान दें कि पासवर्ड के खिलाफ शब्दकोश या ब्रूट फोर्स हमलों के विपरीत, जो फलदायी नहीं हो सकते हैं, यह हमला NTLM हैश की सफल पुनर्प्राप्ति की गारंटी देता है।
जैसा कि ToorCon ने https://crack.sh पर प्रदर्शित किया, चुने गए चैलेंज, जैसे 0x1122334455667788, के लिए सभी संभावित NetNTLMv1 प्रतिक्रियाओं के लिए एक पूर्ण रेनबो टेबल बनाना संभव है, जो मिनटों में दी गई प्रतिक्रिया के लिए NTLM हैश को क्रैक करने की अनुमति देता है। निहितार्थ यह है कि चुने गए चैलेंज के लिए NetNTLMv1 प्रतिक्रिया को कैप्चर करना लगभग तुरंत संबंधित NTLM हैश में अनुवादित किया जा सकता है, जो Pass the Hash के कारण पासवर्ड प्राप्त करने के लगभग समकक्ष है।
मिमिकैट्ज़ आमतौर पर तब निष्पादित किया जाता है जब विरोधी को लक्ष्य होस्ट तक उन्नत पहुंच प्राप्त हो जाती है। इस बिंदु पर, विरोधी रजिस्ट्री कुंजियाँ बदल सकता है, जैसे LMCompatibilityLevel, जो निर्दिष्ट करता है कि होस्ट को NetNTLMv1 या NetNTLMv2 पर बातचीत करनी चाहिए या नहीं। विरोधी मान को 0, 1 या 2 में बदल सकता है, जो क्लाइंट के रूप में NetNTLMv1 को सक्षम करता है, और फिर एक दुष्ट SMB सर्वर को प्रमाणित करने का प्रयास करता है जो क्लाइंट की प्रतिक्रिया को कैप्चर करेगा, जैसा कि Optiv के ब्लॉग पोस्ट [https://www.optiv.com/blog/post-exploitation-using-netntlm-downgrade-attacks] में वर्णित है।
दो और सेटिंग्स पीड़ित को NetNTLMv1 प्रतिक्रिया पर बातचीत करने से रोक सकती हैं:
सुरक्षित वातावरण में, जहाँ मिमिकैट्ज़ को निष्पादित नहीं किया जाना चाहिए, एक विरोधी आंतरिक एकालाप हमला कर सकता है, जिसमें वे विस्तारित NetNTLM डाउनग्रेड करने के बाद, उपयोगकर्ता-मोड एप्लिकेशन से SSPI के माध्यम से NTLM प्रमाणीकरण पैकेज (MSV1_0) के लिए एक स्थानीय प्रक्रिया कॉल को आमंत्रित करते हैं ताकि लॉग ऑन उपयोगकर्ता के संदर्भ में NetNTLM प्रतिक्रिया की गणना की जा सके।
आंतरिक एकालाप हमले का प्रवाह नीचे वर्णित है:
मैंने हाल ही में क्रेडेंशियल गार्ड सक्षम वातावरण में आंतरिक एकालाप का पुनः परीक्षण किया और नकारात्मक परिणाम प्राप्त किए। मुझे यकीन नहीं है कि क्या प्रारंभिक परीक्षणों के दौरान मेरे परीक्षण वातावरण में क्रेडेंशियल गार्ड ठीक से काम नहीं कर रहा था, या तब से कुछ बदल गया है। मैंने AcceptSecurityContext से गतिशील रूप से एक सर्वर टोकन प्राप्त करने और स्थानीय प्रमाणीकरण जाल से बचने के लिए इसमें छेड़छाड़ करने के लिए कार्यान्वयन को अपडेट किया, ताकि यदि विस्तारित सत्र सुरक्षा के बिना NetNTLMv1 विफल हो जाए, तो कम से कम एक NetNTLMv2 चैलेंज-रिस्पॉन्स कैप्चर किया जा सके।
आंतरिक एकालाप हमला मिमिकैट्ज़ चलाने की तुलना में कम ध्यान देने योग्य है क्योंकि एक संरक्षित प्रक्रिया में कोड इंजेक्ट करने या मेमोरी डंप करने की आवश्यकता नहीं है। क्योंकि NetNTLMv1 प्रतिक्रिया स्थानीय रूप से NTLM SSP के साथ बातचीत करके प्राप्त की जाती है, कोई नेटवर्क ट्रैफ़िक उत्पन्न नहीं होता है, और चुना गया चैलेंज आसानी से दिखाई नहीं देता है। लॉग में कोई सफल NTLM प्रमाणीकरण घटना दर्ज नहीं की जाती है। NetNTLM डाउनग्रेड के लिए रजिस्ट्री परिवर्तन और टोकन चुराने/अन्य उपयोगकर्ताओं का प्रतिरूपण करने से संकेतक ट्रिगर हो सकते हैं।
यह उपकरण एक प्रूफ ऑफ कॉन्सेप्ट है जो C# में आंतरिक एकालाप हमले को लागू करता है। कोड को PowerShell में पोर्ट करने से ऑडिट ट्रेल में कुछ इवेंट लॉग को दूसरों के साथ बदला जा सकता है। PoC कोड सही नहीं है। सकारात्मक योगदान और सुधारों का स्वागत है।
एलाद शमीर, द मिसिंग लिंक सिक्योरिटी से