
UEFI shim loader
shim एक सरल EFI एप्लिकेशन है जो, चलने पर, किसी अन्य एप्लिकेशन को खोलने और निष्पादित करने का प्रयास करता है। यह प्रारंभ में मानक EFI LoadImage() और StartImage() कॉल के माध्यम से ऐसा करने का प्रयास करेगा। यदि ये विफल हो जाते हैं (क्योंकि Secure Boot सक्षम है और बाइनरी उपयुक्त कुंजी के साथ हस्ताक्षरित नहीं है, उदाहरण के लिए) तो यह बाइनरी को अंतर्निहित प्रमाणपत्र के विरुद्ध सत्यापित करेगा। यदि यह सफल होता है और यदि बाइनरी या हस्ताक्षर कुंजी निषिद्ध नहीं है, तो shim बाइनरी को स्थानांतरित करके निष्पादित करेगा।
shim एक ऐसा प्रोटोकॉल भी स्थापित करेगा जो द्वितीय-चरण बूटलोडर को समान बाइनरी सत्यापन करने की अनुमति देता है। इस प्रोटोकॉल में shim.h हेडर फ़ाइल में वर्णित GUID है और यह एक एकल प्रवेश बिंदु प्रदान करता है। 64-बिट सिस्टम पर यह प्रवेश बिंदु MSABI के बजाय SysV ABI के साथ कॉल किए जाने की अपेक्षा करता है, इसलिए इसके कॉल को रैप नहीं किया जाना चाहिए।
संस्करण 16.1 से, shim सिस्टम टेबल को ओवरराइड करता है और LoadImage()/StartImage()/UnloadImage()/Exit() फ़ंक्शन का अपना संस्करण स्थापित करता है, ताकि द्वितीय चरण उन्हें सिस्टम टेबल से सीधे कॉल कर सकें, और यह काम करेगा चाहे shim प्रथम चरण हो या नहीं, बिना द्वितीय चरणों में shim-विशिष्ट कोड की आवश्यकता के।
जब यह प्रोटोकॉल स्थापित होता है, तो हस्ताक्षरित UKI यूनिफाइड कर्नेल इमेज लोड किए जा सकते हैं, भले ही नेस्टेड कर्नेल हस्ताक्षरित न हो, क्योंकि UKI लोड और सत्यापित होने के बाद shim UKI में निहित सभी अनुभागों की एक आंतरिक अनुमति-सूची बनाता है। जब ऐसे किसी अनुभाग से एक इमेज लोड की जाती है, तो उसे निषेध-सूचियों (लेखन के समय DBX/MOKX/SBAT) के विरुद्ध सत्यापित किया जाता है, लेकिन उसे अनुमति-सूचियों (DB/MOK हैश/हस्ताक्षर) के विरुद्ध जाँचा नहीं जाता, क्योंकि बाहरी इमेज पहले ही सत्यापित हो चुकी होती है और आंतरिक इमेज इस प्रकार उन हस्ताक्षरों या हैशों द्वारा कवर होती है। इसके अलावा, दोहरे मापन से बचने के लिए आंतरिक इमेज को TPM में मापा नहीं जाता है।
TPM चिप सक्षम और सिस्टम फर्मवेयर द्वारा समर्थित सिस्टम पर, shim अपने द्वारा लोड किए जा रहे लक्ष्यों के डाइजेस्ट के साथ विभिन्न PCR को विस्तारित करेगा। पूरी सूची README.tpm फ़ाइल में है।
shim का उपयोग करने के लिए, बस एक DER-एन्कोडेड सार्वजनिक प्रमाणपत्र को pub.cer जैसी फ़ाइल में रखें और make VENDOR_CERT_FILE=pub.cer के साथ बिल्ड करें।
कुछ बिल्ड विकल्प हैं, और बिल्ड को अनुकूलित करने के कुछ तरीके हैं, जिनका वर्णन BUILDING में किया गया है।
परीक्षण योजना देखें, और यदि कुछ भी विफल होता है तो एक टिकट दर्ज करें!
यदि डेवलपर्स से किसी सुरक्षा घटना या भेद्यता के संबंध में संपर्क करने की आवश्यकता हो, तो कृपया [email protected] पर मेल करें।