ShadowCallStack (SCS) एक LLVM इंस्ट्रूमेंटेशन मोड है, जो किसी फ़ंक्शन के रिटर्न एड्रेस को एक अलग से आवंटित किए गए ShadowCallStack को फ़ंक्शन नॉनफ़्लॉप फ़ंक्शंस के शोर्ट प्रोलॉग में सहेज कर और फ़ंक्शन में ShadowCallStack से रिटर्न एड्रेस को लोड करके ओवरराइट (जैसे स्टैक बफर ओवरफ़्लो) से बचाता है। उपसंहार। वापसी पता भी Unwinders साथ संगतता के लिए नियमित रूप से ढेर पर संग्रहीत है, लेकिन अन्यथा अप्रयुक्त है। यह सुनिश्चित करता है कि नियमित स्टैक पर रिटर्न एड्रेस को संशोधित करने वाले हमलों का प्रोग्राम नियंत्रण प्रवाह पर कोई प्रभाव नहीं पड़ता है।
Anarch64 पर, इंस्ट्रूमेंटेशन ShadowCallStack को संदर्भित करने के लिए x18
रजिस्टर का उपयोग करता है, जिसका अर्थ है कि ShadowCallStack के संदर्भों को मेमोरी में संग्रहीत नहीं किया जाना है। यह रनटाइम को लागू करना संभव बनाता है जो हमलावरों को ShadowCallStack के पते को उजागर करने से बचता है जो मनमाने ढंग से मेमोरी पढ़ सकते हैं।
कार्यान्वयन
Android कर्नेल और यूजरस्पेस दोनों के लिए ShadowCallStack का समर्थन करता है।
कर्नेल के लिए SCS सक्षम करना
कर्नेल के लिए ShadowCallStack को सक्षम करने के लिए, कर्नेल कॉन्फ़िग फ़ाइल में निम्न पंक्ति जोड़ें:
CONFIG_SHADOW_CALL_STACK=y
उपयोगकर्ता स्थान में SCS को सक्षम करना
यूज़रस्पेस घटकों में ShadowCallStack सक्षम करने के लिए एक घटक के खाका फाइल करने के लिए निम्न पंक्तियां जोड़ें:
sanitize: { scs: true }
SCS मानता है कि Shadow18 के पते को संग्रहीत करने के लिए x18
रजिस्टर आरक्षित है, और इसका उपयोग किसी अन्य उद्देश्य के लिए नहीं किया जाता है। जबकि सभी सिस्टम पुस्तकालयों को x18
रजिस्टर आरक्षित करने के लिए संकलित किया जाता है, यह संभावित रूप से समस्याग्रस्त है यदि SCS उन उपयोगकर्ता घटकों के लिए सक्षम है जो प्रक्रिया विरासत कोड (उदाहरण के लिए, तृतीय-पक्ष अनुप्रयोगों द्वारा लोड की जा सकने वाली लाइब्रेरी) के साथ सक्षम है, जो क्लोब कर सकते हैं x18
रजिस्टर। इस प्रकार, हम केवल उन स्व-निहित घटकों में SCS को सक्षम करने की सलाह देते हैं जिन्हें विरासत बायनेरिज़ में लोड नहीं किया जाएगा।
मान्यकरण
विशेष रूप से एससीएस के लिए सीटीएस परीक्षा नहीं होती है। इसके बजाय, सुनिश्चित करें कि सीटीएस परीक्षण एससीएस के साथ और बिना पास के सत्यापित करने में सक्षम है कि एससीएस डिवाइस को प्रभावित नहीं कर रहा है।