शैडोकॉलस्टैक

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

aarch64 पर, इंस्ट्रूमेंटेशन शैडोकॉलस्टैक को संदर्भित करने के लिए x18 रजिस्टर का उपयोग करता है, जिसका अर्थ है कि शैडोकॉलस्टैक के संदर्भों को मेमोरी में संग्रहीत करने की आवश्यकता नहीं है। इससे रनटाइम लागू करना संभव हो जाता है जो शैडोकॉलस्टैक के पते को उन हमलावरों के सामने उजागर करने से बचाता है जो मनमानी मेमोरी पढ़ सकते हैं।

कार्यान्वयन

एंड्रॉइड कर्नेल और यूजरस्पेस दोनों के लिए शैडोकॉलस्टैक का समर्थन करता है।

कर्नेल के लिए SCS सक्षम करना

कर्नेल के लिए शैडोकॉलस्टैक को सक्षम करने के लिए, कर्नेल कॉन्फ़िगरेशन फ़ाइल में निम्न पंक्ति जोड़ें:

CONFIG_SHADOW_CALL_STACK=y

उपयोक्ता स्थान में एससीएस को सक्षम करना

यूजरस्पेस घटकों में शैडोकॉलस्टैक को सक्षम करने के लिए, घटक की ब्लूप्रिंट फ़ाइल में निम्नलिखित पंक्तियाँ जोड़ें:

sanitize: {
  scs: true
}

एससीएस मानता है कि x18 रजिस्टर शैडोकॉलस्टैक के पते को संग्रहीत करने के लिए आरक्षित है, और इसका उपयोग किसी अन्य उद्देश्य के लिए नहीं किया जाता है। जबकि सभी सिस्टम लाइब्रेरीज़ को x18 रजिस्टर को आरक्षित करने के लिए संकलित किया गया है, यह संभावित रूप से समस्याग्रस्त है यदि एससीएस उन यूजरस्पेस घटकों के लिए सक्षम है जो इन-प्रोसेस लीगेसी कोड के साथ इंटरऑपरेट करते हैं (उदाहरण के लिए, लाइब्रेरीज़ जिन्हें तृतीय-पक्ष एप्लिकेशन द्वारा लोड किया जा सकता है), जो अवरुद्ध हो सकता है x18 रजिस्टर. इस प्रकार, हम केवल स्व-निहित घटकों में एससीएस को सक्षम करने की अनुशंसा करते हैं जिन्हें लीगेसी बायनेरिज़ में लोड नहीं किया जाएगा।

मान्यकरण

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