कर्नेल नियंत्रण प्रवाह अखंडता

नियंत्रण प्रवाह अखंडता (सीएफआई) एक सुरक्षा तंत्र है जो संकलित बाइनरी के मूल नियंत्रण प्रवाह ग्राफ में परिवर्तन की अनुमति नहीं देता है, जिससे ऐसे हमलों को निष्पादित करना काफी कठिन हो जाता है।

एंड्रॉइड 9 में, हमने एलएलवीएम के सीएफआई के कार्यान्वयन को अधिक घटकों और कर्नेल में भी सक्षम किया है। सिस्टम सीएफआई डिफ़ॉल्ट रूप से चालू है, लेकिन आपको कर्नेल सीएफआई को सक्षम करने की आवश्यकता है।

एलएलवीएम के सीएफआई को लिंक-टाइम ऑप्टिमाइज़ेशन (एलटीओ) के साथ संकलन की आवश्यकता है। एलटीओ लिंक-टाइम तक ऑब्जेक्ट फ़ाइलों के एलएलवीएम बिटकोड प्रतिनिधित्व को संरक्षित करता है, जो कंपाइलर को बेहतर कारण बताने की अनुमति देता है कि कौन से अनुकूलन किए जा सकते हैं। एलटीओ को सक्षम करने से अंतिम बाइनरी का आकार कम हो जाता है और प्रदर्शन में सुधार होता है, लेकिन संकलन समय बढ़ जाता है। एंड्रॉइड पर परीक्षण में, एलटीओ और सीएफआई के संयोजन से कोड आकार और प्रदर्शन पर नगण्य ओवरहेड होता है; कुछ मामलों में दोनों में सुधार हुआ।

सीएफआई के बारे में अधिक तकनीकी विवरण और अन्य फॉरवर्ड-कंट्रोल जांचों को कैसे प्रबंधित किया जाता है, इसके लिए एलएलवीएम डिज़ाइन दस्तावेज़ देखें।

कार्यान्वयन

केसीएफआई पैच सभी समर्थित एंड्रॉइड कर्नेल संस्करणों में हैं। CONFIG_CFI_CLANG विकल्प kCFI को सक्षम करता है और GKI में डिफ़ॉल्ट रूप से सेट होता है।

समस्या निवारण

सक्षम करने के बाद, उनके ड्राइवरों के साथ मौजूद किसी भी प्रकार की बेमेल त्रुटियों पर काम करें। एक असंगत फ़ंक्शन पॉइंटर ट्रिप सीएफआई के माध्यम से एक अप्रत्यक्ष फ़ंक्शन कॉल। जब सीएफआई विफलता का पता चलता है, तो कर्नेल एक चेतावनी प्रिंट करता है जिसमें कॉल किए गए फ़ंक्शन और विफलता का कारण बनने वाले स्टैकट्रेस दोनों शामिल होते हैं। यह सुनिश्चित करके इसे ठीक करें कि फ़ंक्शन पॉइंटर्स का प्रकार हमेशा उसी प्रकार का हो जैसा कि कॉल किया गया है।

सीएफआई विफलताओं को डीबग करने में सहायता के लिए, CONFIG_CFI_PERMISSIVE सक्षम करें, जो कर्नेल घबराहट पैदा करने के बजाय एक चेतावनी प्रिंट करता है। उत्पादन में अनुमेय मोड का उपयोग नहीं किया जाना चाहिए।

मान्यकरण

वर्तमान में, सीएफआई के लिए विशेष रूप से कोई सीटीएस परीक्षण नहीं है। इसके बजाय, यह सुनिश्चित करें कि सीटीएस परीक्षण सीएफआई सक्षम होने के साथ या उसके बिना भी पास हो जाएं ताकि यह सत्यापित किया जा सके कि सीएफआई डिवाइस को प्रभावित नहीं कर रहा है।