Libc Protections
चंक संरेखण प्रवर्तन
Malloc मेमोरी को 8-बाइट (32-बिट) या 16-बाइट (64-बिट) समूहों में आवंटित करता है। इसका मतलब है कि 32-बिट सिस्टम में चंक का अंत 0x8 के साथ संरेखित होना चाहिए, और 64-बिट सिस्टम में 0x0 के साथ। सुरक्षा सुविधा यह जांचती है कि प्रत्येक चंक विशेष स्थानों पर सही रूप से संरेखित है पहले बिन से एक पॉइंटर का उपयोग करने से पहले।
सुरक्षा लाभ
64-बिट सिस्टम में चंक संरेखण का प्रवर्तन Malloc की सुरक्षा को बड़ा देता है जिससे नकली चंक को केवल 16 पतों में से केवल 1 पते पर स्थानित करने की सीमा लगाता है। यह उत्पीड़न प्रयासों को जटिल बनाता है, विशेष रूप से उन परिस्थितियों में जहाँ उपयोक्ता को इनपुट मानों पर प्रतिबंध है, हमलों को अधिक जटिल और सफलतापूर्वक क्रियान्वित करना कठिन बनाता है।
__malloc_hook पर Fastbin हमला
Malloc में नए संरेखण नियम भी __malloc_hook
से संबंधित एक क्लासिक हमले को रोकते हैं। पहले हमलवार चंक के आकार को इस फ़ंक्शन पॉइंटर को अधिलेखित करने और कोड क्रियान्वयन प्राप्त करने के लिए हमला कर सकते थे। अब, सख्त संरेखण आवश्यकता सुनिश्चित करती है कि ऐसे हस्तक्षेप अब और संभव नहीं हैं, एक सामान्य उत्पीड़न मार्ग को बंद करते हैं और समग्र सुरक्षा को बढ़ाते हैं।
fastbins और tcache पर पॉइंटर मैंगलिंग
पॉइंटर मैंगलिंग एक सुरक्षा वृद्धि है जो मेमोरी प्रबंधन कार्यों में fastbin और tcache Fd पॉइंटरों को सुरक्षित रखने में मदद करती है। यह तकनीक कुछ प्रकार के मेमोरी उत्पीड़न युक्तियों को रोकने में मदद करती है, विशेष रूप से उन युक्तियों को जो लीक की गई मेमोरी सूचना की आवश्यकता नहीं है या जो सीधे ज्ञात स्थानों के साथ मेमोरी स्थानों को संशोधित करती हैं (सापेक्षिक अधिलेख).
इस तकनीक का मूल है एक अस्पष्टता सूत्र:
न्यू_पीटीआर = (एल >> 12) XOR पी
एल पॉइंटर का स्टोरेज स्थान है।
पी वास्तविक fastbin/tcache Fd पॉइंटर है।
यहाँ बिटवाइज डायानिकी का उपयोग करने का कारण है कि स्टोरेज स्थान (एल) के बारे में निश्चित बिटों की नियमित प्रकृति मेमोरी पतों की अनिश्चितता को बढ़ावा देने के लिए। बिटों को विचलित करने से, पूर्वानुमानित हिस्सा समीकरण से बाहर चला जाता है, नए, मैंगल पॉइंटर की अनिश्चितता को बढ़ाते हैं और इसके माध्यम से उस पर हमलों से सुरक्षा करते हैं।
यह मैंगल पॉइंटर पता अंतरिक्ष लेआउट रैंडमाइजेशन (ASLR) द्वारा प्रदान की गई मौजूदा अनियमितता का उपयोग करता है, जो कार्यों द्वारा उपयोग किए जाने वाले पतों को अनियमित बनाने के लिए कठिन बनाता है ताकि हमलवारों को प्रक्रिया की मेमोरी खाका पूर्वानुमानित करने में कठिनाई हो।
सुरक्षा लाभ
पॉइंटर मैंगलिंग का उद्देश्य है हीप प्रबंधन में आंशिक और पूर्ण पॉइंटर ओवरराइट्स को रोकना, सुरक्षा में एक महत्वपूर्ण वृद्धि। यह सुविधा कई तरीकों में हमला तकनीकों को प्रभावित करती है:
बायट बाइट सापेक्षिक ओवरराइट्स की रोकथाम: पहले हमलवार बिना किसी भी निश्चित पते को जाने बिना हीप चंक को विभिन्न स्थानों पर अनुप्रेषित करने के लिए आंशिक एक पॉइंटर का हिस्सा बदल सकते थे, जैसा कि लीकलेस हाउस ऑफ रोमन हमले में स्पष्ट है। पॉइंटर मैंगलिंग के साथ, ऐसे सापेक्षिक ओवरराइट्स बिना हीप लीक के अब ब्रूट फोर्सिंग की आवश्यकता है, उनकी सफलता की संभावना को बहुत कम कर देते हैं।
Tcache बिन/Fastbin हमलों की कठिनाई में वृद्धि: फ़ंक्शन पॉइंटर्स (जैसे
__malloc_hook
) को ओवरराइट करके सामान्य हमले अब अधिक कठिन हो जाते हैं। उदाहरण के लिए, एक हमला एक LibC पता लीक करने, एक चंक को tcache बिन में मुक्त करने और फिर Fd पॉइंटर को__malloc_hook
की ओर पुनर्निर्देशित करने के लिए हो सकता है। पॉइंटर मैंगलिंग के साथ, इन पॉइंटर्स को सही रूप से मैंगल किया जाना चाहिए, सटीक संशोधन के लिए हीप लीक की आवश्यकता है, इसलिए हमलवारी की बाधा को उच्च करते हैं।गैर-हीप स्थानों में फेक चंक बनाने के लिए हीप लीक की आवश्यकता: अब गैर-हीप क्षेत्रों में (जैसे स्टैक, .bss खंड, या PLT/GOT) में एक नकली चंक बनाने के लिए भी अब हीप लीक की आवश्यकता है क्योंकि पॉइंटर मैंगलिंग की आवश्यकता है। यह इन क्षेत्रों को उत्पादित करने की जटिलता बढ़ाता है, लिबसी पतों को संशोधित करने की आवश्यकता के समान।
हीप पतों का लीक करना और अधिक चुनौतीपूर्ण बनाना: पॉइंटर मैंगलिंग
पॉइंटर गार्ड
पॉइंटर गार्ड एक एक्सप्लॉइट मिटिगेशन तकनीक है जो glibc में उपयोग की जाती है ताकि स्टोर्ड फ़ंक्शन पॉइंटर्स को सुरक्षित रखा जा सके, खासकर उन पॉइंटर्स को जो atexit()
जैसे लाइब्रेरी कॉल्स द्वारा पंजीकृत किए गए होते हैं। यह सुरक्षा पॉइंटर्स को एक गुप्त स्टोर्ड से XOR करके और बिटवाइज़ रोटेशन लागू करके उलझाने का काम करती है जो धारिता डेटा में (fs:0x30
) स्टोर्ड होता है। यह तंत्र हमलावादियों को फ़ंक्शन पॉइंटर्स को अधिग्रहण करके नियंत्रण प्रवाह को हाइजैक करने से रोकने का उद्देश्य रखता है।
लीक के साथ पॉइंटर गार्ड को उलझाने का तरीका
पॉइंटर गार्ड ऑपरेशन की समझ: पॉइंटर्स का उलझाना (
mangling
)PTR_MANGLE
मैक्रो का उपयोग करके किया जाता है जो पॉइंटर को एक 64-बिट गुप्त से XOR करता है और फिर 0x11 बिट का बाएं रोटेशन करता है। मूल पॉइंटर को पुनर्प्राप्त करने के लिए उलझाने के लिए प्रतिक्रिया ऑपरेशनPTR_DEMANGLE
द्वारा संभाला जाता है।हमला रणनीति: हमला एक जाना-पहचाना टेक्निक पर आधारित है, जहां हमलावादी को पॉइंटर के मूल और उलझाए गए संस्करण दोनों को जानने की आवश्यकता होती है ताकि उलझाने के लिए उपयोग किए गए गुप्त को निर्धारित किया जा सके।
ज्ञात प्लेनटेक्स्ट का शोधन:
निश्चित फ़ंक्शन पॉइंटर्स की पहचान: glibc स्रोत कोड या प्रारंभिक फ़ंक्शन पॉइंटर तालिकाओं (जैसे
__libc_pthread_functions
) की जांच करके, एक हमलावादी पूर्वानुमाननीय फ़ंक्शन पॉइंटर्स को खोज सकता है।गुप्त की गणना: एक ज्ञात फ़ंक्शन पॉइंटर जैसे
__pthread_attr_destroy
और उसके मैंगल्ड संस्करण का उपयोग करके, गुप्त को पुनर्प्राप्त करने के लिए मैंगल्ड पॉइंटर को पुनर्प्राप्त करने के लिए उलटी रोटेशन (दाएं रोटेशन) करके और फिर फ़ंक्शन के पते के साथ XOR करके गणना की जा सकती है।
वैकल्पिक प्लेनटेक्स्ट्स: हमलावादी यह भी प्रयास कर सकता है कि ज्ञात मानों के साथ पॉइंटर्स को उलझाए गए रूपों को मेमोरी में पहचानने के लिए 0 या -1 जैसे ज्ञात मानों के साथ उलझाए गए रूपों को खोजने पर गुप्त को उजागर कर सकता है।
व्यावहारिक अनुप्रयोग: गुप्त की गणना करने के बाद, एक हमलावादी नियंत्रित तरीके से पॉइंटर्स को संचालित कर सकता है, मुख्य रूप से एक मल्टीथ्रेडेड एप्लिकेशन में पॉइंटर गार्ड सुरक्षा को छलकरने के लिए जानकारी के साथ libc बेस पते और विचारशील मेमोरी स्थानों को पढ़ने की क्षमता के साथ।
संदर्भ
Last updated