
ETS5 Password Recovery Tool CVE-2021-36799 के लिए एक PoC है
क्या आप अपने एक ETS5 प्रोजेक्ट का पासवर्ड भूल गए हैं और अब KNX स्थापना के कॉन्फ़िगरेशन तक नहीं पहुँच सकते? ETS5 पासवर्ड रिकवरी टूल आपको ETS5 के प्रोजेक्ट स्टोर में सहेजे गए प्रोजेक्ट पासवर्ड और अन्य रहस्यों को पुनर्प्राप्त करने की अनुमति देता है। यह संभव है क्योंकि ETS5 में एक महत्वपूर्ण डिज़ाइन दोष है, यह प्रोजेक्ट जानकारी को एन्क्रिप्ट करने के लिए एक हार्ड-कोडेड पासवर्ड और सॉल्ट का उपयोग करता है (CVE-2021-36799)।
स्रोत कोड में क्रिप्टोग्राफ़िक रहस्यों को संग्रहीत करना अनुचित है क्योंकि उन्हें सॉफ़्टवेयर के रिवर्स इंजीनियरिंग द्वारा पुनर्प्राप्त किया जा सकता है, इस प्रकार जानकारी को स्पष्ट पाठ के रूप में संग्रहीत करने की तुलना में थोड़ी अधिक सुरक्षा प्रदान करता है। यह KNX स्थापनाओं की सुरक्षा के लिए खतरा पैदा कर सकता है। यदि कोई हमलावर प्रोजेक्ट स्टोर में फाइलों तक पहुँच प्राप्त करने में सक्षम है, तो वे प्रोजेक्ट पासवर्ड जाने बिना भी उन्हें डिक्रिप्ट कर सकते हैं। इसमें निहित जानकारी KNX उपकरणों पर जासूसी करने, उनका प्रतिरूपण करने और पुन: कॉन्फ़िगर करने की अनुमति देती है। यह विशेष रूप से समस्याजनक है, क्योंकि ETS5 उपयोगकर्ताओं को यह आभास देता है कि प्रोजेक्ट पासवर्ड का उपयोग प्रोजेक्ट जानकारी को एन्क्रिप्ट करने के लिए किया जाएगा, न कि केवल निर्यात किए गए प्रोजेक्टों के लिए। इसलिए, यह संभावना है कि कई उपयोगकर्ताओं और सिस्टम इंटीग्रेटर्स ने प्रोजेक्ट स्टोर की गोपनीयता सुनिश्चित करने के लिए अतिरिक्त कदम नहीं उठाए हैं। यदि ETS5 एन्क्रिप्शन को ठीक से लागू करता है और एक मजबूत प्रोजेक्ट पासवर्ड चुना जाता है, तो यह हमलावर के लिए एक कठिन चुनौती प्रदान करेगा, भले ही वे कंप्यूटर तक दूरस्थ पहुँच प्राप्त करने में सफल हों।
निम्नलिखित गोपनीय जानकारी अनुचित रूप से एन्क्रिप्ट की गई है:
ETS5 पासवर्ड रिकवरी टूल एक प्रूफ ऑफ कॉन्सेप्ट है जो संवेदनशील जानकारी को डिक्रिप्ट और प्रदर्शित करके समस्या को प्रदर्शित करता है। इसे समन्वित भेद्यता प्रकटीकरण के भाग के रूप में विकसित किया गया था और KNX एसोसिएशन की अनुमति से जारी किया गया है। टूल को प्रकाशित करने के निम्नलिखित उद्देश्य हैं:
चेतावनी: इस टूल का उपयोग केवल तभी करें जब आप प्रोजेक्ट जानकारी देखने के लिए कानूनी रूप से अधिकृत हों। सुरक्षा उपायों को दरकिनार करना, भले ही वे अप्रभावी हों, उस जानकारी तक पहुँच प्राप्त करने के लिए जिसे देखने की आपको अनुमति नहीं है, आपके क्षेत्राधिकार में एक अपराध हो सकता है।
निष्पादन योग्य रिलीज़ अनुभाग से डाउनलोड किया जा सकता है। इसे स्थापित करने की आवश्यकता नहीं है और इसे पसंद के किसी भी निर्देशिका में रखा जा सकता है।
वैकल्पिक रूप से, यदि आप अपने सिस्टम पर एक अविश्वसनीय बाइनरी नहीं चलाना चाहते हैं, तो आप CyberChef वेबसाइट पर प्रोजेक्ट की XML फ़ाइलों से व्यक्तिगत विशेषताओं को डिक्रिप्ट कर सकते हैं।
सॉफ़्टवेयर .NET Framework 4.6 या बाद के संस्करण पर निर्भर करता है। Windows 10 में पहले से ही डिफ़ॉल्ट रूप से एक उपयुक्त .NET संस्करण शामिल है। पुराने Windows संस्करणों के उपयोगकर्ताओं को सॉफ़्टवेयर चलाने के लिए एक वर्तमान .NET Framework संस्करण स्थापित करना होगा।
उपयोगकर्ता इंटरफ़ेस के विपरीत, ETS5 आपके स्थानीय रूप से संग्रहीत प्रोजेक्ट फ़ाइलों को C:\ProgramData\KNX\ETS5\ProjectStore में प्रोजेक्ट पासवर्ड से एन्क्रिप्ट नहीं करता है। इसके बजाय, यह प्रोजेक्ट की XML फ़ाइलों में विशिष्ट विशेषताओं को अस्पष्ट करने के लिए हार्ड-कोडेड पासवर्ड ETS5Password और सॉल्ट Ivan Medvedev का उपयोग करता है। हार्ड-कोडेड क्रिप्टोग्राफ़िक रहस्य सर्वोत्तम प्रथाओं के विरुद्ध हैं, जैसा कि CWE-798 और CWE-321 में समझाया गया है।
डीओबफस्केशन की प्रक्रिया इस प्रकार है:
Ivan Medvedev का बाइट प्रतिनिधित्व ASCII या UTF-8 एन्कोडेड स्ट्रिंग के रूप में प्राप्त करें।ETS5Password और सॉल्ट के रूप में Ivan Medvedev के बाइट प्रतिनिधित्व के साथ किया जाता है। कुंजी व्युत्पत्ति आउटपुट के पहले 32 बाइट्स का उपयोग कुंजी के रूप में और अगले 16 बाइट्स का उपयोग IV के रूप में किया जाएगा।डीओबफस्केशन का एक कार्यान्वयन Deobfuscator.cs फ़ाइल में पाया जा सकता है। चूंकि पासवर्ड और सॉल्ट स्थिर हैं, इसलिए कुंजी व्युत्पत्ति को छोड़ने के लिए कुंजी और IV की पूर्व-गणना करना संभव होगा। यह इस सॉफ़्टवेयर के कार्यान्वयन में नहीं किया गया है, क्योंकि इसका उद्देश्य डीओबफस्केशन के सभी चरणों को दिखाना है। हालाँकि, यदि आपको कुंजी और IV की आवश्यकता है, तो वे नीचे सूचीबद्ध हैं।
| हेक्स | बेस64 | |
|---|---|---|
| कुंजी | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
निर्यात की गई प्रोजेक्ट फ़ाइलें (.knxproj) इस डिज़ाइन दोष से प्रभावित नहीं होती हैं, और इस प्रकार इस टूल का उपयोग उनके लिए प्रोजेक्ट पासवर्ड पुनर्प्राप्त करने के लिए नहीं किया जा सकता है। .knxproj फ़ाइल एक ZIP फ़ाइल है जिसमें संवेदनशील जानकारी वाली एक और ZIP फ़ाइल होती है। उत्तरार्द्ध Deflate संपीड़न, ZipCrypto / PKWARE एन्क्रिप्शन और एन्क्रिप्शन कुंजी की व्युत्पत्ति के लिए प्रोजेक्ट पासवर्ड का उपयोग करता है।
अपनी थीसिस "Security Analysis of the KNXnet/IP Secure Protocol" की तैयारी के दौरान, मैंने जांच की कि ETS5 प्रोजेक्ट जानकारी कैसे संग्रहीत करता है। चूंकि ETS क्रिप्टोग्राफ़िक कुंजियाँ और पासवर्ड उत्पन्न और संग्रहीत करता है जिनका उपयोग KNX IP सुरक्षित डिवाइस एक-दूसरे को प्रमाणित करने, मल्टीकास्ट संचार के लिए गोपनीयता प्रदान करने और डिवाइसों के कॉन्फ़िगरेशन को सुरक्षित करने के लिए करते हैं, इसलिए जानकारी को गुप्त रखना महत्वपूर्ण है। यदि कोई हमलावर ETS द्वारा संग्रहीत प्रोजेक्ट जानकारी तक पहुँच प्राप्त कर लेता है, तो यह KNX स्थापना की सुरक्षा को पूरी तरह से समझौता कर देगा।
इस कारण से, ETS5 के प्रोजेक्ट स्टोर का निरीक्षण किया गया ताकि यह जाँचा जा सके कि डेटा इस तरह से संग्रहीत किया गया है जो गोपनीयता सुनिश्चित करता है। C:\ProgramData\KNX\ETS5\ProjectStore में प्रोजेक्ट फ़ाइलें प्रत्येक उपयोगकर्ता खाते द्वारा पठनीय हैं, किसी व्यवस्थापक अधिकार की आवश्यकता नहीं है। निम्नलिखित संकेतक पाए गए जिन्होंने संदेह बढ़ाया कि डेटा ठीक से एन्क्रिप्ट नहीं किया गया है:
अंतिम बिंदु ने स्पष्ट रूप से संकेत दिया कि प्रोजेक्ट पासवर्ड का उपयोग उस एल्गोरिथ्म में नहीं किया गया था जो विशेषता मानों को संशोधित करता है। एक उदाहरण नीचे देखा जा सकता है, जहाँ दो प्रोजेक्ट P-02FB और P-0117 में डिवाइस प्रमाणीकरण कोड समान मानों पर सेट किए गए थे। अलग-अलग प्रोजेक्ट पासवर्ड का उपयोग करने के बावजूद अस्पष्ट आउटपुट भी समान हैं। चूंकि ETS5 में प्रोजेक्ट खोलते समय प्रोजेक्ट पासवर्ड के अलावा कुछ भी दर्ज करने का कोई संकेत नहीं है, इसका मतलब था कि कुंजी या तो कहीं संग्रहीत होनी चाहिए या यह एक सरल अस्पष्टीकरण एल्गोरिथ्म होगा जिसमें किसी कुंजी की आवश्यकता नहीं है। यह संभावित लगा कि समाधान गोपनीयता सुनिश्चित करने के लिए आदर्श नहीं था और संभावित रूप से KNX स्थापनाओं को जोखिम में डाल सकता है।
चूंकि ETS5 .NET फ्रेमवर्क पर आधारित है, जो उपयोग किए गए DLL से तुरंत स्पष्ट था, ILSpy के माध्यम से डीकंपाइल करना आसानी से किया जा सकता था। बाइनरी को Dotfuscator के साथ अस्पष्ट किया गया था, संभवतः रिवर्स इंजीनियरिंग प्रयासों को और कठिन बनाने के लिए। हालांकि, क्लास और फंक्शन के नाम आश्चर्यजनक रूप से अधिकतर बरकरार थे। इसलिए, चुनी गई विधि उन क्लास और फंक्शन की खोज करना थी जो XML फाइलों के प्रसंस्करण, एन्क्रिप्शन, डिक्रिप्शन, ऑबफस्केशन, डीऑबफस्केशन, कुंजियों या पासवर्ड से संबंधित प्रतीत होते थे। इससे Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble और Knx.Ets.ObjectModel.Import.Encryption.EncryptString की खोज हुई, जिन्हें XML फाइलों में संग्रहीत विशेषताओं के अस्पष्ट मानों पर बुलाया जाता है। फंक्शनों में कोई कुंजी सामग्री पारित नहीं की जा रही थी, केवल स्थिर मानों का उपयोग करके एक कुंजी प्राप्त की गई, जिसका उपयोग AES-256 को CBC मोड में उपयोग करके विशेषताओं को एन्क्रिप्ट/डिक्रिप्ट करने के लिए किया गया। यह स्पष्ट था कि कुंजी प्राप्त करने के लिए हार्ड-कोडेड क्रेडेंशियल्स का उपयोग किया गया था। Dotfuscator ने नियंत्रण प्रवाह को बदल दिया और अनावश्यक संचालन सम्मिलित किए, लेकिन .NET फ्रेमवर्क से फंक्शन कॉल को छिपाया नहीं जा सका। इस प्रकार, अर्ध-क्लीन-रूम दृष्टिकोण के लिए इस चरण में (डी-)ऑबफस्केशन के लिए एक विनिर्देश लिखना संभव था। केवल गायब हिस्सा कुंजी व्युत्पत्ति में उपयोग किया जाने वाला स्ट्रिंग था, जिसे Dotfuscator ने अस्पष्ट कर दिया था। स्ट्रिंग ऑबफस्केशन को उलटने के लिए De4dot चुना गया, जिससे ETS5Password पासवर्ड प्रकट हुआ। IV पहले से ही De4dot लागू करने से पहले पढ़ने योग्य था, क्योंकि इसे एक बाइट अनुक्रम के रूप में परिभाषित किया गया था। व्यक्तिगत जिज्ञासा के कारण, यह पता चला कि वे यादृच्छिक बाइट्स नहीं थे, बल्कि वास्तव में Ivan Medvedev स्ट्रिंग का ASCII/UTF-8 बाइट प्रतिनिधित्व थे।
चूंकि डिज़ाइन दोष KNX इंस्टॉलेशन के लिए जोखिम पैदा करता है, इसलिए समस्या को KNX एसोसिएशन को रिपोर्ट किया जाना था। एक प्रूफ ऑफ कॉन्सेप्ट कार्यान्वयन की आवश्यकता थी ताकि यह सुनिश्चित किया जा सके कि यदि पूछा जाए तो समस्या प्रदर्शित की जा सके। कॉपीराइट उल्लंघन से बचने के लिए, प्रूफ ऑफ कॉन्सेप्ट को नोट किए गए विनिर्देश के आधार पर लागू किया गया था। यह मूल सॉफ़्टवेयर से कोड के किसी भी पुन: उपयोग से बचने के लिए किया गया था। Dotfuscator के अनुप्रयोग ने यह भी सुनिश्चित किया कि मूल और यहां तक कि अनऑबफस्केटेड कोड भी एक स्वच्छ कार्यान्वयन के लिए किसी भी तरह से अनुपयोगी था, जिसने यह सुनिश्चित किया कि मूल की अनजाने प्रतिलिपि की भी संभावना नहीं थी।
प्रूफ ऑफ कॉन्सेप्ट के विकास के बाद समन्वित प्रकटीकरण के विवरण के लिए, अनुभाग समन्वित भेद्यता प्रकटीकरण देखें।
दुर्भाग्य से, 2021-07-18 तक, कोई पैच किया गया ETS संस्करण उपलब्ध नहीं है। इसलिए, जोखिमों को संबोधित करने के लिए ETS5 के बाहर अतिरिक्त उपाय आवश्यक हैं। नीचे दिए गए उपखंड विभिन्न दृष्टिकोणों की व्याख्या करते हैं जिन्हें आप अपने खतरे के मॉडल के आधार पर ले सकते हैं और जिनसे आप सुरक्षा करना चाहते हैं।
C:\ProgramData\KNX\ETS5\ProjectStore निर्देशिका और उसमें निहित सभी फ़ाइलों को एन्क्रिप्ट करें।C:\ProgramData\KNX\ETS5\ProjectStore के अंतर्गत प्रदर्शित करने के लिए एक प्रतीकात्मक लिंक बनाने की आवश्यकता है।KNX एसोसिएशन के CTO और CFO, Joost Demarest के अनुसार, ETS5 को कोई पैच प्राप्त नहीं होगा क्योंकि उस संस्करण का विकास पहले ही समाप्त हो चुका है। उन्होंने 2021-07-12 को तत्काल प्रकाशन की अनुमति दी, जिससे प्रकटीकरण के लिए दी गई 90 दिनों की देरी को छोड़ दिया गया।
एक गलतफहमी के कारण, README ने पहले दावा किया था कि KNX एसोसिएशन ETS6 में समस्या का समाधान करने की योजना बना रहा है। ऐसा नहीं है। KNX एसोसिएशन ने 2021-10-25 को स्पष्ट किया है कि वे इस समस्या को ठीक करने की योजना नहीं बनाते हैं, क्योंकि वे इसे ETS की जिम्मेदारी नहीं मानते हैं कि वह क्रिप्टोग्राफिक कुंजी सामग्री को सुरक्षित रूप से संग्रहीत करे जब इसे निर्यात नहीं किया जा रहा हो।
KNX एसोसिएशन ने मुझसे संपर्क किया और बताया कि उन्होंने अपनी योजनाओं को संशोधित किया है। वे अब वर्तमान ETS संस्करण की कमियों का दस्तावेजीकरण करने और भविष्य के ETS6 संस्करण में प्रोजेक्ट स्टोर को ठीक से एन्क्रिप्ट करने का इरादा रखते हैं।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत वितरित किया गया है।
कमिट हैश:
डाउनलोड:
परिवर्तन: