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