
baton drop (CVE-2022-21894): Secure Boot सुरक्षा सुविधा बायपास भेद्यता
Windows बूट अनुप्रयोग truncatememory सेटिंग को मेमोरी मैप से सीरियलाइज़्ड डेटा के "persistent" रेंज वाले मेमोरी ब्लॉक को हटाने की अनुमति देते हैं, जिससे सिक्योर बूट बाईपास होता है।
truncatememory BCD तत्व मेमोरी मैप से एक निर्दिष्ट भौतिक पते के ऊपर की सभी मेमोरी को हटा देगा।bootdebug, testsigning, nointegritychecks) के उपयोग की अनुमति देगा, जिससे सिक्योर बूट टूट जाएगा।इस समस्या को दो अलग-अलग परिवर्तनों द्वारा ठीक किया गया था:
bootmgr नहीं है, तो बूट अनुप्रयोग आरंभीकरण विफल हो जाता है।VERSIONINFO संसाधन है जिसमें OriginalFilename है, और यदि वह फ़ाइलनाम एक ब्लॉकलिस्ट में शामिल है (जिसमें bootmgr.exe और hvloader.exe शामिल हैं; Nickel में, hvloader.efi जोड़ा गया था लेकिन यह बैकपोर्ट नहीं किया गया), तो लोड विफल हो जाता है।
hvloader.exe winload की ब्लॉकलिस्ट में शामिल नहीं है - मूल रूप से यह शामिल था, जिसने Hyper-V लोडिंग को तोड़ दिया!bootmgr लोड करने के लिए flightedbootmgr तत्व के साथ उपयोग किया जाता है), तो OriginalFilename का bootmgr.exe होना आवश्यक है।हमलावर को यह सुनिश्चित करना होगा कि सीरियलाइज़्ड सिक्योर बूट नीति एक ज्ञात भौतिक पते के ऊपर आवंटित हो।
osdevice एक BitLocker-एन्क्रिप्टेड विभाजन है जहाँ VMK TPM का उपयोग करके प्राप्त किया गया था।
avoidlowmemory तत्व का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि भौतिक मेमोरी के सभी आवंटन एक निर्दिष्ट भौतिक पते से ऊपर हों:
bootmgr लोड करना और एक कस्टम BCD पथ निर्दिष्ट करना (bcdfilepath तत्व उर्फ custom:22000023 का उपयोग करके) इससे बचने के लिए किया जा सकता है।bootmgr के साथ एक बार हमला चलाना और फिर मूल बूटलोडर पर वापस स्विच करना भी संभव है।
bootmgr Windows 10+ सिस्टम पर VMK को अनसील करने में विफल हो जाएगा।hvloader.efi को nointegritychecks तत्व के साथ लोड किया जा सकता है ताकि एक स्व-हस्ताक्षरित mcupdate.dll लोड किया जा सके, जिसका प्रवेश बिंदु ExitBootServices से पहले कॉल किया जाएगा।
वैकल्पिक रूप से, गैर-AMD64 सिस्टम पर, TH2 से पहले के winload.efi का उपयोग testsigning तत्व के साथ किया जा सकता है; यह प्रमाणपत्र में szOID_NT5_CRYPTO EKU वाले स्व-हस्ताक्षरित बाइनरी की अनुमति देता है।
ARMv7 सिस्टम पर, कोड निष्पादन प्राप्त करने के लिए mcupdate.dll के आयात के साथ एक पैच किए गए स्व-हस्ताक्षरित hal.dll को लोड करना आवश्यक होगा।
x86 और AMD64 सिस्टम पर, mcupdate.dll के रूप में लोड की गई फ़ाइल का नाम mcupdate_*.dll होना चाहिए, जहाँ * CPUID निर्माता स्ट्रिंग है (GenuineIntel, AuthenticAMD आदि)।
ARM64 सिस्टम पर, इस तकनीक का उपयोग नहीं किया जा सकता क्योंकि उपलब्ध सबसे पुराना प्रोडक्शन हस्ताक्षरित बिल्ड RS2 का WinPE है; इस प्रकार वर्तमान में केवल टेदर्ड कोड निष्पादन किया जा सकता है (bootdebug का उपयोग करके)।
इस रिपॉजिटरी में निम्नलिखित फ़ाइलें शामिल हैं:
mcupdate.dll पेजिंग सक्षम के साथ एक वर्चुअल पते पर चलता है, EFI फ़ंक्शन को सीधे कॉल करना असंभव है (EFI फ़ंक्शन को कॉल करने के लिए पेजिंग को अक्षम करने की आवश्यकता है, पेजिंग बंद होने पर वर्चुअल पते पर लौटना अच्छा नहीं होता)।BlImgLoadPEImageEx या BlImgLoadPEImageFromSourceBuffer को कॉल करना होगा ताकि एक 1:1 भौतिक पता-वर्चुअल पता मैपिंग पर एक अतिरिक्त पेलोड लोड किया जा सके।
BlImgAllocateImageBuffer को कॉल कर सकता है ताकि 1:1 भौतिक पता-वर्चुअल पता मैपिंग पर मेमोरी आवंटित हो; फिर स्वयं एक पेलोड लोड कर सकता है (या वहाँ स्वयं को रीमैप कर सकता है)।bootmgfw और TH1 RTM के hvloader का उपयोग करके AMD64 पर इस समस्या का शोषण करता है।
hvloader के एक फ़ंक्शन का उपयोग करके स्क्रीन पर एक संदेश प्रिंट करता है और फिर अनंत लूप करता है।bootmgr और TH1 RTM के hvloader का उपयोग करके AMD64 पर इस समस्या का शोषण करता है।इस समस्या का उपयोग BitLocker कुंजियों को डंप करने के लिए किया जा सकता है (जहाँ अखंडता सत्यापन के लिए सिक्योर बूट का उपयोग किया जाता है)।
इस समस्या के लिए फिक्स ने एक और समस्या को भी ठीक किया जिसका कोई CVE नहीं है।
bootmgr मेमोरी में पहले से मौजूद किसी भी BitLocker कीटेबल को अनदेखा करता है और एक नया आवंटित करता है, पुराने को मिटाए बिना।
bootmgr से RS2+ bootmgr लोड कर सकता है (एक मनमाना osdevice निर्दिष्ट करके जहाँ अखंडता सत्यापन के लिए सिक्योर बूट का उपयोग किया जाता है), WinPE में बूट कर सकता है, एक ज्ञात असुरक्षित ड्राइवर लोड कर सकता है, और इसका उपयोग भौतिक मेमोरी में मौजूदा BitLocker कीटेबल को खोजने और डंप करने के लिए कर सकता है।अभी तक किसी भी ज्ञात असुरक्षित बूट अनुप्रयोग को रद्द नहीं किया गया है।
bootmgr अपने स्वयं के हस्ताक्षर की जाँच करता है।एक अपूर्ण रद्दीकरण हुआ, और एक और CVE (CVE-2023-24932) आया। अभी भी असुरक्षित bootmgfw हैं जिन्हें रद्द नहीं किया गया, साथ ही अतिरिक्त पैच केवल उस मामले को ठीक करते हैं जहाँ bootmgr bootmgr लोड करता है। MS को कार्रवाई करने के लिए केवल एक पेस्ट किए गए बूटकिट की आवश्यकता थी ;)
यदि आप पर्याप्त रचनात्मक हैं तो आपको 2000 से अधिक bootmgfw फ़ाइलों के रद्दीकरण को बायपास करने का एक तरीका मिल जाएगा ;)
bootmgr संस्करण 19041.1081 और TH1 RTM के hvloader का उपयोग करके AMD64 पर इस समस्या का शोषण करता है।