Libc Protections
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Malloc मेमोरी को 8-बाइट (32-बिट) या 16-बाइट (64-बिट) समूहों में आवंटित करता है। इसका मतलब है कि 32-बिट सिस्टम में चंक्स का अंत 0x8 के साथ संरेखित होना चाहिए, और 64-बिट सिस्टम में 0x0 के साथ। सुरक्षा सुविधा यह जांचती है कि प्रत्येक चंक इन विशिष्ट स्थानों पर सही ढंग से संरेखित है या नहीं, इससे पहले कि बिन से एक पॉइंटर का उपयोग किया जाए।
64-बिट सिस्टम में चंक संरेखण का प्रवर्तन Malloc की सुरक्षा को केवल 16 पते में से 1 पर नकली चंक्स के स्थान को सीमित करके महत्वपूर्ण रूप से बढ़ाता है। यह शोषण प्रयासों को जटिल बनाता है, विशेष रूप से उन परिदृश्यों में जहां उपयोगकर्ता के पास इनपुट मानों पर सीमित नियंत्रण होता है, जिससे हमलों को अधिक जटिल और सफलतापूर्वक निष्पादित करना कठिन हो जाता है।
Fastbin Attack on __malloc_hook
Malloc में नए संरेखण नियम भी __malloc_hook
से संबंधित एक क्लासिक हमले को विफल करते हैं। पहले, हमलावर चंक के आकार को इस फ़ंक्शन पॉइंटर को ओवरराइट करने के लिए हेरफेर कर सकते थे और कोड निष्पादन प्राप्त कर सकते थे। अब, सख्त संरेखण आवश्यकता सुनिश्चित करती है कि ऐसी हेरफेर अब संभव नहीं है, एक सामान्य शोषण मार्ग को बंद कर देती है और समग्र सुरक्षा को बढ़ाती है।
Pointer Mangling एक सुरक्षा संवर्धन है जिसका उपयोग फास्टबिन और टकैश एफडी पॉइंटर्स को मेमोरी प्रबंधन संचालन में सुरक्षित रखने के लिए किया जाता है। यह तकनीक कुछ प्रकार की मेमोरी शोषण रणनीतियों को रोकने में मदद करती है, विशेष रूप से उन जो लीक की गई मेमोरी जानकारी की आवश्यकता नहीं होती या जो ज्ञात स्थानों के सापेक्ष सीधे मेमोरी स्थानों में हेरफेर करती हैं (सापेक्ष ओवरराइट्स)।
इस तकनीक का मूल एक अस्पष्टता सूत्र है:
New_Ptr = (L >> 12) XOR P
L पॉइंटर का स्टोरेज स्थान है।
P वास्तविक फास्टबिन/टकैश एफडी पॉइंटर है।
स्टोरेज स्थान (L) के बिटवाइज शिफ्ट को 12 बिट्स दाईं ओर XOR ऑपरेशन से पहले करना महत्वपूर्ण है। यह हेरफेर मेमोरी पते के सबसे कम महत्वपूर्ण 12 बिट्स की पूर्वानुमानित प्रकृति में अंतर्निहित एक भेद्यता को संबोधित करता है, जो आमतौर पर सिस्टम आर्किटेक्चर की सीमाओं के कारण पूर्वानुमानित होते हैं। बिट्स को शिफ्ट करके, पूर्वानुमानित भाग समीकरण से बाहर हो जाता है, नए, मंगले हुए पॉइंटर की यादृता को बढ़ाता है और इस प्रकार इन बिट्स की पूर्वानुमानिता पर निर्भर करने वाले शोषणों के खिलाफ सुरक्षा करता है।
यह मंगला हुआ पॉइंटर एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR) द्वारा प्रदान की गई मौजूदा यादृता का लाभ उठाता है, जो कार्यक्रमों द्वारा उपयोग किए जाने वाले पते को यादृता करता है ताकि हमलावरों के लिए एक प्रक्रिया के मेमोरी लेआउट की भविष्यवाणी करना कठिन हो जाए।
Demangling पॉइंटर को मूल पते को पुनः प्राप्त करने के लिए उसी XOR ऑपरेशन का उपयोग करना शामिल है। यहाँ, मंगला हुआ पॉइंटर सूत्र में P के रूप में माना जाता है, और जब इसे अपरिवर्तित स्टोरेज स्थान (L) के साथ XOR किया जाता है, तो यह मूल पॉइंटर को प्रकट करता है। मंगलीकरण और डेमंगलीकरण में यह सममिति सुनिश्चित करती है कि सिस्टम बिना महत्वपूर्ण ओवरहेड के प्रभावी ढंग से पॉइंटर्स को एन्कोड और डिकोड कर सके, जबकि मेमोरी पॉइंटर्स में हेरफेर करने वाले हमलों के खिलाफ सुरक्षा को काफी बढ़ा सके।
Pointer mangling का उद्देश्य हीप में आंशिक और पूर्ण पॉइंटर ओवरराइट्स को रोकना है, जो सुरक्षा में एक महत्वपूर्ण संवर्धन है। यह सुविधा कई तरीकों से शोषण तकनीकों को प्रभावित करती है:
Bye Byte सापेक्ष ओवरराइट्स की रोकथाम: पहले, हमलावर एक पॉइंटर के एक भाग को बदल सकते थे ताकि हीप चंक्स को विभिन्न स्थानों पर पुनर्निर्देशित किया जा सके बिना सटीक पते को जाने, यह तकनीक लीकलेस हाउस ऑफ रोमन शोषण में स्पष्ट है। पॉइंटर मंग्लिंग के साथ, ऐसी सापेक्ष ओवरराइट्स बिना हीप लीक के अब बलात्कारी बल की आवश्यकता होती है, जिससे उनकी सफलता की संभावना में भारी कमी आती है।
Tcache Bin/Fastbin हमलों की बढ़ती कठिनाई: सामान्य हमले जो फ़ंक्शन पॉइंटर्स (जैसे __malloc_hook
) को ओवरराइट करते हैं, फास्टबिन या टकैश प्रविष्टियों में हेरफेर करके बाधित होते हैं। उदाहरण के लिए, एक हमला एक LibC पते को लीक करने, एक चंक को टकैश बिन में मुक्त करने, और फिर एफडी पॉइंटर को ओवरराइट करके इसे __malloc_hook
पर पुनर्निर्देशित करने के लिए हो सकता है ताकि मनमाने कोड निष्पादन किया जा सके। पॉइंटर मंग्लिंग के साथ, इन पॉइंटर्स को सही ढंग से मंग्लित किया जाना चाहिए, सटीक हेरफेर के लिए हीप लीक की आवश्यकता होती है, जिससे शोषण की बाधा बढ़ जाती है।
गैर-हीप स्थानों में हीप लीक की आवश्यकता: गैर-हीप क्षेत्रों (जैसे स्टैक, .bss अनुभाग, या PLT/GOT) में एक नकली चंक बनाना अब भी हीप लीक की आवश्यकता होती है क्योंकि पॉइंटर मंग्लिंग की आवश्यकता होती है। यह इन क्षेत्रों के शोषण की जटिलता को बढ़ाता है, LibC पते में हेरफेर करने की आवश्यकता के समान।
हीप पते लीक करना अधिक चुनौतीपूर्ण हो जाता है: पॉइंटर मंग्लिंग फास्टबिन और टकैश बिन में एफडी पॉइंटर्स के उपयोगिता को हीप पते लीक के स्रोत के रूप में सीमित करता है। हालाँकि, असंरचित, छोटे, और बड़े बिन में पॉइंटर्स बिना मंग्लित रहते हैं, इसलिए अभी भी पते लीक करने के लिए उपयोगी होते हैं। यह बदलाव हमलावरों को इन बिनों में शोषण योग्य जानकारी के लिए खोजने के लिए धकेलता है, हालाँकि कुछ तकनीकें अभी भी लीक से पहले पॉइंटर्स को डेमंग्लित करने की अनुमति दे सकती हैं, हालाँकि सीमाओं के साथ।
For a better explanation of the process check the original post from here.
मंगलन और डेमंग्लिंग पॉइंटर्स के लिए उपयोग किया जाने वाला सूत्र है:
New_Ptr = (L >> 12) XOR P
जहाँ L स्टोरेज स्थान है और P एफडी पॉइंटर है। जब L को 12 बिट्स दाईं ओर शिफ्ट किया जाता है, तो यह P के सबसे महत्वपूर्ण बिट्स को उजागर करता है, XOR की प्रकृति के कारण, जो तब 0 आउटपुट करता है जब बिट्स को अपने आप XOR किया जाता है।
Algorithm में मुख्य चरण:
सबसे महत्वपूर्ण बिट्स का प्रारंभिक लीक: शिफ्ट किए गए L को P के साथ XOR करके, आप प्रभावी रूप से P के शीर्ष 12 बिट्स प्राप्त करते हैं क्योंकि L का शिफ्ट किया गया भाग शून्य होगा, जिससे P के संबंधित बिट्स अपरिवर्तित रहेंगे।
पॉइंटर बिट्स की पुनर्प्राप्ति: चूंकि XOR उलटा होता है, परिणाम और एक ऑपरेटर को जानने से आपको दूसरे ऑपरेटर की गणना करने की अनुमति मिलती है। इस गुण का उपयोग मंगले हुए पॉइंटर के भागों के साथ ज्ञात बिट्स के सेट को लगातार XOR करके P के लिए बिट्स के पूरे सेट को निकालने के लिए किया जाता है।
आवर्ती डेमंग्लिंग: यह प्रक्रिया दोहराई जाती है, प्रत्येक बार पिछले चरण से P के नए खोजे गए बिट्स का उपयोग करके मंगले हुए पॉइंटर के अगले खंड को डिकोड करने के लिए, जब तक सभी बिट्स पुनर्प्राप्त नहीं हो जाते।
निर्धारणात्मक बिट्स को संभालना: L के अंतिम 12 बिट्स शिफ्ट के कारण खो जाते हैं, लेकिन वे निर्धारणात्मक होते हैं और प्रक्रिया के बाद पुनर्निर्माण किया जा सकता है।
आप इस एल्गोरिदम का कार्यान्वयन यहाँ पा सकते हैं: https://github.com/mdulin2/mangle
Pointer guard एक शोषण शमन तकनीक है जिसका उपयोग glibc में संग्रहीत फ़ंक्शन पॉइंटर्स की सुरक्षा के लिए किया जाता है, विशेष रूप से उन फ़ंक्शन पॉइंटर्स की जो atexit()
जैसे पुस्तकालय कॉल द्वारा पंजीकृत होते हैं। यह सुरक्षा पॉइंटर्स को एक गुप्त के साथ XOR करके और फिर बिटवाइज रोटेशन लागू करके स्क्रैम्बल करने में शामिल होती है। यह तंत्र हमलावरों को फ़ंक्शन पॉइंटर्स को ओवरराइट करके नियंत्रण प्रवाह को हाईजैक करने से रोकने का लक्ष्य रखता है।
Pointer Guard ऑपरेशनों को समझना: पॉइंटर्स का स्क्रैम्बलिंग (मंग्लिंग) PTR_MANGLE
मैक्रो का उपयोग करके किया जाता है जो पॉइंटर को 64-बिट गुप्त के साथ XOR करता है और फिर 0x11 बिट्स की बाईं ओर घुमाता है। मूल पॉइंटर को पुनः प्राप्त करने के लिए उलटा ऑपरेशन PTR_DEMANGLE
द्वारा संभाला जाता है।
हमला रणनीति: यह हमला एक ज्ञात-प्लेनटेक्स्ट दृष्टिकोण पर आधारित है, जहाँ हमलावर को मंगले हुए पॉइंटर के मूल और मंगले हुए दोनों संस्करणों को जानने की आवश्यकता होती है ताकि मंग्लिंग के लिए उपयोग किए गए गुप्त को निकाल सके।
ज्ञात प्लेनटेक्स्ट का शोषण:
स्थिर फ़ंक्शन पॉइंटर्स की पहचान करना: glibc स्रोत कोड या प्रारंभिक फ़ंक्शन पॉइंटर तालिकाओं (जैसे __libc_pthread_functions
) की जांच करके, एक हमलावर पूर्वानुमानित फ़ंक्शन पॉइंटर्स पा सकता है।
गुप्त की गणना करना: एक ज्ञात फ़ंक्शन पॉइंटर जैसे __pthread_attr_destroy
और फ़ंक्शन पॉइंटर तालिका से इसके मंगले हुए संस्करण का उपयोग करके, गुप्त को मंगले हुए पॉइंटर को उलटा घुमाकर (दाईं ओर घुमाना) और फिर फ़ंक्शन के पते के साथ XOR करके गणना की जा सकती है।
वैकल्पिक प्लेनटेक्स्ट: हमलावर ज्ञात मानों जैसे 0 या -1 के साथ पॉइंटर्स को मंग्लित करने का प्रयोग कर सकता है यह देखने के लिए कि क्या ये मेमोरी में पहचानने योग्य पैटर्न उत्पन्न करते हैं, संभावित रूप से जब ये पैटर्न मेमोरी डंप में पाए जाते हैं तो गुप्त को प्रकट करते हैं।
व्यावहारिक अनुप्रयोग: गुप्त की गणना करने के बाद, एक हमलावर नियंत्रित तरीके से पॉइंटर्स में हेरफेर कर सकता है, मूल रूप से एक मल्टीथ्रेडेड एप्लिकेशन में Pointer Guard सुरक्षा को बायपास कर सकता है, जिसमें libc बेस पते का ज्ञान और मनमाने मेमोरी स्थानों को पढ़ने की क्षमता होती है।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)