विश्लेषण पिछले सप्ताह, 19 जुलाई, 2024 को 04:09 यूटीसी पर, एंटीवायरस निर्माता क्राउडस्ट्राइक ने अपने व्यापक रूप से उपयोग किए जाने वाले फाल्कन प्लेटफॉर्म के लिए एक अपडेट जारी किया, जिसके कारण दुनिया भर में माइक्रोसॉफ्ट विंडोज मशीनें क्रैश हो गईं।
प्रभाव काफी रहा है. इंटरोस, एक आपूर्ति श्रृंखला कंपनी अनुमान क्राउडस्ट्राइक और माइक्रोसॉफ्ट से 674,620 प्रत्यक्ष उद्यम ग्राहक संबंध प्रभावित हुए। कहा 8.5 मिलियन विंडोज़ मशीनें क्रैश हो गईं। परिणाम एक से परे हैं भारी मात्रा आईटी पुनर्प्राप्ति समय में व्यापक विंडोज़ के कारण वैश्विक उड़ान और शिपिंग देरी शामिल थी शतरंज.
इसका कारण, जैसा कि क्राउडस्ट्राइक द्वारा अब तक पता चला है, “एक तार्किक त्रुटि थी जिसके परिणामस्वरूप सिस्टम क्रैश हो गया और प्रभावित सिस्टम पर ब्लू स्क्रीन (बीएसओडी) हो गई।”
यह क्रैश संभवतः विकृत डेटा के कारण हुआ था जो चैनल फ़ाइल नामक फाल्कन कॉन्फ़िगरेशन फ़ाइल में समाप्त हुआ, जो क्राउडस्ट्राइक के सुरक्षा सॉफ़्टवेयर के संचालन को नियंत्रित करता है।
चैनल फ़ाइलें क्राउडस्ट्राइक द्वारा समय के साथ अद्यतन की जाती हैं और इसके सॉफ़्टवेयर को चलाने वाले सिस्टम में प्रेषित की जाती हैं। बदले में, फाल्कन इन मशीनों पर खतरों का पता लगाने और उनका जवाब देने के लिए फाइलों में मौजूद जानकारी का उपयोग करता है। यह फाल्कन के व्यवहार तंत्र का हिस्सा है जो कंप्यूटर पर मैलवेयर और अन्य अवांछित गतिविधि की पहचान करता है, उजागर करता है और उन्हें विफल करता है।
इस मामले में, फाल्कन चलाने वाले लाखों विंडोज़ कंप्यूटरों को एक कॉन्फ़िगरेशन फ़ाइल भेजी गई, जिसने सुरक्षा सॉफ़्टवेयर को इस हद तक बाधित कर दिया कि पूरा सिस्टम क्रैश हो गया। किसी प्रभावित कंप्यूटर को पुनरारंभ करने पर, यह लगभग तुरंत फाल्कन प्रारंभ कर देगा और फिर से क्रैश हो जाएगा।
क्राउडस्ट्राइक के अनुसार, विंडोज़ मशीनों पर चैनल फ़ाइलें निम्नलिखित निर्देशिका में संग्रहीत की जाती हैं:
C:WindowsSystem32driversCrowdStrike
फ़ाइलें एक नामकरण परंपरा का उपयोग करती हैं जो “C-” से शुरू होती है और उसके बाद एक विशिष्ट पहचान संख्या होती है। इस मामले में ग़लत फ़ाइल नाम “C-00000291-” से शुरू हुआ, उसके बाद कई अन्य नंबर आए और .sys एक्सटेंशन के साथ समाप्त हुआ। लेकिन क्राउडस्ट्राइक के अनुसार ये कर्नेल ड्राइवर नहीं हैं; वास्तव में, वे फाल्कन द्वारा उपयोग की जाने वाली डेटा फ़ाइलें हैं, जो ड्राइवर स्तर पर चलती हैं।
अर्थात्, दूषित कॉन्फ़िगरेशन फ़ाइल ड्राइवर निष्पादन योग्य नहीं थी, लेकिन क्राउडस्ट्राइक के अत्यधिक विश्वसनीय कोड द्वारा संसाधित की गई थी, जिसे ऑपरेटिंग सिस्टम के संदर्भ में चलाने की अनुमति दी गई थी, और जब खराब फ़ाइल ने इस कोड को पटरी से उतार दिया, तो इसने पूरे आसपास के ऑपरेटिंग को बंद कर दिया सिस्टम – इस गाथा में माइक्रोसॉफ्ट विंडोज़।
“291 पाइप फ़ाइल नियंत्रित करती है कि फाल्कन विंडोज सिस्टम पर नामित पाइप निष्पादन का मूल्यांकन कैसे करता है। नामांकित पाइपों का उपयोग विंडोज़ में सामान्य, इंटरप्रोसेस या इंटरसिस्टम संचार के लिए किया जाता है,” क्राउडस्ट्राइक ने बताया एक तकनीकी सारांश सप्ताहांत में जारी किया गया।
कॉन्फ़िग अपडेट ने एक तर्क त्रुटि उत्पन्न की जिसके कारण ऑपरेटिंग सिस्टम क्रैश हो गया
“अपडेट जो 04:09 यूटीसी पर हुआ, उसे साइबर हमलों में आम सी2 फ्रेमवर्क द्वारा उपयोग किए गए हाल ही में देखे गए दुर्भावनापूर्ण नामित पाइपों को लक्षित करने के लिए डिज़ाइन किया गया था। कॉन्फ़िगरेशन को अपडेट करने से एक तर्क त्रुटि उत्पन्न हुई जिसके परिणामस्वरूप ऑपरेटिंग सिस्टम क्रैश हो गया। »
क्राउडस्ट्राइक ने मैलवेयर का पता लगाया जो इस मैलवेयर के कमांड और कंट्रोल (सी2) सर्वर के साथ संचार करने के लिए “नामित पाइप” नामक विंडोज़ सुविधा का दुरुपयोग कर रहा है, जो आम तौर पर मैलवेयर को सभी प्रकार के बुरे काम करने का निर्देश देता है। क्राउडस्ट्राइक ने पाइपों के इस दुरुपयोग का पता लगाने और उसे रोकने के लिए कॉन्फिग फाइल में एक अपडेट जारी किया, लेकिन कॉन्फिग फाइल ने फाल्कन को तोड़ दिया।
हालाँकि ऐसी अटकलें हैं कि त्रुटि चैनल फ़ाइल में शून्य बाइट्स का परिणाम थी, क्राउडस्ट्राइक का कहना है कि ऐसा नहीं है।
साइबर सुरक्षा टीम ने कहा, “यह चैनल फ़ाइल 291 या किसी अन्य चैनल फ़ाइल में निहित शून्य बाइट्स से संबंधित नहीं है,” यह निर्धारित करने के लिए आगे मूल कारण विश्लेषण का वादा किया गया कि तर्क दोष कैसे उत्पन्न हुआ।
त्रुटि के मूल कारण के बारे में विशिष्ट विवरण अभी तक आधिकारिक तौर पर खुलासा नहीं किया गया है – क्राउडस्ट्राइक के सीईओ जॉर्ज कर्ट्ज़ को इस मुद्दे पर कांग्रेस के सामने गवाही देने के लिए कहा गया था – हालांकि Google प्रोजेक्ट ज़ीरो गुरु जैसे सुरक्षा विशेषज्ञ टैविस ओरमंडी और ऑब्जेक्टिफ़-सी के संस्थापक पैट्रिक वार्डलेदृढ़तापूर्वक तर्क दिया गया कि आपत्तिजनक चैनल फ़ाइल ने किसी तरह फाल्कन को स्मृति में जानकारी तक पहुंचने का कारण बना दिया था जो कि वहां थी ही नहीं, जिससे दुर्घटना हो गई।
ऐसा प्रतीत होता है कि फाल्कन एक लूप में तालिका से प्रविष्टियों को मेमोरी में पढ़ता है और आगे के काम के लिए उन प्रविष्टियों को मेमोरी के पॉइंटर्स के रूप में उपयोग करता है। जब कॉन्फ़िगरेशन फ़ाइल के कारण इनमें से कम से कम एक प्रविष्टि सही या मौजूद नहीं थी, और इसके बजाय एक गलत मान शामिल था, तो कर्नेल-स्तरीय कोड ने उस गलत मान का उपयोग किया जैसे कि वह वैध था, जिसके लिए उसे अनमैप्ड मेमोरी तक पहुंचने की आवश्यकता थी।
इस खराब पहुंच का पता सीपीयू और ऑपरेटिंग सिस्टम द्वारा लगाया गया, और बीएसओडी को ट्रिगर किया गया क्योंकि इस बिंदु पर ऑपरेटिंग सिस्टम को पता है कि एक अप्रत्याशित घटना बहुत निचले स्तर पर हुई है। इस स्थिति में जारी रखने और डेटा पर लिखने और अधिक नुकसान पहुंचाने की कोशिश करने की तुलना में क्रैश हो जाना संभवतः बेहतर है।
वार्डले ने कहा रजिस्टर क्रैश डंप और टियरडाउन स्पष्ट रूप से दिखाते हैं कि दुर्घटना अप्रारंभीकृत डेटा को एक पॉइंटर – एक वाइल्ड पॉइंटर – के रूप में उपयोग करने के प्रयास के कारण हुई थी, लेकिन अन्य विवरण अज्ञात हैं।
“हमारे पास अभी भी सटीक कारण नहीं है कि स्ट्रिंग फ़ाइल ने इसे क्यों ट्रिगर किया,” उन्होंने कहा।
रजिस्टर के प्रबंध निदेशक, साइबर सुरक्षा दिग्गज ओमखार अरासरत्नम से बात की ओपनएसएसएफइस बारे में कि चीजें कैसे बिखर गईं।
अरासरत्नम ने कहा कि सटीक कारण अटकलों का विषय बना हुआ है क्योंकि उनके पास क्राउडस्ट्राइक के स्रोत कोड या विंडोज कर्नेल तक पहुंच नहीं है।
उन्होंने कहा, क्राउडस्ट्राइक के फाल्कन सॉफ्टवेयर में दो घटक हैं: एक डिजिटल रूप से हस्ताक्षरित, माइक्रोसॉफ्ट द्वारा अनुमोदित ड्राइवर जिसे कहा जाता है CSAgent.sys और चैनल फ़ाइलें सॉफ़्टवेयर को नवीनतम सुरक्षा जानकारी के साथ अद्यतन करने के लिए उपयोग की जाती हैं।
अरासरत्नम ने कहा, “क्राउडस्ट्राइक ने मूल रूप से एक हस्ताक्षरित ड्राइवर बनाया है जो इन चैनल कॉन्फ़िगरेशन का एक समूह लोड करता है।” “हम नहीं जानते कि चैनल कॉन्फ़िगरेशन फ़ाइल में वास्तव में क्या है। यह इस बात का संयोजन है कि फ़ाइल में क्या है, साथ ही CSAgent.sys इसकी व्याख्या कैसे करता है। »
एक स्टैक ट्रेस के अनुसार, उन्होंने समझाया, CSAgent.sys एक त्रुटिपूर्ण पॉइंटर डेरेफ़रेंस नामक कार्य करने के लिए बंद है। उसने पते से मेमोरी तक पहुंचने का प्रयास किया 0x000000000000009c
जो अस्तित्व में नहीं था.
अरासरत्नम ने कहा, “यह स्मृति का एक क्षेत्र था जिस तक उनकी पहुंच नहीं होनी चाहिए थी।”
अरासरत्नम ने कहा, “इस तरह के बहुत ही निम्न-स्तरीय प्रोग्राम के साथ आपको जो समस्या आती है, वह यह है कि कर्नेल को ऑपरेटिंग सिस्टम के कई निम्न-स्तरीय कार्यों के लिए जिम्मेदार माना जाता है, जिसमें मेमोरी से आवंटन भी शामिल है।”
“तो यदि कर्नेल, संक्षेप में, उस मेमोरी तक पहुंचने की कोशिश कर रहा है जिसे उसे एक्सेस नहीं करना चाहिए, तो ऑपरेटिंग सिस्टम सिद्धांत परिप्रेक्ष्य से, करने के लिए उचित बात यह है कि आवंटित की गई मेमोरी का कोई भी हिस्सा नहीं है सुरक्षित, क्योंकि यदि कर्नेल को यह पता नहीं है, तो आखिर कौन इसे जानता है, और मूल रूप से सिस्टम को बंद कर देता है। »
अरासरत्नम ने बताया कि विंडोज़ ड्राइवर आर्किटेक्चर के काम करने के तरीके से स्थिति जटिल थी।
“जिस तरह से यह काम करता है वह इस प्रकार है: ड्राइवर स्टार्ट-स्टार्ट नामक एक संकेतक सेट कर सकते हैं,” उन्होंने समझाया।
“आम तौर पर, यदि आपके पास एक ड्राइवर है जो कुछ हद तक खराब व्यवहार करता है और इस तरह की दुर्घटना का कारण बनता है, तो अगली बार ड्राइवर को लोड न करके विंडोज स्वचालित रूप से फिर से शुरू हो सकता है। लेकिन अगर इसे बूट-स्टार्ट पर सेट किया गया है, जिसे महत्वपूर्ण ड्राइवरों के लिए आरक्षित माना जाता है, जैसे कि आपकी हार्ड ड्राइव के लिए, तो विंडोज़ इसे बूट अनुक्रम से समाप्त नहीं करेगा और बार-बार विफल होता रहेगा, जो जिसे हमने क्राउडस्ट्राइक की विफलता के साथ देखा। »
(हमें लगता है कि इसीलिए Microsoft अनुशंसित लोग समस्या को हल करने के लिए Azure पर प्रभावित Windows VM को 15 बार तक पुनः आरंभ करते हैं, क्योंकि हर बार एक छोटी सी संभावना होती थी कि ड्राइवर CSAgent.sys द्वारा इसे स्कैन करना शुरू नहीं करने से पहले गलत कॉन्फ़िगरेशन फ़ाइल स्वचालित रूप से एक अप्रकाशित फ़ाइल में अपडेट हो जाएगी। कई बार पुनः आरंभ करने के बाद, आप अंततः इस दौड़ की स्थिति को जीत लेंगे।)
अरासरत्नम ने कहा कि इसके अलावा, हम यह नहीं जान पाएंगे कि चैनल फ़ाइल अपडेट जिसने CSAgent.sys को खराब पॉइंटर डीरेफ़रेंस करने के लिए कहा था, गुणवत्ता आश्वासन (क्यूए) पास करने में कैसे कामयाब रहा।
उन्होंने कहा, “यह स्पष्ट प्रतीत होता है कि जितनी बार दुर्घटनाएं हुईं, उसे देखते हुए गुणवत्ता नियंत्रण में कुछ चूक हुई।” “ऐसा प्रतीत होता है कि गुणवत्ता नियंत्रण की थोड़ी सी मात्रा भी इसका पता लगा सकती थी। यह कोई सीमावर्ती मामला नहीं है जहां यह 1,000 मशीनों में से केवल एक को प्रभावित करता है, है ना? »
अरासरत्नम ने कहा कि पालन करने के लिए कई सर्वोत्तम प्रथाएं हैं। पहला यह कि यदि आप इससे बच सकते हैं तो सॉफ़्टवेयर को कर्नेल मोड में न चलाएँ। दूसरा यह सुनिश्चित करना है कि गुणवत्ता आश्वासन अधिक गहन हो। तीसरा है वृद्धिशील कैनरी संस्करणों को तैनात करके Google की तरह काम करना।
उन्होंने समझाया: “Google द्वारा उपयोग की जाने वाली तकनीकों में से एक, जिसका उपयोग हमने तब किया था जब मैं वहां था, वह करना है जिसे कैनरी रिलीज़ कहा जाता है – क्रमिक या धीमी गति से रोलआउट – और देखें कि क्या होता है बजाय इसके कि माइक्रोसॉफ्ट ने 8.5 मिलियन मशीनों का अनुमान लगाया था। »®