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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

कार्यान्वयन

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

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

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

CONFIG_SHADOW_CALL_STACK=y

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

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

sanitize: {
  scs: true
}

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

मान्यकरण

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