Double Free
Basic Information
यदि आप एक मेमोरी ब्लॉक को एक से अधिक बार मुक्त करते हैं, तो यह आवंटक के डेटा को गड़बड़ कर सकता है और हमलों के लिए दरवाजा खोल सकता है। यह कैसे होता है: जब आप एक मेमोरी ब्लॉक को मुक्त करते हैं, तो यह मुक्त टुकड़ों की सूची में वापस चला जाता है (जैसे "फास्ट बिन")। यदि आप एक ही ब्लॉक को लगातार दो बार मुक्त करते हैं, तो आवंटक इसे पहचानता है और एक त्रुटि फेंकता है। लेकिन यदि आप बीच में एक और टुकड़ा मुक्त करते हैं, तो डबल-फ्री जांच को बायपास किया जाता है, जिससे भ्रष्टाचार होता है।
अब, जब आप नई मेमोरी के लिए पूछते हैं ( malloc
का उपयोग करके), तो आवंटक आपको एक ब्लॉक दे सकता है जिसे दो बार मुक्त किया गया है। इससे दो अलग-अलग पॉइंटर्स एक ही मेमोरी स्थान की ओर इशारा कर सकते हैं। यदि एक हमलावर उन पॉइंटर्स में से एक को नियंत्रित करता है, तो वे उस मेमोरी की सामग्री को बदल सकते हैं, जो सुरक्षा समस्याओं का कारण बन सकता है या यहां तक कि उन्हें कोड निष्पादित करने की अनुमति भी दे सकता है।
Example:
इस उदाहरण में, कई मुक्त किए गए चंक्स (7) के साथ tcache भरने के बाद, कोड चंक h
को मुक्त करता है, फिर चंक i
को, और फिर h
को फिर से, जिससे एक डबल फ्री होती है (जिसे Fast Bin dup भी कहा जाता है)। यह पुनः आवंटन करते समय ओवरलैपिंग मेमोरी पते प्राप्त करने की संभावना खोलता है, जिसका अर्थ है कि दो या अधिक पॉइंटर्स एक ही मेमोरी स्थान की ओर इशारा कर सकते हैं। एक पॉइंटर के माध्यम से डेटा को हेरफेर करने से दूसरे पर प्रभाव पड़ सकता है, जिससे एक महत्वपूर्ण सुरक्षा जोखिम और शोषण की संभावना उत्पन्न होती है।
इसे निष्पादित करते समय, ध्यान दें कि i1
और i2
को वही पता मिला:
Examples
हम केवल Fast-Bin आकार के चंक्स आवंटित कर सकते हैं सिवाय आकार
0x70
के, जो सामान्य__malloc_hook
ओवरराइट को रोकता है।इसके बजाय, हम Fast Bin dup (1/2 मौका) के लिए लक्ष्य के रूप में
0x56
से शुरू होने वाले PIE पते का उपयोग करते हैं।एक स्थान जहां PIE पते संग्रहीत होते हैं वह है
main_arena
, जो Glibc के अंदर है और__malloc_hook
के पास है।हम
main_arena
के एक विशिष्ट ऑफसेट को लक्षित करते हैं ताकि वहां एक चंक आवंटित किया जा सके और__malloc_hook
तक पहुंचने के लिए चंक्स को आवंटित करना जारी रखें ताकि कोड निष्पादन प्राप्त किया जा सके।Tcache बिन और एक null-byte ओवरफ्लो का उपयोग करके, हम एक डबल-फ्री स्थिति प्राप्त कर सकते हैं:
हम आकार
0x110
के तीन चंक्स (A
,B
,C
) आवंटित करते हैंहम
B
को मुक्त करते हैंहम
A
को मुक्त करते हैं और null-byte ओवरफ्लो का उपयोग करने के लिए फिर से आवंटित करते हैंअब
B
का आकार क्षेत्र0x100
है,0x111
के बजाय, इसलिए हम इसे फिर से मुक्त कर सकते हैंहमारे पास आकार
0x110
का एक Tcache-bin और आकार0x100
का एक है जो उसी पते की ओर इशारा करता है। इसलिए हमारे पास एक डबल फ्री है।हम Tcache poisoning का उपयोग करके डबल फ्री का लाभ उठाते हैं।
References
Last updated