
कुछ पुराने Qualcomm चिपसेट के हाइपरवाइज़र फर्मवेयर में सुरक्षा समस्या
CVE-2022-22063 कुछ पुराने Qualcomm चिपसेट के हाइपरवाइज़र फर्मवेयर में एक सुरक्षा समस्या है। एक असुरक्षित हार्डवेयर घटक ("बूट रीमैपर") का दुरुपयोग करके एक संशोधित ऑपरेटिंग सिस्टम से हाइपरवाइज़र तक पूर्ण पढ़ने/लिखने की पहुँच प्राप्त की जा सकती है (विशेषाधिकार वृद्धि)। प्रभावित प्लेटफार्मों पर इस समस्या का शोषण करना तुच्छ है, क्योंकि विशिष्ट फर्मवेयर संस्करण (जैसे पते या चर) के बारे में ज्ञान की आवश्यकता नहीं है।
नोट: हालाँकि Qualcomm ने ग्राहकों को सुधार प्रदान किए हैं (अपडेट जारी करने के लिए पर्याप्त समय के साथ) लेकिन कई प्रभावित उपकरण पहले से ही काफी पुराने हैं और विक्रेता से सुधार प्राप्त नहीं कर सकते हैं। इस समस्या का शोषण केवल एक संशोधित या समझौता किए गए ऑपरेटिंग सिस्टम (किसी अन्य सुरक्षा समस्या का उपयोग करके) से किया जा सकता है। ऑपरेटिंग सिस्टम को अद्यतित और सुरक्षित रखना पर्याप्त हो सकता है भले ही फर्मवेयर कमजोर हो।
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hयह मुद्दा [Qualcomm के दिसंबर 2022 सुरक्षा बुलेटिन] में भी प्रकाशित किया गया था।
यह मुद्दा प्रभावित लक्ष्य पर चल रहे हार्डवेयर और सॉफ्टवेयर के संयोजन पर निर्भर करता है:
hyp विभाजन में एक ELF इमेज)।APCS_BOOT_START_ADDR_NSEC नामक हार्डवेयर रजिस्टर का उपयोग करके कॉन्फ़िगरेबल), जो हाइपरवाइज़र द्वारा संरक्षित नहीं है और इसलिए कम विशेषाधिकार प्राप्त ऑपरेटिंग सिस्टम कर्नेल (जैसे Linux) द्वारा सुलभ है।कई और चिपसेट हैं जिनमें संभवतः प्रभावित हार्डवेयर है (उदा. MSM8909 और MSM8953), लेकिन उनके पास एक अलग हाइपरवाइज़र फर्मवेयर नहीं है जिससे समझौता किया जा सके।
विशेषाधिकार वृद्धि: पहले से समझौता किए गए ऑपरेटिंग सिस्टम कर्नेल (जैसे Linux) को देखते हुए, यह मुद्दा हाइपरवाइज़र स्तर तक आसानी से विशेषाधिकार बढ़ाने की अनुमति देता है (ARM पर EL1 -> EL2)। हाइपरवाइज़र द्वारा प्रबंधित सभी मेमोरी को पढ़ा या लिखा जा सकता है। यह हाइपरवाइज़र द्वारा प्रबंधित विभिन्न सुरक्षा डोमेन या वर्चुअल मशीनों (यदि कोई हों, कॉन्फ़िगरेशन पर निर्भर) के अलगाव को तोड़ता है। (यह भी देखें: [Qualcomm Snapdragon प्लेटफार्मों पर पहुँच नियंत्रण का परिचय])
सुरक्षित बूट: उत्पादन में उपलब्ध अधिकांश Qualcomm डिवाइस फर्मवेयर के अनधिकृत संशोधन को रोकने के लिए सुरक्षित बूट का उपयोग करते हैं। फर्मवेयर क्रिप्टोग्राफ़िक रूप से हस्ताक्षरित होता है और बूट श्रृंखला द्वारा सत्यापित किया जाता है। यह मुद्दा एक संशोधित ऑपरेटिंग सिस्टम से रनटाइम पर लोड किए गए हाइपरवाइज़र फर्मवेयर को संशोधित करने या पूरी तरह से बदलने की अनुमति देता है (या तो आधिकारिक रूप से समर्थित "बूटलोडर अनलॉकिंग" या किसी अन्य एक्सप्लॉइट के माध्यम से)। (यह भी देखें: [Qualcomm सुरक्षित बूट और छवि प्रमाणीकरण तकनीकी अवलोकन (v1.0)] और (v2.0))
नोट: यह मुद्दा मूल रूप से Qualcomm Snapdragon 410 (MSM8916) प्लेटफॉर्म पर पाया गया था। निम्नलिखित में से कुछ स्पष्टीकरण MSM8916 के लिए विशिष्ट हो सकते हैं, उदा.:
हालाँकि, सामान्य अवधारणा सभी प्रभावित प्लेटफार्मों पर समान रूप से लागू होती है।
ARMv8-A 64-बिट आर्किटेक्चर 4 विशेषाधिकार स्तरों ("अपवाद स्तर", EL) को परिभाषित करता है। अलग-अलग स्तर होते हैं जो आमतौर पर एप्लिकेशन, ऑपरेटिंग सिस्टम कर्नेल और हाइपरवाइज़र के लिए उपयोग किए जाते हैं:
CPU अपवादों के दौरान स्तरों के बीच स्विच करता है, उदा. आने वाले इंटरप्ट के कारण। कुछ स्तरों के बीच विशेष निर्देशों का उपयोग करके स्विच करना भी संभव है, जैसे हाइपरवाइज़र कॉल (hvc)।
(यह भी देखें: [AArch64 अपवाद मॉडल])
हाइपरवाइज़र एक या कई वर्चुअल मशीनों को अलग-अलग ऑपरेटिंग सिस्टम कर्नेल के साथ होस्ट कर सकता है। प्रत्येक वर्चुअल मशीन को स्टेज 2 ट्रांसलेशन का उपयोग करके मेमोरी का अपना दृश्य दिया जा सकता है। वर्चुअल मशीन से सभी मेमोरी एक्सेस दो ट्रांसलेशन चरणों से गुज़रते हैं: पहला (वर्चुअल) ऑपरेटिंग सिस्टम द्वारा प्रबंधित किया जाता है, जबकि दूसरा चरण हाइपरवाइज़र द्वारा प्रबंधित किया जाता है। हाइपरवाइज़र या अन्य वर्चुअल मशीनों द्वारा उपयोग की जाने वाली मेमोरी को ट्रांसलेशन तालिकाओं से हटाकर छिपाया जा सकता है। (यह भी देखें: [AArch64 वर्चुअलाइज़ेशन], [AArch64 मेमोरी प्रबंधन])
Qualcomm का हाइपरवाइज़र फर्मवेयर EL2 में चलता है और EL1 (आमतौर पर Linux) में चलने वाले मुख्य ऑपरेटिंग सिस्टम कर्नेल से हाइपरवाइज़र मेमोरी तक पहुँच को अस्वीकार करने के लिए स्टेज 2 ट्रांसलेशन का उपयोग करता है। ध्यान दें कि इस सेटअप में स्टेज 2 ट्रांसलेशन का उपयोग मुख्य रूप से मेमोरी सुरक्षा के लिए किया जाता है, बिना पता अनुवाद के। मुख्य ऑपरेटिंग सिस्टम को मेमोरी-मैप्ड इनपुट/आउटपुट (MMIO) स्पेस में अधिकांश हार्डवेयर घटकों तक सीधी पहुँच मिलती है, उदा. SD कंट्रोलर या कैमरा सबसिस्टम। हाइपरवाइज़र/EL2 (hyp) और सिक्योर मॉनिटर/EL3 (tz का हिस्सा) से संबंधित मेमोरी तक पहुँच प्रतिबंधित है:
बूट रीमैपर वर्चुअलाइज़ेशन से संबंधित नहीं है: इसकी आवश्यकता CPU कोर के प्रारंभिक बूट के दौरान होती है। इस हार्डवेयर प्लेटफॉर्म पर CPU कोर हमेशा एड्रेस 0x0 पर निष्पादन शुरू करते हैं। बूट रीमैपर CPU के चारों ओर बना एक अतिरिक्त हार्डवेयर घटक है जो पहले 64 या 128 KiB (0x00000 - 0x20000) को एक कॉन्फ़िगरेबल मेमोरी क्षेत्र में रीमैप करता है।
डिफ़ॉल्ट रूप से बूट रीमैपर बूट ROM (पहला कोड जो डिवाइस शुरू होने पर चलता है) को इंगित करता है। बाद में मैपिंग बदल दी जाती है ताकि अन्य CPU कोर तुरंत EL3 फर्मवेयर (tz का हिस्सा) में निष्पादन शुरू करें जो RAM में लोड किया गया था:
ध्यान दें कि CPU द्वारा एक्सेस किया गया पता (tz के अंतर्गत) दो अलग-अलग भौतिक पतों का उपयोग करके सुलभ है: RAM में वास्तविक पता (0x8650xxxx) और बूट रीमैपर का उपयोग करके रीमैप किया गया पता (0x0000xxxx)।
वास्तव में बूट रीमैपर के दो अलग-अलग उदाहरण हैं:
APCS_BOOT_START_ADDR_SEC (= 0x0b010004) का उपयोग करके कॉन्फ़िगरेबल है लेकिन केवल सुरक्षित अवस्था में।APCS_BOOT_START_ADDR_NSEC (= 0x0b010008) का उपयोग करके कॉन्फ़िगरेबल है, यहाँ तक कि गैर-सुरक्षित अवस्था में भी।दोनों बूट रीमैपर उदाहरणों को एक मेमोरी रजिस्टर का उपयोग करके कॉन्फ़िगर किया जा सकता है जिसमें रीमैप किए गए क्षेत्र का आधार पता और दो कॉन्फ़िगरेशन बिट होते हैं: रीमैपिंग सक्षम करने के लिए REMAP_EN और केवल 64 KiB के बजाय पहले 128 KiB को रीमैप करने के लिए BOOT_128KB_EN।
(यह भी देखें: [Qualcomm Snapdragon 410E तकनीकी संदर्भ मैनुअल rev. D], पृष्ठ 85 और 116)
पिछले दो अनुभागों के ज्ञान का उपयोग करके मूल विचार सरल है: हाइपरवाइज़र की मेमोरी सुरक्षा (स्टेज 2 ट्रांसलेशन) को बायपास करने के लिए बूट रीमैपर का उपयोग करें।