Relro
Relro
RELRO का मतलब है Relocation Read-Only, और यह एक सुरक्षा सुविधा है जो बाइनरी में उपयोग की जाती है ताकि GOT (Global Offset Table) के ओवरराइट से जुड़े जोखिमों को कम किया जा सके। चलो साफ करते हैं इस अवधारणा को उसके दो विभिन्न प्रकारों में: Partial RELRO और Full RELRO।
Partial RELRO
Partial RELRO सुरक्षा को बढ़ाने के लिए एक सरल दृष्टिकोण अपनाता है जिससे बाइनरी के प्रदर्शन पर प्रभाव नहीं पड़ता। GOT को कारपोरेट करने और भ्रष्ट करने से रोकने के लिए GOT को कार्यक्रम की मेमोरी में चरणों के ऊपर स्थित करके, Partial RELRO बफर ओवरफ्लो को GOT तक पहुंचने और भ्रष्ट करने से रोकने का उद्देश्य रखता है।
यह यह नहीं रोकता कि GOT का दुरुपयोग किसी भी विचित्र लेखन संक्रमणों से हो।
Full RELRO
Full RELRO सुरक्षा को बढ़ाता है जब GOT और .fini_array खंड पूरी तरह से केवल पठनीय बना देता है। एक बाइनरी शुरू होते ही सभी फ़ंक्शन पतों को हल किया जाता है और GOT में लोड किया जाता है, फिर, GOT को पठनीय बनाया जाता है, जिससे किसी भी संवहनन को रनटाइम के दौरान संशोधित करने से पूरी तरह से रोका जाता है।
हालांकि, Full RELRO के साथ व्यापार और स्टार्टअप समय के मामले में है। क्योंकि यह GOT को पठनीय बनाने से पहले स्टार्टअप पर सभी गतिशील प्रतीकों को हल करने की आवश्यकता होती है, Full RELRO सक्षम बाइनरी में लंबे लोड समय का सामना कर सकती है। यह अतिरिक्त स्टार्टअप ओवरहेड है जिसकी वजह से Full RELRO सभी बाइनरी में डिफ़ॉल्ट रूप से सक्षम नहीं है।
एक बाइनरी में Full RELRO की सक्षमता देखना संभव है:
बायपास
यदि पूर्ण RELRO सक्षम है, तो उसे बायपास करने का एकमात्र तरीका यह है कि एक और तरीका खोजें जिसे आवश्यक नहीं है कि आपको अनियमित निष्पादन प्राप्त करने के लिए GOT तालिका में लिखने की आवश्यकता हो।
ध्यान दें कि LIBC का GOT आम तौर पर आंशिक RELRO होता है, इसलिए इसे एक अनियमित लेखन के साथ संशोधित किया जा सकता है। अधिक जानकारी लिब्सी GOT प्रविष्टियों को लक्ष्य बनाना** में।**
Last updated