
विंडोज़ में एक लोकल प्रिविलेज एस्केलेशन (LPE) भेद्यता की सूचना Andrea Pierini (@decoder_it) और Antonio Cocomazzi (@splinter_code) द्वारा 9 सितंबर, 2022 को Microsoft को दी गई थी। यह भेद्यता एक होस्ट पर निम्न-विशेषाधिकार (low-privilege) खाते वाले हमलावर को SYSTEM विशेषाधिकारों के साथ मनमानी फाइलें पढ़ने/लिखने की अनुमति देती है।
हालाँकि यह भेद्यता अपने आप में सीधे SYSTEM के रूप में कमांड निष्पादित करने की अनुमति नहीं देती है, हम इसे कई वैक्टरों के साथ जोड़कर यह परिणाम प्राप्त कर सकते हैं। सुविधाजनक रूप से, 13 फरवरी को BlackArrowSec द्वारा एक और प्रिविलेज एस्केलेशन PoC प्रकाशित किया गया था जो StorSvc सेवा का दुरुपयोग करता है, जिससे हमलावर को SYSTEM के रूप में कोड निष्पादित करने की अनुमति मिलती है, बशर्ते वे PATH में किसी भी निर्देशिका में एक DLL फाइल लिख सकें।
LocalPotato PoC NTLM प्रमाणीकरण के एक विशेष मामले में एक दोष का लाभ उठाता है, जिसे NTLM लोकल प्रमाणीकरण कहा जाता है, ताकि एक विशेषाधिकार प्राप्त प्रक्रिया को स्थानीय SMB सर्वर के विरुद्ध हमलावर द्वारा शुरू किए गए सत्र को प्रमाणित करने के लिए धोखा दिया जा सके। परिणामस्वरूप, हमलावर के पास एक ऐसा कनेक्शन होता है जो उसे धोखा दी गई प्रक्रिया के विशेषाधिकारों के साथ किसी भी शेयर तक पहुँच प्रदान करता है, जिसमें C$ या ADMIN$ जैसे विशेष शेयर भी शामिल हैं।
एक्सप्लॉइट द्वारा अनुसरण की जाने वाली प्रक्रिया इस प्रकार है:
SMB शेयरों के लिए एक विशेषाधिकार प्राप्त कनेक्शन होने से, हमलावर लक्ष्य मशीन पर किसी भी स्थान पर फाइलें पढ़ या लिख सकता है। हालाँकि यह हमें असुरक्षित मशीन के विरुद्ध सीधे कमांड चलाने की अनुमति नहीं देगा, हम उस उद्देश्य को प्राप्त करने के लिए इसे एक अलग हमले वेक्टर के साथ जोड़ देंगे।
ध्यान दें कि भेद्यता SMB सर्वर के बजाय NTLM प्रोटोकॉल में है, इसलिए इसी हमले वेक्टर का उपयोग सैद्धांतिक रूप से किसी भी ऐसी सेवा के विरुद्ध किया जा सकता है जो NTLM के माध्यम से प्रमाणीकरण का लाभ उठाती है। व्यवहार में, हालाँकि, हमले के लिए प्रोटोकॉल चुनते समय कुछ सावधानियों से निपटना पड़ता है। PoC SMB सर्वर का उपयोग समान हमले वैक्टरों के विरुद्ध अन्य प्रोटोकॉल के लिए मौजूद कुछ अतिरिक्त सुरक्षाओं से बचने के लिए करता है, और यहाँ तक कि SMB सर्वर के विरुद्ध एक्सप्लॉइट को काम करवाने के लिए एक त्वरित बायपास भी लागू करता है। मूल एक्सप्लॉइट लेखक की पोस्ट - (https://decoder.cloud/2023/02/13/localpotato-when-swapping-the-context-leads-you-to-system/)
अब तक, हमने लक्ष्य मशीन पर मनमानी फाइलें लिखने के लिए LocalPotato का उपयोग किया है। एक विशेषाधिकार प्राप्त शेल पाने के लिए, हमें अभी भी यह पता लगाने की आवश्यकता है कि कमांड चलाने के लिए मनमानी लेखन का उपयोग कैसे किया जाए।
हाल ही में, एक और प्रिविलेज एस्केलेशन वेक्टर पाया गया, जहाँ एक हमलावर SYSTEM विशेषाधिकारों के साथ मनमानी कमांड चलाने के लिए एक लापता DLL को हाईजैक कर सकता है। इस वेक्टर के साथ एकमात्र समस्या यह थी कि हमलावर को इसे ट्रिगर करने के लिए सिस्टम के PATH में एक DLL लिखने की आवश्यकता होगी। डिफ़ॉल्ट रूप से, विंडोज़ PATH में केवल ऐसी निर्देशिकाएँ शामिल होंगी जिन्हें केवल विशेषाधिकार प्राप्त खाते ही लिख सकते हैं। हालाँकि ऐसी मशीनें खोजना संभव हो सकता है जहाँ विशिष्ट अनुप्रयोगों की स्थापना ने PATH चर को बदल दिया है और मशीन को असुरक्षित बना दिया है, यह हमला वेक्टर केवल विशेष परिदृश्यों पर लागू होता है। इस हमले को LocalPotato के साथ संयोजित करने से हम इस प्रतिबंध को दूर कर सकते हैं और एक पूरी तरह से कार्यशील प्रिविलेज एस्केलेशन एक्सप्लॉइट प्राप्त कर सकते हैं।
StorSvc और DLL हाईजैकिंग जैसा कि BlackArrowSec (https://github.com/blackarrowsec/redteam-research/tree/26e6fc0c0d30d364758fa11c2922064a9a7fd309/LPE via StorSvc) द्वारा खोजा गया है, एक हमलावर "StorSvc" सेवा द्वारा प्रदान की गई "SvcRebootToFlashingMode" विधि के लिए एक RPC कॉल भेज सकता है, जो बदले में "SprintCSP.dll" नामक एक लापता DLL को लोड करने का प्रयास ट्रिगर करेगा। यदि आप RPC से परिचित नहीं हैं, तो इसे एक API के रूप में सोचें जो फ़ंक्शन को उजागर करता है ताकि उन्हें दूरस्थ रूप से उपयोग किया जा सके। इस मामले में, StorSvc सेवा SvcRebootToFlashingMode विधि को उजागर करती है, जिसे मशीन तक पहुँच रखने वाला कोई भी व्यक्ति कॉल कर सकता है। चूँकि StorSvc SYSTEM विशेषाधिकारों के साथ चलता है, PATH में कहीं SprintCSP.dll बनाने से जब भी SvcRebootToFlashingMode का कॉल किया जाता है तो यह लोड हो जाएगा।
एक्सप्लॉइट का संकलन एक्सप्लॉइट लिंक - (https://github.com/decoder-it/LocalPotato) इस एक्सप्लॉइट का उपयोग करने के लिए, आपको पहले दोनों प्रदान की गई फाइलों को संकलित करना होगा:
आइए "RpcClient.exe" से शुरू करें। जैसा कि पहले उल्लेख किया गया है, हमें लक्ष्य मशीन के विंडोज़ संस्करण के आधार पर एक्सप्लॉइट को बदलने की आवश्यकता होगी। ऐसा करने के लिए, हमें "LPE via StorSvc\RpcClient\RpcClient\storsvc_c.c" की पहली पंक्तियों को बदलना होगा ताकि सही ऑपरेटिंग सिस्टम चुना जा सके। यह एक्सप्लॉइट को सही RPC इंटरफ़ेस पहचानकर्ता का उपयोग करने के लिए सेट करेगा। अब जब कोड सही कर दिया गया है, तो आइए एक डेवलपर का कमांड प्रॉम्प्ट खोलें और निम्न कमांड चलाकर प्रोजेक्ट बनाएँ: कमांड: C:\LPE via StorSvc\RpcClient> msbuild RpcClient.sln C:\LPE via StorSvc\RpcClient> move x64\Debug\RpcClient.exe C:\Users\user\Desktop\ (The compiled executable will be found on your desktop.)
अब "SprintCSP.dll" को संकलित करने के लिए, हमें केवल "C:\LPE via StorSvc\SprintCSP\SprintCSP\main.c" में "DoStuff()" फ़ंक्शन को संशोधित करने की आवश्यकता है ताकि यह एक ऐसी कमांड निष्पादित करे जो हमें मशीन तक विशेषाधिकार प्राप्त पहुँच प्रदान करे। सरलता के लिए, हम DLL को अपने वर्तमान उपयोगकर्ता को Administrators समूह में जोड़ने देंगे। हम उस लक्ष्य से अपनी मशीन पर रिवर्स शेल भी प्राप्त कर सकते हैं। अब हम निम्न कमांड चलाकर DLL संकलित करते हैं और परिणाम को वापस अपने डेस्कटॉप पर ले जाते हैं: कमांड: C:\LPE via StorSvc\SprintCSP> msbuild SprintCSP.sln C:\LPE via StorSvc\SprintCSP> move x64\Debug\SprintCSP.dll C:\Users\user\Desktop\
हम अब एक्सप्लॉइट लॉन्च करने के लिए तैयार हैं। सुनिश्चित करें कि आपके पास "LocalPotato.exe" एक्सप्लॉइट, "RpcClient.exe" और "SprintCSP.dll" फाइलें हैं।
डिटेक्शन और मिटिगेशन
डिटेक्शन अब जब हम समझ गए हैं कि localpotato एक्सप्लॉइट कैसे काम करता है और इसे SYSTEM के रूप में कोड निष्पादित करने के लिए StorSrv सेवा के साथ कैसे श्रृंखलाबद्ध (chain) किया जा सकता है, तो यह देखने का समय है कि सिस्टम के भीतर इसका पता कैसे लगाया जा सकता है और ऐसे हमलों को कैसे रोका जा सकता है।
YARA नियम: चूँकि इस हमले में कमांड लाइन टर्मिनल में तर्कों के साथ एक निष्पादन योग्य चलाना शामिल है, इस गतिविधि का पता लगाने के दो सामान्य तरीके फ़ाइल पैटर्न का पता लगाने के लिए पैटर्न मिलान उपकरण YARA का उपयोग करना और इस हैक टूल localpotato.exe के निष्पादन से उत्पन्न घटनाओं की जाँच करना होगा। चूँकि यह हमला localpotato.exe के रूप में ज्ञात हैक टूल का उपयोग करता है, हम होस्ट को स्कैन करने के लिए YARA या THOR जैसे अन्य डिटेक्शन टूल का उपयोग करके सिस्टम के भीतर इस टूल की उपस्थिति का पता लगाने के लिए एक YARA नियम बना सकते हैं। (YARA नियम इस रिपॉजिटरी में जोड़ा गया है, यह न्यूनतम नियम localpotato निष्पादन योग्य में सामान्य स्ट्रिंग पैटर्न की तलाश करता है).
SIGMA नियम: SIGMA एक सामान्य सिग्नेचर भाषा है जिसका उपयोग इवेंट लॉग में पाए जाने वाले पैटर्न के आधार पर डिटेक्शन नियम लिखने के लिए किया जाता है। नेटवर्क में localpotato का पता लगाने के लिए, केंद्रीकृत लॉग मॉनिटरिंग को जगह में सक्षम करने की अपेक्षा की जाती है। निम्नलिखित SIGMA नियम SIGMA आधिकारिक रिपॉजिटरी (https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_hktl_localpotato.yml) से लिया गया है।
हम इन sigma नियमों को मौजूदा डिटेक्शन/मॉनिटरिंग टूल में बदलने के लिए उपयोग कर सकते हैं और संभावित हमलों का शिकार करने के लिए इवेंट लॉग खोज सकते हैं।
मिटिगेशन