दुष्ट PowerShell कोड के साथ एक अनपेक्षित एक्सचेंज सर्वर को कैसे हैक करें

स्रोत नोड: 1760191

अभी दो महीने पहले, कुछ चिंताजनक बग समाचार सामने आए: Microsoft एक्सचेंज में शून्य-दिन भेद्यता की एक जोड़ी की घोषणा की गई।

के रूप में हम उस समय सलाह दी, इन कमजोरियों को आधिकारिक तौर पर नामित किया गया है CVE-2022-41040 और CVE-2022-41082:

[थे] दो शून्य-दिन जो [एक साथ] जंजीर से बंधे हो सकते हैं, पहले बग के साथ दूरस्थ रूप से दूसरे बग को ट्रिगर करने के लिए पर्याप्त छेद खोलने के लिए उपयोग किया जाता है, जो संभावित रूप से एक्सचेंज सर्वर पर रिमोट कोड निष्पादन (आरसीई) की अनुमति देता है।

पहली भेद्यता परेशानी और व्यापक रूप से दुर्व्यवहार की याद दिलाती थी प्रॉक्सीशेल सुरक्षा छेद अगस्त 2021 में वापस से, क्योंकि यह एक्सचेंज के ऑटोडिस्कवर फीचर में खतरनाक व्यवहार पर निर्भर था, माइक्रोसॉफ्ट द्वारा वर्णित एक प्रोटोकॉल के रूप में है "Exchange में मेलबॉक्स खोजने और कनेक्ट करने के लिए Outlook और EAS [Exchange ActiveSync] क्लाइंट द्वारा उपयोग किया जाता है".

सौभाग्य से, किसी भी दूरस्थ उपयोगकर्ता द्वारा ProxyShell हमले में ऑटोडिस्कवर मिसफीचर का फायदा उठाया जा सकता है, चाहे लॉग-इन किया गया हो या नहीं, एक साल से अधिक समय पहले पैच किया गया.

दुर्भाग्य से, ProxyShell पैच ने प्रमाणित उपयोगकर्ताओं के शोषण को बंद करने के लिए पर्याप्त नहीं किया, जिससे नया CVE-2022-40140 शून्य-दिन हो गया, जो जल्द ही संक्षिप्त रूप से, यदि भ्रामक रूप से था, करार दिया प्रॉक्सीनॉटशेल.

उतना खतरनाक नहीं है, लेकिन फिर भी खतरनाक है

स्पष्ट रूप से, ProxyNotShell मूल ProxyShell जितना खतरनाक नहीं था, यह देखते हुए कि इसके लिए वह आवश्यक था जिसे प्रमाणीकृत पहुँच के रूप में जाना जाता है, इसलिए यह कहीं से भी किसी के द्वारा दुरुपयोग के लिए खुला नहीं था।

लेकिन यह जल्दी से पता चला कि कई एक्सचेंज सर्वरों पर, किसी भी उपयोगकर्ता के लॉगऑन नाम और पासवर्ड को जानने के लिए प्रमाणित होने और इस हमले को माउंट करने के लिए पर्याप्त होगा, भले ही उस उपयोगकर्ता को स्वयं लॉगऑन करने के लिए दो-कारक प्रमाणीकरण (2FA) का उपयोग करने की आवश्यकता हो। उनका ईमेल।

सोफोस विशेषज्ञ चेस्टर विस्नियुस्की के रूप में इसे रखें उस समय पर:

यदि आप इसे कॉल करना चाहते हैं तो यह "मध्य-प्रमाणीकरण भेद्यता" है। यह एक मिश्रित आशीर्वाद है। इसका मतलब यह है कि एक स्वचालित पायथन स्क्रिप्ट पूरे इंटरनेट को स्कैन नहीं कर सकती है और संभावित रूप से मिनटों या घंटों में दुनिया के हर एक्सचेंज सर्वर का फायदा उठा सकती है, जैसा कि हमने 2021 में ProxyLogon और ProxyShell के साथ देखा। […]

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

लेकिन इस हमले के लिए उस दूसरे कारक की आवश्यकता नहीं है। [...] बस एक उपयोगकर्ता नाम और पासवर्ड संयोजन प्राप्त करना एक बहुत कम बाधा है।

जैसा कि आपको शायद याद होगा, हम में से कई लोगों ने यह मान लिया था (या कम से कम उम्मीद की थी) कि Microsoft ProxyNotShell छेदों को ठीक करने के लिए दौड़ेगा, यह देखते हुए कि अक्टूबर के पैच मंगलवार तक दो सप्ताह बाकी थे।

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

यहां तक ​​कि नवंबर का पैच ट्यूजडे भी पैच के बावजूद आवश्यक सुधार सीधे प्रदान नहीं करता है फिर भी बाहर आ गया उसी दिन एक्सचेंज-विशिष्ट सुरक्षा अद्यतन के हिस्से के रूप में जिसे अलग से प्राप्त और स्थापित किया जा सकता है:

सबूत की अवधारणा का पता चला

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

बुरी खबर, प्रत्यक्ष शोषण के खुलासे के बारे में आपकी राय के आधार पर, यह है कि ZDI टीम ने अब प्रभावी रूप से एक प्रूफ-ऑफ-कॉन्सेप्ट (PoC) प्रदान किया है, जिसमें बताया गया है कि एक्सचेंज सर्वर पर कैसे हमला किया जाए।

निस्संदेह, अच्छी खबर यह है कि:

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

यह कैसे काम करता है

ZDI के स्पष्टीकरण इस भेद्यता की एक आकर्षक कहानी है कि एक भेद्यता को एक व्यवहार्य शोषण में बदलने के लिए आवश्यक सभी भागों को एक साथ जोड़ना कितना जटिल हो सकता है।

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

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

यदि आप ZDI रिपोर्ट को पढ़ने का निर्णय लेते हैं, तो आपको उच्च-स्तरीय विवरणों का अधिक आसानी से पालन करने में मदद करने की आशा में, यहाँ रिवर्स में सूचीबद्ध चरणों के साथ एक उम्मीद-नहीं-बहुत-सरलीकृत सारांश है ...

…तो आपको पहले से पता चल जाएगा कि कहानी जिस दिशा में जाती है वह क्यों लेती है:

  • चरण 4. अपनी पसंद के आरंभीकरण पैरामीटर के साथ, अपनी पसंद के .NET ऑब्जेक्ट को इंस्टेंट करने के लिए एक्सचेंज को दूरस्थ रूप से ट्रिक करें।

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

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

वस्तुओं में आम तौर पर उनसे जुड़ा एक प्रोग्रामेटिक फंक्शन होता है जिसे a कहा जाता है निर्माता, जो सही मात्रा में मेमोरी और सिस्टम संसाधनों के सही सेट को आवंटित करने के लिए एक नई वस्तु बनने पर स्वचालित रूप से निष्पादित होता है।

आमतौर पर, आपको कंस्ट्रक्टर को तर्क के रूप में एक या एक से अधिक पैरामीटर पास करने की आवश्यकता होती है, यह दर्शाने के लिए कि आप ऑब्जेक्ट को प्रारंभ होने पर कैसे कॉन्फ़िगर करना चाहते हैं।

सीधे शब्दों में कहें, अगर आप तुरंत कहते हैं, ए TextString ऑब्जेक्ट (हम इन नामों को बना रहे हैं, लेकिन आपको यह विचार मिलता है) एक पैरामीटर का उपयोग करके जो कि स्वयं एक टेक्स्ट स्ट्रिंग है example.com:8888...

... आप शायद अपने टेक्स्ट को होल्ड करने के लिए आवंटित मेमोरी बफर के साथ समाप्त हो जाएंगे, प्रारंभिक इसलिए यह वही मान रखता है जिसमें आप कच्चे पाठ को पारित करते हैं example.com:8888.

उस संदर्भ में, ऑब्जेक्ट कन्स्ट्रक्टर को डेटा के रूप में पास की गई टेक्स्ट स्ट्रिंग तुरंत किसी भी स्पष्ट साइबर सुरक्षा खतरे को उत्पन्न नहीं करती है जब आप कन्स्ट्रक्टर को दूरस्थ रूप से ट्रिगर करते हैं, सेवा के संभावित इनकार (डीओएस) के अलावा बार-बार बड़े और बड़े तारों के लिए पूछकर स्मृति को समाप्त करने का प्रयास करें।

लेकिन अगर आप तत्काल थे, तो कहें, ए ConnectedTCPClient के समान टेक्स्ट स्ट्रिंग पैरामीटर का उपयोग करके ऑब्जेक्ट example.com:8888, आप ऑपरेटिंग सिस्टम द्वारा आवंटित नेटवर्क सॉकेट के साथ अस्थायी डेटा रखने के लिए तैयार मेमोरी बफर के साथ समाप्त हो सकते हैं जो सर्वर के साथ डेटा का आदान-प्रदान करने के लिए तैयार है example.com टीसीपी पोर्ट पर 8888.

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

आपको एक वस्तु भी मिल सकती है, जैसे कि, RunCmdAndReadOutput, जहां आप एक पैरामीटर के रूप में जो टेक्स्ट स्ट्रिंग भेजते हैं, वह वस्तुतः एक कमांड है, जिसे आप ऑब्जेक्ट बनते ही स्वचालित रूप से चलाना चाहते हैं, ताकि आप बाद में इसका आउटपुट एकत्र कर सकें।

यहां तक ​​​​कि अगर आप कभी भी कमांड के आउटपुट को पुनर्प्राप्त नहीं कर पाते हैं, तो ऐसी वस्तु को तत्काल चालू करने से आप चलाने के लिए एक कमांड चुन सकते हैं, इस प्रकार आपको सामान्य रिमोट कोड निष्पादन प्रदान करते हैं और केवल सर्वर प्रक्रिया के एक्सेस अधिकारों द्वारा सीमित जोखिम पेश करते हैं। .

बेशक, अंतिम चरण में पहुंचने के बाद ही हमला इतना आसान होता है, जिसे आप करने में सक्षम नहीं होते हैं, क्योंकि एक्सचेंज की एक सख्त अनुमति सूची है जो आपको किसी भी पुरानी वस्तु को तत्काल करने से रोकती है।

सिद्धांत रूप में, PowerShell के माध्यम से दूरस्थ रूप से केवल सुरक्षित या कम-जोखिम वाली वस्तुओं को बनाया जा सकता है, ताकि हमारी कल्पना को तत्काल बनाया जा सके TextString ऊपर, या ए SimpleIntegerValue, स्वीकार्य माना जा सकता है, जबकि a ConnectedTCPClient या एक RunCmdAndReadOutput निश्चित रूप से नहीं होगा।

लेकिन ZDI के शोधकर्ताओं ने देखा कि अंतिम चरण शुरू करने से पहले, वे ऐसा कर सकते थे:

  • चरण 3. दूरस्थ रूप से एक्सचेंज को यह सोचने में चकमा दें कि एक कम जोखिम वाली वस्तु जो सुरक्षा परीक्षण पास कर चुकी है, वास्तव में, आपकी पसंद की कोई अन्य वस्तु है।

फिर भी, आप उम्मीद कर सकते हैं कि एक्सचेंज कम जोखिम वाली वस्तुओं के दूरस्थ निर्माण को भी रोकेगा, ताकि खतरे को और भी कम किया जा सके।

लेकिन शोधकर्ताओं ने पाया कि वे कर सकते हैं:

  • चरण 2. दूरस्थ रूप से चालाकी से एक्सचेंज को इसका उपयोग करने के लिए प्रेरित करें पावरशेल रिमोटिंग बाहरी रूप से नियंत्रित इनिशियलाइज़ेशन पैरामीटर्स के आधार पर ऑब्जेक्ट बनाने की सुविधा।

और यह ProxyShell जैसे छेद के कारण संभव था जो केवल अर्ध-पैच किया गया था:

  • चरण 1. वैध को पैक करके एक्सचेंज को कोड के साथ एक वेब अनुरोध को स्वीकार करने और संसाधित करने के लिए दूरस्थ रूप से ट्रिक करें username:password अनुरोध में भी क्षेत्र।

भले ही अनुरोध में नामित उपयोगकर्ता वास्तव में लॉग इन नहीं था, और उसे अपने स्वयं के मेलबॉक्स तक पहुंचने के लिए किसी प्रकार की 2FA प्रक्रिया से गुजरना होगा, एक हमलावर जो उनके बारे में जानता था username:password संयोजन में पर्याप्त प्रमाणीकरण जानकारी होगी जो एक्सचेंज को एक वेब कनेक्शन स्वीकार करने के लिए धोखा देने के लिए उपयोग की जा सकती है जिसका उपयोग ऊपर चरण 2 से 4 में वर्णित आक्रमण श्रृंखला को शुरू करने के लिए किया जा सकता है।

शिथिल बोलना, कोई भी मान्य username:password संयोजन करेगा, यह देखते हुए कि एक्सचेंज को HTTP अनुरोध को सामने से अस्वीकार करने से रोकने के लिए "प्रमाणीकरण" की आवश्यकता थी।

क्या करना है?

ध्यान दें कि यह हमला केवल काम करता है:

  • यदि आपके पास ऑन-प्रिमाइसेस एक्सचेंज सर्वर हैं। Microsoft का दावा है कि उसने अपनी स्वयं की क्लाउड सेवाओं को जल्दी से बंद कर दिया है, इसलिए एक्सचेंज ऑनलाइन प्रभावित नहीं हुआ है। सुनिश्चित करें कि आप जानें कि आपके एक्सचेंज सर्वर कहां हैं. यहां तक ​​कि अगर आप अब एक्सचेंज ऑनलाइन का उपयोग करते हैं, तो आपके पास अभी भी ऑन-प्रिमाइसेस सर्वर चल सकते हैं, शायद आपकी माइग्रेशन प्रक्रिया से गलती से छूट गए हों।
  • यदि आपके सर्वर पैच नहीं किए गए हैं। आप सुनिश्चित करें कि आपके पास 2022-11-08 का एक्सचेंज सॉफ़्टवेयर अपडेट लागू किया सेवा मेरे कमजोरियों को बंद करें कि शोषण की आवश्यकता है।
  • यदि आपके सर्वर अभी भी मूल प्रमाणीकरण स्वीकार करते हैं, जिसे लीगेसी प्रमाणीकरण भी कहा जाता है। आप सुनिश्चित करें कि आपके पास लीगेसी प्रमाणीकरण के सभी पहलुओं को अवरुद्ध कर दिया इसलिए आपके सर्वर इसे स्वीकार नहीं करेंगे username:password ऊपर वर्णित शीर्षलेख, और जोखिम भरे ऑटोडिस्कवर प्रोटोकॉल अनुरोधों को पहली जगह में स्वीकार नहीं करेंगे। इस हमलावरों को रोकता है एक सर्वर को उनके बूबी-ट्रैप्ड ऑब्जेक्ट इंस्टेंटेशन ट्रिक्स को स्वीकार करने के लिए बरगलाया जाता है, भले ही उस सर्वर को पैच न किया गया हो।

आप ऐसा कर सकते हैं पूरी जानकारी रखें हमारी आधिकारिक रोकथाम, उपचार और प्रतिक्रिया सलाह, और सोफोस ग्राहक सोफोस एक्स-ऑप्स ट्विटर फीड के माध्यम से हमारे उत्पादों द्वारा उपयोग किए जाने वाले खतरे का पता लगाने वाले नामों का ट्रैक रख सकते हैं (@सोफोसएक्सऑप्स).


एक्सचेंज प्रमाणीकरण और OAUTH2 के बारे में अधिक जानें

किसी भी बिंदु पर जाने के लिए नीचे ध्वनि तरंगों पर क्लिक करें और खींचें। आप भी कर सकते हैं सीधे सुनो साउंडक्लाउड पर।

पॉल डकलिन और चेस्टर विस्निविस्की के साथ
इंट्रो और आउट्रो म्यूजिक by एडिथ मुडगे.


समय टिकट:

से अधिक नग्न सुरक्षा