Libc Protections

जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

चंक संरेखण प्रवर्तन

मैलोक मेमोरी को 8-बाइट (32-बिट) या 16-बाइट (64-बिट) समूहों में आवंटित करता है। इसका मतलब है कि 32-बिट सिस्टम में चंक का अंत 0x8 के साथ संरेखित होना चाहिए, और 64-बिट सिस्टम में 0x0 के साथ। सुरक्षा सुविधा यह जांचती है कि प्रत्येक चंक बिन से एक पॉइंटर का उपयोग करने से पहले इन विशेष स्थानों पर सही रूप से संरेखित होता है

सुरक्षा लाभ

64-बिट सिस्टम में चंक संरेखण का प्रवर्तन Malloc की सुरक्षा को बढ़ाता है जिससे नकली चंक को केवल 16 पते में से केवल 1 पते पर सीमित किया जाता है। यह उत्पीड़न प्रयासों को जटिल बनाता है, विशेष रूप से उन परिस्थितियों में जहां उपयोक्ता को इनपुट मानों पर प्रतिबंध है, हमलों को अधिक जटिल और सफलतापूर्वक क्रियान्वित करना कठिन बनाता है।

  • __malloc_hook पर फास्टबिन हमला

Malloc में नए संरेखण नियम भी __malloc_hook से संबंधित एक क्लासिक हमले को रोकते हैं। पहले हमलवार चंक के आकार को इस फ़ंक्शन पॉइंटर को अधिलेखित करने और कोड क्रियान्वित करने की अनुमति देते थे। अब, सख्त संरेखण आवश्यकता सुनिश्चित करती है कि ऐसी मानिपुलेशन अब संभव नहीं है, एक सामान्य उत्पीड़न मार्ग को बंद करती है और समग्र सुरक्षा को बढ़ाती है।

फास्टबिन्स और टीकैश में पॉइंटर मैंगलिंग

पॉइंटर मैंगलिंग एक सुरक्षा वृद्धि है जो मेमोरी प्रबंधन कार्यों में फास्टबिन और टीकैश Fd पॉइंटर की सुरक्षा करने के लिए उपयोग की जाती है। यह तकनीक विशेष प्रकार के मेमोरी उत्पीड़न युक्तियों से बचाने में मदद करती है, विशेष रूप से उन युक्तियों को जो लीक की गई मेमोरी सूचना की आवश्यकता नहीं है या जो सीधे ज्ञात स्थानों के साथ मेमोरी स्थानों को संशोधित करती हैं (सापेक्षिक ओवरराइट्स).

इस तकनीक का मूल है एक अस्पष्टता सूत्र:

न्यू_पीटीआर = (एल >> 12) XOR पी

  • एल पॉइंटर का स्टोरेज स्थान है।

  • पी वास्तविक फास्टबिन/टीकैश Fd पॉइंटर है।

यहाँ परिवर्तन का बिटवाइज शिफ्ट (L) 12 बिट दाएं द्वारा पीछे करने का कारण महत्वपूर्ण है। यह मानिपुरण उस निश्चितता में से एक भेद्यता पता लगाता है जो मेमोरी पतों के सबसे अधिक महत्वपूर्ण 12 बिट में होती है, जो सामान्यत: प्रणाली की सीमाओं के कारण पूर्वानुमाननीय होती है। बिट्स को शिफ्ट करके, पूर्वानुमाननीय भाग को समीकरण से बाहर ले जाता है, नए, मैंगल पॉइंटर की यादृच्छिकता को बढ़ाता है और इसके माध्यम से उस निश्चितता के बिट्स के खिलाफ सुरक्षा सुनिश्चित करता है जिस पर ये युक्तियाँ निर्भर करती हैं।

यह मैंगल पॉइंटर पता अंतरिक्ष लेआउट रैंडमाइजेशन (ASLR) द्वारा प्रदान की गई मौजूदा यादृच्छिकता का उपयोग करता है, जो कार्यों द्वारा उपयोग किए जाने वाले पतों को अनुमानित बनाने के लिए कठिन बनाता है ताकि हमलवारों को प्रक्रिया की मेमोरी खाका पूर्वानुमानित करने में कठिनाई हो।

पॉइंटर डीमैंगलिंग मूल पता प्राप्त करने के लिए इसी XOR ऑपरेशन का उपयोग करता है। यहाँ, मैंगल पॉइंटर को P के रूप में विचार किया जाता है, और जब यह बिना परिवर्तन के स्टोरेज स्थान (L) के साथ XOR किया जाता है, तो मूल पॉइंटर प्रकट होता है। इस मैंगलिंग और डीमैंगलिंग में सममिति सुनिश्चित करती है कि प्रणाली मेमोरी पॉइंटर को कोडिंग और डीकोडिंग कर सकती है बिना महत्वपूर्ण ओवरहेड के, जबकि हमलों के खिलाफ सुरक्षा को बहुत अधिक बढ़ाती है जो मेमोरी पॉइंटर को संशोधित करते हैं।

सुरक्षा लाभ

पॉइंटर मैंगलिंग का उद्देश्य है हीप में भागीदारी और पूर्ण पॉइंटर ओवरराइट्स को रोकना, सुरक्षा में एक महत्वपूर्ण वृद्धि। यह सुविधा विभिन्न तरीकों में उपयोग की जाने वाली हमला तकनिकाओं पर प्रभाव डालती है:

  1. बाईट बाईट सापेक्षिक ओवरराइट्स की रोकथाम: पहले हमलवार बिना सटीक पतों को जानते हुए हीप चंक को विभिन्न स्थानों पर अनुप्रेषित करने के लिए एक भाग को बदल सकते थे, जैसा कि लीकलेस हाउस ऑफ रोमन हमले में स्पष्ट है। पॉइंटर मैंगलिंग के साथ, ऐसे सापेक्षिक ओवरराइट्स बिना हीप लीक के अब ब्रूट फोर्सिंग की आवश्यकता है, उनकी सफलता की संभावना को बहुत कम कर देती है।

  2. टीकैश बिन/फास्टबिन हमलों की कठिनाई में वृद्धि: फास्टबिन या टीकैश प्रविष्टियों को मानिपुलेट करके फ़ंक्शन पॉइंटर्स (जैसे __malloc_hook)

पॉइंटर गार्ड

पॉइंटर गार्ड एक एक्सप्लॉइट मिटिगेशन तकनीक है जो glibc में उपयोग की जाती है ताकि स्टोर किए गए फ़ंक्शन पॉइंटर्स को सुरक्षित रखा जा सके, खासकर उन पॉइंटर्स को जो लाइब्रेरी कॉल्स जैसे atexit() द्वारा पंजीकृत किए गए होते हैं। यह सुरक्षा पॉइंटर्स को एक गुप्त सीक्रेट के साथ XOR करके उन्हें उलटा देने और बिटवाइज़ रोटेशन लागू करके करती है। यह तंत्र हमलावरों को फ़ंक्शन पॉइंटर्स को ओवरराइट करके नियंत्रण फ्लो को हाइजैक करने से रोकने का उद्देश्य रखता है।

लीक के साथ पॉइंटर गार्ड को उलटना

  1. पॉइंटर गार्ड ऑपरेशन की समझ: पॉइंटर्स का मिथान (मैंग्लिंग) PTR_MANGLE मैक्रो का उपयोग करके किया जाता है जो पॉइंटर को एक 64-बिट गुप्त से XOR करता है और फिर 0x11 बिट का बाएं घूमाना करता है। मूल पॉइंटर को पुनर्प्राप्त करने के लिए उलटी ऑपरेशन PTR_DEMANGLE द्वारा संभाला जाता है।

  2. हमला रणनीति: हमला एक जाना-माना प्लेनटेक्स्ट दृष्टिकोण पर आधारित है, जहां हमलावर को मैंगलिंग के लिए उपयोग किए गए पॉइंटर के मूल और मैंगल वर्शन दोनों को जानने की आवश्यकता होती है ताकि मैंगलिंग के लिए उपयोग किए गए गुप्त को निर्धारित किया जा सके।

  3. ज्ञात प्लेनटेक्स्ट का शोध:

  • निश्चित फिक्स्ड फ़ंक्शन पॉइंटर्स की पहचान: glibc स्रोत कोड या प्रारंभिक फ़ंक्शन पॉइंटर तालिकाओं (जैसे __libc_pthread_functions) की जांच करके, एक हमलावर पूर्वानुमाननीय फ़ंक्शन पॉइंटर्स को खोज सकता है।

  • गुप्त की गणना: एक ज्ञात फ़ंक्शन पॉइंटर जैसे __pthread_attr_destroy और उसका मैंगल वर्शन का उपयोग करके, गुप्त को पुनर्प्राप्त करने के लिए मैंगल पॉइंटर को उलटा देने के बाद उसे फिर से घूमाना (दाएं घूमाना) और फिर फ़ंक्शन के पते के साथ XOR करके गणना की जा सकती है।

  1. वैकल्पिक प्लेनटेक्स्ट: हमलावर यह भी प्रयोग कर सकता है कि वह ज्ञात मानों के साथ पॉइंटर्स को मैंगल करे जैसे 0 या -1 ताकि देख सके कि क्या ये मेमोरी में पहचाने जाने वाले पैटर्न उत्पन्न करते हैं, जब ये पैटर्न मेमोरी डंप में पाए जाते हैं तो गुप्त को प्रकट कर सकते हैं।

  2. व्यावहारिक अनुप्रयोग: गुप्त की गणना के बाद, एक हमलावर नियंत्रित तरीके से पॉइंटर्स को संशोधित कर सकता है, मुख्य रूप से Pointer Guard सुरक्षा को छलकर सकता है एक मल्टीथ्रेडेड एप्लिकेशन में जानकारी के साथ libc बेस पते और विचारशील मेमोरी स्थानों को पढ़ने की क्षमता के साथ।

संदर्भ

Last updated