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

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

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

कार्यान्वयन

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

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

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

CONFIG_SHADOW_CALL_STACK=y

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

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

sanitize: {
  scs: true
}

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

मान्यकरण

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