बफर ओवरफ्लो: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Anomaly in computer security and programming}} File:Buffer overflow basicexample.svg|thumb|एक सॉफ्टवेयर बफर ओवरफ्...")
 
m (Deepak moved page बफ़र अधिकता to बफर ओवरफ्लो without leaving a redirect)
 
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{short description|Anomaly in computer security and programming}}
{{short description|Anomaly in computer security and programming}}
[[File:Buffer overflow basicexample.svg|thumb|एक सॉफ्टवेयर बफर ओवरफ्लो का विजुअलाइजेशन। डेटा ए में लिखा गया है, लेकिन ए के भीतर फिट होने के लिए बहुत बड़ा है, इसलिए यह बी में बहता है।]][[सूचना सुरक्षा]] और [[[[कंप्यूटर प्रोग्राम]]िंग]] में, एक बफर ओवरफ्लो, या बफर ओवररन, सॉफ्टवेयर में एक विसंगति है जिससे एक कंप्यूटर प्रोग्राम, डेटा बफर में [[डेटा (कंप्यूटिंग)]] लिखते समय, बफर की सीमा को पार कर जाता है और आसन्न मुख्य मेमोरी स्थानों को अधिलेखित कर देता है।
[[File:Buffer overflow basicexample.svg|thumb|एक सॉफ्टवेयर बफ़र अधिकता का विजुअलाइजेशन। डेटा ए में लिखा गया है, लेकिन ए के भीतर फिट होने के लिए बहुत बड़ा है, इसलिए यह बी में बहता है।]]


बफ़र मेमोरी के क्षेत्र होते हैं जो डेटा को होल्ड करने के लिए अलग रखे जाते हैं, अक्सर इसे प्रोग्राम के एक सेक्शन से दूसरे सेक्शन में या प्रोग्राम के बीच ले जाते समय। बफ़र ओवरफ्लो अक्सर विकृत इनपुट द्वारा ट्रिगर किया जा सकता है; यदि कोई मानता है कि सभी इनपुट एक निश्चित आकार से छोटे होंगे और बफर उस आकार के लिए बनाया गया है, तो अधिक डेटा उत्पन्न करने वाला एक विषम लेनदेन इसे बफर के अंत में लिखने का कारण बन सकता है। यदि यह आसन्न डेटा या निष्पादन योग्य कोड को अधिलेखित कर देता है, तो इसका परिणाम अनिश्चित प्रोग्राम व्यवहार हो सकता है, जिसमें मेमोरी एक्सेस त्रुटियां, गलत परिणाम और [[क्रैश (कंप्यूटिंग)]] शामिल हैं।
[[सूचना सुरक्षा]] और प्रोग्रामिंग में, बफ़र अतिप्रवाह, या बफ़र ओवररन, विसंगति है जिसके द्वारा प्रोग्राम बफ़र में डेटा लिखते समय बफ़र की सीमा को अतिक्रमित कर देते हैं और आसन्न स्मृति स्थानों पर उपरिलेखन करते हैं।


बफर ओवरफ्लो के व्यवहार का शोषण करना एक प्रसिद्ध [[शोषण (सूचना सुरक्षा)]] है। कई प्रणालियों पर, किसी प्रोग्राम का मेमोरी लेआउट, या पूरी तरह से सिस्टम, अच्छी तरह से परिभाषित होता है। बफ़र ओवरफ़्लो उत्पन्न करने के लिए डिज़ाइन किए गए डेटा को भेजकर, [[निष्पादन (कंप्यूटिंग)]] को रोकने के लिए जाने जाने वाले क्षेत्रों में लिखना संभव है और इसे दुर्भावनापूर्ण कोड से प्रतिस्थापित करना, या प्रोग्राम की स्थिति से संबंधित डेटा को चुनिंदा रूप से अधिलेखित करना संभव है, इसलिए ऐसा व्यवहार करना जो अभीष्ट नहीं था मूल प्रोग्रामर द्वारा। बफ़र्स [[ऑपरेटिंग सिस्टम]] (OS) कोड में व्यापक हैं, इसलिए ऐसे हमले करना संभव है जो [[विशेषाधिकार वृद्धि]] करते हैं और कंप्यूटर के संसाधनों तक असीमित पहुंच प्राप्त करते हैं। 1988 में प्रसिद्ध [[मॉरिस कीड़ा]] ने इसे अपनी हमले की तकनीकों में से एक के रूप में इस्तेमाल किया।
बफ़र्स, डेटा को धारण करने के लिए स्मृति के भिन्न-भिन्न क्षेत्र होते हैं, अधिकांशतः इसे प्रोग्राम के एक भाग से दूसरे भाग में या प्रोग्रामों के बीच ले जाते समय बफ़र अधिकता अधिकांशतः खराब इनपुट द्वारा ट्रिगर किया जाता है; यदि कोई यह मानता है कि सभी इनपुट निश्चित आकार से छोटे होते है और बफ़र उस आकार के लिए बनाया जाता है तब असंगत लेनदेन, जो अधिक डेटा का उत्पादन करता है, बफ़र के अंत में इसे लिख जाता है। यदि यह संलग्न डेटा या निष्पादन योग्य कोड को अधिलेखित करता है, तो इसका गलत परिणाम और [[क्रैश]] सहित अनिश्चित प्रोग्राम व्यवहार में हो सकता हैं।  


आमतौर पर बफर ओवरफ्लो से जुड़ी [[प्रोग्रामिंग भाषा]] में C (प्रोग्रामिंग लैंग्वेज) और C ++ शामिल हैं, जो मेमोरी के किसी भी हिस्से में डेटा को एक्सेस करने या ओवरराइट करने के खिलाफ कोई बिल्ट-इन सुरक्षा प्रदान नहीं करते हैं और स्वचालित रूप से उस डेटा को एरे डेटा स्ट्रक्चर (बिल्ट-इन) में लिखे गए डेटा की जांच नहीं करते हैं। बफर प्रकार में) उस सरणी की सीमाओं के भीतर है। [[सीमा जांच]] बफर ओवरफ्लो को रोक सकती है, लेकिन इसके लिए अतिरिक्त कोड और प्रोसेसिंग समय की आवश्यकता होती है। आधुनिक ऑपरेटिंग सिस्टम दुर्भावनापूर्ण बफर ओवरफ्लो से निपटने के लिए विभिन्न तकनीकों का उपयोग करते हैं, विशेष रूप से [[पता स्थान लेआउट यादृच्छिकरण]] द्वारा, या जानबूझकर बफ़र्स के बीच जगह छोड़कर उन क्षेत्रों (कैनरी) में लिखने वाली क्रियाओं की तलाश करते हैं।
बफ़र अधिकता के व्यवहार का एक्सप्लॉइट प्रसिद्ध सुरक्षा [[शोषण|एक्सप्लॉइट]] होता है। कई प्रणालियों पर, प्रोग्राम की स्मृति लेआउट, या पूरे सिस्टम को अच्छे प्रकार से परिभाषित किया गया है। बफ़र अधिप्रवाह उत्पन्न करने के लिए अभिकल्पित डेटा को भेज कर, [[निष्पादन]] योग्य कोड धारण करने के लिए ज्ञात क्षेत्रों में लिखना और मैलिसियस कोड के साथ इसे प्रतिस्थापित करना संभव है या प्रोग्राम की स्थिति से संबंधित डेटा को चुनकर अधिलेखित कर देता है, इसलिए ऐसा व्यवहार उत्पन्न करता है जो मूल प्रोग्रामर द्वारा नहीं किया जाता है। [[ऑपरेटिंग सिस्टम]] (ओएस) कोड में बफ़र्स व्यापक हैं, इसलिए ऐसे अटैक करना संभव है जो [[विशेषाधिकार वृद्धि]] करते हैं और कंप्यूटर के संसाधनों की असीमित पहुंच बनाते हैं। 1988 में विख्यात [[मॉरिस वर्म]] ने इसे अपनी आक्रमण तकनीक में से बताया था। 
 
बफ़र अधिकता से जुड़ी [[प्रोग्रामिंग भाषाओं]] में C और C++ सम्मलित हैं, जो मेमोरी के किसी भी हिस्से में डेटा के अभिगम या ओवरराइटिंग के विरुद्ध कोई अंतर्निहित सुरक्षा प्रदान नहीं करती है और सारणी पर लिखे गए डेटा को स्वतः जाँच नहीं करती है (अंतर्निहित बफ़र प्रकार) सारणी की सीमाओं के भीतर होता है। परिबद्ध जांच बफ़र बहिर्वाह को रोक सकता है परंतु अतिरिक्त कोड एवं संसाधन को समय की आवश्यकता होती है। आधुनिक ऑपरेटिंग सिस्टम मैलिसियस बफ़र अधिकता का सामना करने के लिए, विशेष रूप से मेमोरी के [[लेआउट]] को [[यादृच्छिक]] रूप से, विभिन्न तकनीकों का उपयोग किया जाता है, या जानबूझकर बफ़र्स के बीच में स्थान छोड़ कर उन क्षेत्रों ("कनारी") में लिखने वाली क्रियाओं की खोज करता है।


== तकनीकी विवरण ==
== तकनीकी विवरण ==
एक बफ़र अतिप्रवाह तब होता है जब एक बफ़र को लिखा गया डेटा भी अपर्याप्त सीमा जाँच के कारण गंतव्य बफ़र से सटे मेमोरी पतों में डेटा मान को दूषित कर [[जानकारी]] है।{{Ref RFC|4949|notes=no|rp=41}} यह तब हो सकता है जब डेटा को एक बफ़र से दूसरे बफ़र में पहले जाँचे बिना कॉपी किया जाता है कि डेटा डेस्टिनेशन बफ़र के भीतर फिट बैठता है।
एक बफ़र अतिप्रवाह तब होता है जब बफ़र को लिखा गया डेटा भी अपर्याप्त सीमा जाँच के कारण गंतव्य बफ़र से सटे मेमोरी पतों में डेटा मान को दूषित कर [[जानकारी]] रखता है।{{Ref RFC|4949|notes=no|rp=41}} यह तब हो सकता है जब डेटा को एक बफ़र से दूसरे बफ़र में पहले जाँचे बिना कॉपी किया जाता है कि डेटा डेस्टिनेशन बफ़र के भीतर फिट बैठता है या नहीं।


=== उदाहरण ===
=== उदाहरण ===
{{further|topic=stack-based overflows|Stack buffer overflow}}
{{further|topic=स्टैक आधारित अधिकता|स्टैक बफर अधिकता}}
C (प्रोग्रामिंग लैंग्वेज) में व्यक्त किए गए निम्नलिखित उदाहरण में, एक प्रोग्राम में दो वेरिएबल्स होते हैं जो मेमोरी में आसन्न होते हैं: एक 8-बाइट-लंबा स्ट्रिंग बफर, A, और एक दो-बाइट [[endianness]] | बिग-एंडियन पूर्णांक, B।
 
<वाक्यविन्यास प्रकाश लैंग = सी>
चार ए [8] =;
अहस्ताक्षरित लघु बी = 1979;
</वाक्यविन्यास हाइलाइट>


प्रारंभ में, A में शून्य बाइट्स के अलावा कुछ नहीं होता है, और B में 1979 की संख्या होती है।
'''C''' (प्रोग्रामिंग लैंग्वेज) में निम्नलिखित उदाहरण व्यक्त है, जैसे प्रोग्राम में दो चर होते हैं जो स्मृति में आसन्न होते हैं: 8-बाइट-लंबा स्ट्रिंग बफ़र '''A''', और दो-बाइट बड़ा-एंडियन पूर्णांक, '''B'''।<syntaxhighlight lang="c">
char          A[8] = "";
unsigned short B    = 1979;
</syntaxhighlight>प्रारंभ में, '''A''' में शून्य बाइट्स के अतिरिक्त कुछ नहीं होता है, और '''B''' में 1979 की संख्या होती है।


{| class="wikitable" style="width:32em; text-align:center;"
{| class="wikitable" style="width:32em; text-align:center;"
! style="white-space:nowrap;" | variable name
! style="white-space:nowrap;" | चर नाम
! colspan=8 style="background:#ddf;" | A
! colspan=8 style="background:#ddf;" | A
! colspan=2 style="background:#fdd;" | B
! colspan=2 style="background:#fdd;" | B
|- style="background:#ddf;"
|- style="background:#ddf;"
! value
! मूल्य
| colspan=8 | [<nowiki/>[[null string]]<nowiki/>]
| colspan=8 | [<nowiki/>[[null string]]<nowiki/>]
| colspan=2 style="background:#fdd;" | 1979
| colspan=2 style="background:#fdd;" | 1979
|- style="background:#ddf;"
|- style="background:#ddf;"
! hex value
! हेक्स मान
| <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd>
| <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd> || <kbd>00</kbd>
| style="background:#fdd;" | <kbd>07</kbd> || style="background:#fdd;" | <kbd>BB</kbd>
| style="background:#fdd;" | <kbd>07</kbd> || style="background:#fdd;" | <kbd>BB</kbd>
|}
|}
अब, कार्यक्रम [[अशक्त-समाप्त स्ट्रिंग]] को संग्रहीत करने का प्रयास करता है {{code|"excessive"}} ए बफर में [[एएससीआईआई]] एन्कोडिंग के साथ।
अब, {{code|"excessive"}} '''A''' बफ़र में [[एएससीआईआई]] एन्कोडिंग के साथ प्रोग्राम [[अशक्त-समाप्त स्ट्रिंग]] को संग्रहीत करने का प्रयास करता है।<syntaxhighlight lang="c">
<वाक्यविन्यास प्रकाश लैंग = सी>
strcpy(A, "excessive");
strcpy (, अत्यधिक);
</syntaxhighlight>{{code|"excessive"}} 9 अक्षर लंबा है और नल टर्मिनेटर सहित 10 बाइट्स को एन्कोड करता है, लेकिन A केवल 8 बाइट्स ले सकता है। स्ट्रिंग की लंबाई की जांच करने में विफल होने पर, यह B के मान को भी अधिलेखित कर देता है:
</वाक्यविन्यास हाइलाइट>
{{code|"excessive"}} 9 अक्षर लंबा है और नल टर्मिनेटर सहित 10 बाइट्स को एन्कोड करता है, लेकिन A केवल 8 बाइट्स ले सकता है। स्ट्रिंग की लंबाई की जांच करने में विफल होने पर, यह B के मान को भी अधिलेखित कर देता है:


{| class="wikitable" style="width:32em; text-align:center;"
{| class="wikitable" style="width:32em; text-align:center;"
! style="white-space:nowrap;" | variable name
! style="white-space:nowrap;" | चर नाम
! colspan=8 style="background:#ddf;" | A
! colspan=8 style="background:#ddf;" | A
! colspan=2 style="background:#fdd;" | B
! colspan=2 style="background:#fdd;" | B
|- style="background:#ddf;"
|- style="background:#ddf;"
! value
! मूल्य
| <kbd>'e'</kbd> || <kbd>'x'</kbd> || <kbd>'c'</kbd> || <kbd>'e'</kbd> || <kbd>'s'</kbd> || <kbd>'s'</kbd> || <kbd>'i'</kbd> || <kbd>'v'</kbd>
| <kbd>'e'</kbd> || <kbd>'x'</kbd> || <kbd>'c'</kbd> || <kbd>'e'</kbd> || <kbd>'s'</kbd> || <kbd>'s'</kbd> || <kbd>'i'</kbd> || <kbd>'v'</kbd>
| colspan=2 style="background:#dbd;" | <kbd>25856</kbd>
| colspan=2 style="background:#dbd;" | <kbd>25856</kbd>
|- style="background:#ddf;"
|- style="background:#ddf;"
! hex
! हेक्स
| <kbd>65</kbd> || <kbd>78</kbd> || <kbd>63</kbd> || <kbd>65</kbd> || <kbd>73</kbd> || <kbd>73</kbd> || <kbd>69</kbd> || <kbd>76</kbd>
| <kbd>65</kbd> || <kbd>78</kbd> || <kbd>63</kbd> || <kbd>65</kbd> || <kbd>73</kbd> || <kbd>73</kbd> || <kbd>69</kbd> || <kbd>76</kbd>
| style="background:#dbd;" | <kbd>65</kbd> || style="background:#dbd;" | <kbd>00</kbd>
| style="background:#dbd;" | <kbd>65</kbd> || style="background:#dbd;" | <kbd>00</kbd>
|}
|}
B का मान अब अनजाने में वर्ण स्ट्रिंग के भाग से बनी संख्या से बदल दिया गया है। इस उदाहरण में e के बाद एक शून्य बाइट 25856 बन जाएगा।
'''B''' का मान अनजाने में वर्ण स्ट्रिंग के भाग से बनी संख्या से बदल दिया जाता है। तथा इस उदाहरण में '''E''' के बाद शून्य बाइट 25856 बन जाता है।


आबंटित मेमोरी के अंत के बाद डेटा लिखना कभी-कभी ऑपरेटिंग सिस्टम द्वारा प्रक्रिया को समाप्त करने वाली [[विखंडन दोष]] त्रुटि उत्पन्न करने के लिए पता लगाया जा सकता है।
आबंटित मेमोरी के अंत के बाद डेटा लिखकर कभी-कभी ऑपरेटिंग सिस्टम द्वारा प्रक्रिया को समाप्त करने वाली [[विखंडन दोष]] त्रुटि उत्पन्न करने के लिए पता लगाया जा सकता है।


इस उदाहरण में बफ़र ओवरफ़्लो होने से रोकने के लिए, <kbd>[[strcpy]]</kbd> को कॉल को <kbd>[[strlcpy]]</kbd> से बदला जा सकता है, जो A की अधिकतम क्षमता लेता है (एक अशक्त-समाप्ति वर्ण सहित) एक अतिरिक्त पैरामीटर के रूप में और यह सुनिश्चित करता है कि डेटा की इस राशि से अधिक A को नहीं लिखा गया है:
इस उदाहरण में बफ़र अधिकता होने से रोकने के लिए, <kbd>[[strcpy]]</kbd> कॉल को <kbd>[[strlcpy]]</kbd> से बदला जा सकता है, जो '''A''' की अधिकतम क्षमता लेता है (अशक्त-समाप्ति वर्ण सहित) अतिरिक्त पैरामीटर के रूप में और यह सुनिश्चित करता है कि डेटा की इस राशि से अधिक '''A''' को नहीं लिखा गया है:<syntaxhighlight lang="c">
strlcpy(A, "excessive", sizeof(A));
</syntaxhighlight>उपलब्ध होने पर, <kbd>strlcpy</kbd> लाइब्रेरी फ़ंक्शन को <kbd>[[strncpy]]</kbd> से अधिक पसंद किया जाता है, जो स्रोत स्ट्रिंग की लंबाई बफ़र के आकार से अधिक या उसके बराबर होने पर गंतव्य बफ़र को शून्य-समाप्त नहीं करता है (तीसरा तर्क फ़ंक्शन को पास किया गया), इसलिए '''A''' को अशक्त-समाप्त नहीं किया जा सकता है और इसे मान्य '''C'''-शैली स्ट्रिंग के रूप में नहीं माना जा सकता है।


<वाक्यविन्यास प्रकाश लैंग = सी>
== एक्सप्लॉइट ==
strlcpy (ए, अत्यधिक, आकार (ए));
</वाक्यविन्यास हाइलाइट>


उपलब्ध होने पर, <kbd>strlcpy</kbd> लाइब्रेरी फ़ंक्शन को <kbd>[[strncpy]]</kbd> से अधिक पसंद किया जाता है, जो स्रोत स्ट्रिंग की लंबाई बफ़र के आकार से अधिक या उसके बराबर होने पर गंतव्य बफ़र को शून्य-समाप्त नहीं करता है (तीसरा तर्क फ़ंक्शन को पास किया गया), इसलिए <kbd>A</kbd> को अशक्त-समाप्त नहीं किया जा सकता है और इसे मान्य C-शैली स्ट्रिंग के रूप में नहीं माना जा सकता है।
बफ़र अधिप्रवाह भेद्यता का लाभ उठाने की तकनीक, ऑपरेटिंग सिस्टम और मेमोरी क्षेत्र द्वारा आर्किटेक्चर द्वारा बदलती जाती है। उदाहरण के लिए, ढेर पर एक्सप्लॉइट (गतिशील आवंटित स्मृति के लिए उपयोग किया जाता है), [[कॉल स्टैक]] पर एक्सप्लॉइट से स्पष्ट रूप से भिन्न होता है। सामान्यतः, ढेर एक्सप्लॉइट लक्ष्य प्रणाली पर उपयोग किए गए ढेर प्रबंधक पर निर्भर है, स्टैक एक्सप्लॉइट वास्तुकला और कंपाइलर द्वारा उपयोग किए जाने वाले कॉलिंग सम्मेलन पर निर्भर करता है।


== शोषण ==
=== स्टैक-आधारित एक्सप्लॉइट ===
{{Main|स्टैक बफर अधिकता}}


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


=== स्टैक-आधारित शोषण ===
*प्रोग्राम के बर्ताव को बदलने के लिए, लोकल चर पर लिख कर, जो स्टैक के कॉलोसिव बफ़र के निकट स्थित होता है।
{{Main|Stack buffer overflow}}
*सामान्यतः अटैकर द्वारा चयनित कोड को इंगित करने के लिए स्टैक फ्रेम में रिटर्न पता को अधिलेखित करके शेलकोड कहा जाता है। फ़ंक्शन रिटर्न मिलने के बाद, निष्पादन अटैकर के शेलकोड पर फिर से शुरू होता है।
एक तकनीकी रूप से इच्छुक उपयोगकर्ता कई तरीकों में से एक में अपने लाभ के लिए कार्यक्रम में हेरफेर करने के लिए स्टैक-आधारित बफर ओवरफ्लो का फायदा उठा सकता है:
*शेलकोड को इंगित करने के लिए फंक्शन सूचक<ref>{{cite web |url=http://www.securityfocus.com/archive/1/462728/30/150/threaded |title=CORE-2007-0219: OpenBSD का IPv6 mbufs रिमोट कर्नेल बफर ओवरफ्लो|access-date=2007-05-15}}</ref> या अपवाद हैंडलर को अधिलेखित करके, जो पश्चात निष्पादित किया जाता है।
*भिन्न स्टैक फ्रेम के स्थानीय चर (या सूचक) को अधिलेखित करके, जिसका प्रयोग पश्चात उस फ्रेम के स्वामित्व वाले फंक्शन द्वारा किया जाता है।
अटैकर इन कारनामों का उपयोग करने के लिए डेटा को डिजाइन करता है, फिर इस डेटा को सुभेद्य कोड द्वारा प्रयोक्ता को प्रदत्त बफ़र में रख देता है। यदि स्टैक बफ़र अधिकता को प्रभावित करने के लिए उपयोग किए जाने वाले उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा का पता अप्रत्याशित होता है, तो रिमोट कोड निष्पादन के कारण स्टैक बफ़र अधिकता का एक्सप्लॉइट करना और अधिक कठिन हो जाता है। तकनीक जिसका प्रयोग बफ़र अधिप्रवाह के दोहन हेतु किया जाता है उसे "ट्रम्पोलिनिंग" कहा जाता है। उस तकनीक में, अटैकर कमज़ोर स्टैक बफ़र में सूचक खोज लेता है और उसके शेलकोड की उस संकेतक के सापेक्ष स्थिति की गणना करता है। फिर, वे स्मृति में पहले से उपलब्ध निर्देश पर कूदने के लिए ओवरराइट का उपयोग करेंगे जो दूसरी छलांग लगाते है, इस बार सूचक के सापेक्ष; वह दूसरी छलांग शेलकोड में शाखा निष्पादन करती है। उपयुक्त निर्देश अधिकांशतः बड़े कोड में उपलब्ध होते हैं। उदाहरण के लिए, मेटास्प्लोइट [[प्रोजेक्ट]] उपयुक्त [[ऑपकोड]] का डेटाबेस रखता है, चूंकि यह केवल विंडोज ऑपरेटिंग सिस्टम में पाए जाने वाले को सूचीबद्ध करता है।<ref>{{cite web|url=http://metasploit.com/users/opcode/msfopcode.cgi |title=मेटास्प्लोइट ओपकोड डेटाबेस|access-date=2007-05-15 |url-status=dead |archive-url=https://web.archive.org/web/20070512195939/http://www.metasploit.com/users/opcode/msfopcode.cgi |archive-date=12 May 2007 }}</ref>
=== ढेर आधारित एक्सप्लॉइट ===


* कार्यक्रम के व्यवहार को बदलने के लिए, स्टैक पर कमजोर बफर के पास स्थित स्थानीय चर को ओवरराइट करके
पुंज डेटा क्षेत्र में घटित बफ़र अधिप्रवाह को पुंज अधिप्रवाह के रूप में निर्दिष्ट किया जाता है तथा यह स्टैक आधारित अंतर्वाह से भिन्न तरीके से समुपयोज्य होता है। पुंज पर मेमोरी, गतिशील रूप से अनुप्रयोग द्वारा रन-टाइम पर आवंटित की जाती है और सामान्यतया इसमें प्रोग्राम डेटा निहित रहता है। अनुप्रयोग को लिंक्ड सूची पॉइंटर्स जैसे आंतरिक संरचनाओं को अधिलेखित करने के लिए विशिष्ट तरीके से इस डेटा को भ्रष्ट करने से एक्सप्लॉइट किया जाता है। विहित हीप अधिप्रवाह तकनीक गतिशील स्मृति नियतन लिंकेज को अधिलेखित करती है। (जैसे कि मैलोक मेटा डेटा) और प्रोग्राम फंक्शन पॉइंटर को अधिलिखित करने के लिए परिणामी सूचक एक्सचेंज का उपयोग करता है।
* हमलावर द्वारा चुने गए कोड को इंगित करने के लिए [[स्टैक फ्रेम]] में रिटर्न एड्रेस को ओवरराइट करके, जिसे आमतौर पर [[app]] कहा जाता है। एक बार जब फ़ंक्शन वापस आ जाता है, तो हमलावर के शेलकोड पर निष्पादन फिर से शुरू हो जाएगा।
* [[समारोह सूचक]] को ओवरराइट करके<ref>{{cite web |url=http://www.securityfocus.com/archive/1/462728/30/150/threaded |title=CORE-2007-0219: OpenBSD का IPv6 mbufs रिमोट कर्नेल बफर ओवरफ्लो|access-date=2007-05-15}}</ref> या अपवाद हैंडलर शेलकोड को इंगित करने के लिए, जिसे बाद में निष्पादित किया जाता है
* एक अलग स्टैक फ्रेम के एक स्थानीय चर (या पॉइंटर) को ओवरराइट करके, जिसका उपयोग बाद में उस फ्रेम के मालिक के फ़ंक्शन द्वारा किया जाएगा।<ref>{{cite web |url=http://packetstormsecurity.com/files/download/121751/ModernOverflowTargets.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://packetstormsecurity.com/files/download/121751/ModernOverflowTargets.pdf |archive-date=2022-10-09 |url-status=live |title=आधुनिक अतिप्रवाह लक्ष्य|access-date=2013-07-05}}</ref>
हमलावर इन शोषणों में से एक का कारण बनने के लिए डेटा डिज़ाइन करता है, फिर इस डेटा को कमजोर कोड द्वारा उपयोगकर्ताओं को आपूर्ति किए गए बफर में रखता है। यदि स्टैक बफर ओवरफ्लो को प्रभावित करने के लिए उपयोग किए जाने वाले उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा का पता अप्रत्याशित है, तो रिमोट कोड निष्पादन के कारण स्टैक बफर ओवरफ्लो का शोषण करना अधिक कठिन हो जाता है। इस तरह के बफर ओवरफ्लो का फायदा उठाने के लिए इस्तेमाल की जाने वाली एक तकनीक को ट्रैम्पोलिनिंग (कंप्यूटिंग) कहा जाता है। उस तकनीक में, एक हमलावर कमजोर स्टैक बफर के लिए एक पॉइंटर ढूंढेगा, और उस पॉइंटर के सापेक्ष उनके शेलकोड के स्थान की गणना करेगा। फिर, वे ओवरराइट का उपयोग पहले से ही स्मृति में एक ओपोड पर कूदने के लिए करेंगे जो दूसरी छलांग लगाएगा, इस बार सूचक के सापेक्ष; वह दूसरी छलांग शेलकोड में शाखा निष्पादन करेगी। उपयुक्त निर्देश अक्सर बड़े कोड में मौजूद होते हैं। उदाहरण के लिए, [[मेटास्प्लोइट प्रोजेक्ट]] उपयुक्त [[ओपकोड]] का एक डेटाबेस रखता है, हालांकि यह केवल [[माइक्रोसॉफ़्ट विंडोज़]] ऑपरेटिंग सिस्टम में पाए जाने वाले को सूचीबद्ध करता है।<ref>{{cite web|url=http://metasploit.com/users/opcode/msfopcode.cgi |title=मेटास्प्लोइट ओपकोड डेटाबेस|access-date=2007-05-15 |url-status=dead |archive-url=https://web.archive.org/web/20070512195939/http://www.metasploit.com/users/opcode/msfopcode.cgi |archive-date=12 May 2007 }}</ref>


[[जेपीईजी]] को संभालने में [[माइक्रोसॉफ्ट]] की जीडीआई + भेद्यता खतरे का उदाहरण है जो ढेर अतिप्रवाह प्रस्तुत कर सकता है।<ref>{{cite web |url=http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx |title=Microsoft तकनीक सुरक्षा बुलेटिन MS04-028|website=[[Microsoft]] |access-date=2007-05-15 |archive-url=https://web.archive.org/web/20110804221311/http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx |archive-date=2011-08-04 |url-status=dead }}</ref>
=== एक्सप्लॉइट में बाधाएँ ===


=== ढेर आधारित शोषण ===
बफ़र में हेर-फेर, जो उसके पढ़ने या निष्पादित करने से पहले आता है, एक्सप्लॉइट के प्रयास की विफलता का कारण बन सकता है। इन हस्तक्षेपों से एक्सप्लॉइट के खतरे को कम किया जा सकता है लेकिन संभव है कि यह असंभव न हो। जोड़-तोड़ में ऊपर या निचले भाग में रूपांतरण, [[मेटचार्टर्स]] को हटाने और अल्फान्यूमेरिक तारों को फ़िल्टर करने का भी समावेश हो सकता है। चूंकि, इन फ़िल्टर और जोड़-तोड़ को बायपास करने के लिए तकनीक उपलब्ध है; [[अल्फ़ान्यूमेरिक शेलकोड]], [[बहुरूपी कोड]], [[स्व-संशोधित कोड]] और रिटर्न-टू-लिबक अटैक होते है। अंतर्वेधन संसूचन पद्धति द्वारा संसूचन से बचने के लिए भी उसी विधि का प्रयोग किया जा सकता है। कुछ स्थिति में, जहां कोड को [[यूनिकोड]] में परिवर्तित किया जाता है,<ref>{{cite web |url=http://www.net-security.org/dl/articles/unicodebo.pdf |title=यूनिकोड विस्तारित स्ट्रिंग्स में मनमाना शेलकोड बनाना|access-date=2007-05-15 |url-status=dead |archive-url=https://web.archive.org/web/20060105041036/http://www.net-security.org/dl/articles/unicodebo.pdf |archive-date=2006-01-05 }}</ref> जब वास्तव में स्वैच्छिक कोड का दूरस्थ निष्पादन संभव होता है, भेद्यता के खतरे को प्रकटीकरणकर्ताओं द्वारा केवल सेवा से इनकार के रूप में गलत तरीके से प्रस्तुत किया जाता है।  
{{Main|Heap overflow}}
हीप डेटा क्षेत्र में होने वाले बफर ओवरफ्लो को हीप ओवरफ्लो कहा जाता है और स्टैक-आधारित ओवरफ्लो से अलग तरीके से इसका शोषण किया जा सकता है। हीप पर मेमोरी गतिशील रूप से रन-टाइम पर एप्लिकेशन द्वारा आवंटित की जाती है और इसमें आमतौर पर प्रोग्राम डेटा होता है। इस डेटा को विशिष्ट तरीकों से दूषित करके शोषण किया जाता है जिससे एप्लिकेशन आंतरिक संरचनाओं जैसे कि लिंक्ड लिस्ट पॉइंटर्स को अधिलेखित कर देता है। कैनोनिकल हीप ओवरफ्लो तकनीक डायनेमिक मेमोरी एलोकेशन लिंकेज (जैसे [[malloc]] मेटा डेटा) को ओवरराइट करती है और प्रोग्राम फंक्शन पॉइंटर को ओवरराइट करने के लिए परिणामी पॉइंटर एक्सचेंज का उपयोग करती है।


[[माइक्रोसॉफ्ट]] के [[ग्राफिक्स डिवाइस इंटरफ़ेस]] | [[जेपीईजी]] को संभालने में जीडीआई + भेद्यता खतरे का एक उदाहरण है जो ढेर अतिप्रवाह पेश कर सकता है।<ref>{{cite web |url=http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx |title=Microsoft तकनीक सुरक्षा बुलेटिन MS04-028|website=[[Microsoft]] |access-date=2007-05-15 |archive-url=https://web.archive.org/web/20110804221311/http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx |archive-date=2011-08-04 |url-status=dead }}</ref>
=== एक्सप्लॉइट की व्यावहारिकता ===


वास्तविक दुनिया में कारनामों में कई चुनौतियों का सामना करने के लिए मज़बूती से संचालित कारनामों पर काबू पाने की जरूरत होती है। इन कारकों में पतों में अशक्त बाइट्स, शेलकोड के स्थान में परिवर्तनशीलता, वातावरण के बीच अंतर और संचालन में विभिन्न प्रति-उपाय सम्मलित हैं।


=== शोषण में बाधाएँ ===
====एनओपी स्लेज तकनीक====
 
बफ़र का हेरफेर, जो पढ़ने या निष्पादित होने से पहले होता है, शोषण के प्रयास की विफलता का कारण बन सकता है। ये हेरफेर शोषण के खतरे को कम कर सकते हैं, लेकिन इसे असंभव नहीं बना सकते। हेरफेर में ऊपरी या निचले मामले में रूपांतरण, [[मेटाचैकर]] को हटाना और गैर-[[अक्षरांकीय]] स्ट्रिंग्स को फ़िल्टर करना शामिल हो सकता है। हालाँकि, इन फ़िल्टर और जोड़-तोड़ को बायपास करने के लिए तकनीक मौजूद है; [[अल्फ़ान्यूमेरिक शेलकोड]], [[बहुरूपी कोड]], [[स्व-संशोधित कोड]] और रिटर्न-टू-लिबक हमले। घुसपैठ का पता लगाने वाली प्रणालियों द्वारा पता लगाने से बचने के लिए उन्हीं तरीकों का इस्तेमाल किया जा सकता है। कुछ मामलों में, जहां कोड को [[यूनिकोड]] में परिवर्तित किया जाता है,<ref>{{cite web |url=http://www.net-security.org/dl/articles/unicodebo.pdf |title=यूनिकोड विस्तारित स्ट्रिंग्स में मनमाना शेलकोड बनाना|access-date=2007-05-15 |url-status=dead |archive-url=https://web.archive.org/web/20060105041036/http://www.net-security.org/dl/articles/unicodebo.pdf |archive-date=2006-01-05 }}</ref> भेद्यता के खतरे को प्रकटकर्ताओं द्वारा केवल सेवा से इनकार के रूप में गलत तरीके से प्रस्तुत किया गया है जब वास्तव में स्वैच्छिक कोड का दूरस्थ निष्पादन संभव है।
 
=== शोषण की व्यावहारिकता ===
 
वास्तविक दुनिया के कारनामों में कई तरह की चुनौतियाँ हैं, जिन्हें मज़बूती से संचालित करने के लिए शोषण के लिए दूर करने की आवश्यकता है। इन कारकों में पतों में अशक्त बाइट्स, शेलकोड के स्थान में परिवर्तनशीलता, वातावरण के बीच अंतर और संचालन में विभिन्न प्रति-उपाय शामिल हैं।


====एनओपी स्लेज तकनीक====
{{Main|एनओपी स्लाइड}}


{{Main|NOP slide}}
[[File:nopsled.svg|right|thumb|200px|स्टैक पर एनओपी-स्लेज पेलोड का चित्रण।]]


[[File:nopsled.svg|right|thumb|200px|स्टैक पर एनओपी-स्लेज पेलोड का चित्रण।]]एनओपी-स्लेज स्टैक बफर ओवरफ्लो के दोहन के लिए सबसे पुरानी और सबसे व्यापक रूप से ज्ञात तकनीक है।<ref name="neworder" />यह लक्ष्य क्षेत्र के आकार को प्रभावी ढंग से बढ़ाकर बफर का सटीक पता खोजने की समस्या को हल करता है। ऐसा करने के लिए, स्टैक के बहुत बड़े हिस्से [[क्लोज़ अप]] मशीन निर्देश के साथ दूषित हो गए हैं। हमलावर द्वारा आपूर्ति किए गए डेटा के अंत में, नो-ऑप निर्देशों के बाद, हमलावर बफर के शीर्ष पर एक सापेक्ष छलांग लगाने के लिए एक निर्देश देता है जहां शेलकोड स्थित होता है। नो-ऑप्स के इस संग्रह को एनओपी-स्लेज के रूप में संदर्भित किया जाता है क्योंकि यदि रिटर्न एड्रेस को बफर के नो-ऑप क्षेत्र के भीतर किसी भी पते के साथ ओवरराइट किया जाता है, तो निष्पादन नो-ऑप्स को तब तक नीचे स्लाइड करेगा जब तक कि यह वास्तविक पर पुनर्निर्देशित नहीं हो जाता। अंत में कूद कर दुर्भावनापूर्ण कोड। इस तकनीक के लिए हमलावर को यह अनुमान लगाने की आवश्यकता होती है कि तुलनात्मक रूप से छोटे शेलकोड के बजाय NOP-स्लेज स्टैक पर कहाँ है।<ref name="enderunix" />
एनओपी-स्लेज स्टैक बफ़र अधिकता के दोहन की सबसे पुरानी और सर्वाधिक प्रचलित तकनीक है।<ref name="neworder" /> यह लक्ष्य क्षेत्र के आकार को प्रभावी ढंग से बढ़ाकर बफ़र के सटीक पते को खोजने की समस्या का समाधान करता है। ऐसा करने के लिए, स्टैक के बहुत बड़े हिस्से नो-ऑप मशीन निर्देश के साथ दूषित हो जाते हैं। अटैकर द्वारा प्रदान किए गए डेटा को अंत में, नो-ऑप निर्देशों के बाद, अटैकर बफ़र के शीर्ष पर सापेक्षिक छलांग लगाने के लिए निर्देश देता है जहां शेलकोड स्थित होता है। नो-ऑप्स के इस संग्रह को "एनओपी-स्लेज" के रूप में संदर्भित किया जाता है क्योंकि यदि रिटर्न एड्रेस को बफ़र के नो-ऑप क्षेत्र के भीतर किसी भी पते से ओवरराइट किया जाता है, निष्पादन नो-ऑप्स को "स्लाइड" करता है जब तक कि यह अंत में वास्तविक मैलिसियस कोड पर पुनर्निर्देशित नहीं हो जाता है। इस तकनीक के लिए अटैकर को अपेक्षाकृत छोटे शेलकोड के स्थान पर, एनओपी-स्लेज के स्टैक का अनुमान लगाने की आवश्यकता होती है।<ref name="enderunix" />  


इस तकनीक की लोकप्रियता के कारण, घुसपैठ निवारण प्रणाली के कई विक्रेता उपयोग में आने वाले शेलकोड का पता लगाने के प्रयास में नो-ऑप मशीन निर्देशों के इस पैटर्न की खोज करेंगे। यह ध्यान रखना महत्वपूर्ण है कि एनओपी-स्लेज में केवल पारंपरिक नो-ऑप मशीन निर्देश ही शामिल नहीं हैं; कोई भी निर्देश जो मशीन की स्थिति को उस बिंदु तक दूषित नहीं करता है जहां शेलकोड नहीं चलेगा, हार्डवेयर की सहायता से नो-ऑप के स्थान पर उपयोग किया जा सकता है। नतीजतन, शोषण करने वाले लेखकों के लिए बेतरतीब ढंग से चुने गए निर्देशों के साथ नो-ऑप स्लेज की रचना करना आम बात हो गई है, जिसका शेलकोड निष्पादन पर कोई वास्तविक प्रभाव नहीं पड़ेगा।<ref name="Akritidis1" />
इस तकनीक की लोकप्रियता के कारण बहुत से घुसपैठियों द्वारा रोकथाम के लिए इस पद्धति में से कई विक्रेता कार्य में उपयोग होने वाले शेलकोड का पता लगाने के प्रयास में मशीन से नो-ऑप सिस्टम के निर्देशों की खोज करते है। यह ध्यान रखना महत्वपूर्ण है कि एनओपी-स्लेज में केवल पारंपरिक नो-ऑप मशीन निर्देश ही सम्मलित नहीं हैं; कोई भी निर्देश जो मशीन की स्थिति को उस बिंदु तक दूषित नहीं करता है जहां शेलकोड नहीं चलेगा, हार्डवेयर की सहायता से नो-ऑप के स्थान पर उपयोग किया जा सकता है। परिणामस्वरुप, एक्सप्लॉइट करने वाले लेखकों के लिए बेतरतीब ढंग से चुने गए निर्देशों के साथ नो-ऑप स्लेज की रचना करना सामान्य बात हो गई है, जिसका शेलकोड निष्पादन पर कोई वास्तविक प्रभाव नहीं पड़ता है।<ref name="Akritidis1" />


हालांकि इस पद्धति से किसी हमले के सफल होने की संभावना बहुत बढ़ जाती है, यह समस्याओं के बिना नहीं है। इस तकनीक का उपयोग करने वाले एक्सप्लॉइट्स को अभी भी कुछ हद तक भाग्य पर भरोसा करना चाहिए कि वे एनओपी-स्लेज क्षेत्र के भीतर ढेर पर ऑफ़सेट का अनुमान लगाएंगे।<ref name="klein1" />एक गलत अनुमान के परिणामस्वरूप आमतौर पर लक्ष्य प्रोग्राम क्रैश हो जाता है और सिस्टम प्रशासक को हमलावर की गतिविधियों के प्रति सचेत कर सकता है। एक और समस्या यह है कि एनओपी-स्लेज को बहुत अधिक मात्रा में मेमोरी की आवश्यकता होती है जिसमें एनओपी-स्लेज को किसी भी उपयोग के लिए पर्याप्त बड़ा रखा जा सके। यह एक समस्या हो सकती है जब प्रभावित बफ़र का आवंटित आकार बहुत छोटा होता है और स्टैक की वर्तमान गहराई उथली होती है (यानी, वर्तमान स्टैक फ़्रेम के अंत से स्टैक की शुरुआत तक बहुत अधिक जगह नहीं होती है)। इसकी समस्याओं के बावजूद, एनओपी-स्लेज अक्सर एकमात्र तरीका है जो किसी दिए गए प्लेटफॉर्म, पर्यावरण या स्थिति के लिए काम करेगा और इस तरह यह अभी भी एक महत्वपूर्ण तकनीक है।
इस विधि से दौरों के सफल होने की सम्भावना में बहुत सुधार आता है लेकिन यह बिना किसी समस्या के नहीं है। इस तकनीक का उपयोग करने वाले एक्सप्लॉइट्स को अभी भी भाग्य की कुछ मात्रा पर भरोसा करना चाहिए कि वे एनओपी-स्लेज क्षेत्र के भीतर ढेर पर ऑफ़सेट का अनुमान लगाएंगे।<ref name="klein1" /> सामान्यतया गलत अनुमान के परिणामस्वरूप लक्ष्य प्रोग्राम में अटैकर की गतिविधियों के प्रति सिस्टम प्रशासक को सचेत किया जा सकता है। और समस्या यह है कि एनओपी-स्लेज के लिए मेमोरी की बड़ी मात्रा की आवश्यकता होती है, जिसमें कि किसी भी उपयोग के लिए एनओपी-स्लेज पर्याप्त होता है। यह समस्या हो सकती है जब प्रभावित बफ़र का आबंटित आकार बहुत छोटा हो और स्टैक की वर्तमान गहराई कम हो (अर्थात्, वर्तमान स्टैक फ्रेम के अंत से स्टैक की शुरुआत तक बहुत अधिक स्थान नहीं है)। अपनी समस्याओं के बावजूद, एनओपी-स्लेज ही एकमात्र तरीका है जो किसी दिए गए प्लेटफार्म, पर्यावरण, या परिस्थिति के लिए कार्य करता है,और इसलिए यह अभी भी महत्वपूर्ण तकनीक है।  


==== एक रजिस्टर तकनीक में संग्रहीत पते पर कूदें ====
==== एक रजिस्टर तकनीक में संग्रहीत पते पर जायें ====


रजिस्टर करने के लिए कूदने की तकनीक एनओपी-स्लेज के लिए अतिरिक्त कमरे की आवश्यकता के बिना और स्टैक ऑफसेट का अनुमान लगाए बिना स्टैक बफर ओवरफ्लो के विश्वसनीय शोषण की अनुमति देती है। रणनीति रिटर्न पॉइंटर को किसी ऐसी चीज़ से अधिलेखित करना है जो प्रोग्राम को एक रजिस्टर के भीतर संग्रहीत ज्ञात पॉइंटर पर कूदने का कारण बनेगी जो नियंत्रित बफर और इस प्रकार शेलकोड को इंगित करता है। उदाहरण के लिए, यदि रजिस्टर ए में बफर की शुरुआत के लिए एक सूचक होता है तो उस रजिस्टर को एक ऑपरेंड के रूप में लेने वाली किसी भी कूद या कॉल का उपयोग निष्पादन के प्रवाह को नियंत्रित करने के लिए किया जा सकता है।<ref name="shah" /> [[File:jumpToEsp.png|left|thumb|300px|कॉल करने के लिए ntdll.dll से एक निर्देश <code>DbgPrint()</code> रूटीन में [[i386]] मशीन का ऑपकोड होता है <code>jmp esp</code>.]]व्यावहारिक रूप से किसी प्रोग्राम में जानबूझकर किसी विशेष रजिस्टर में कूदने के निर्देश नहीं हो सकते हैं। पारंपरिक समाधान एक उपयुक्त ऑपकोड के अनजाने उदाहरण को खोजना है at a fixed location somewhere within the program memory. In figure [[:Image:JumpToEsp.png|बाईं ओर ई i386 के ऐसे अनजाने उदाहरण का एक उदाहरण है <code>jmp esp</code> निर्देश। इस निर्देश के लिए ओपकोड है <code>FF E4</code>.<ref name="intel1" />यह दो-बाइट अनुक्रम निर्देश की शुरुआत से एक-बाइट ऑफ़सेट पर पाया जा सकता है <code>call DbgPrint</code> पते पर <code>0x7C941EED</code>. यदि कोई हमलावर इस पते के साथ प्रोग्राम रिटर्न एड्रेस को ओवरराइट करता है, तो प्रोग्राम सबसे पहले जंप करेगा <code>0x7C941EED</code>, ओपकोड की व्याख्या करें <code>FF E4</code> के रूप में <code>jmp esp</code> निर्देश, और फिर स्टैक के शीर्ष पर कूद जाएगा और हमलावर के कोड को निष्पादित करेगा।<ref name="packetstorm1" />
रजिस्टर करने के लिए कूदने की तकनीक एनओपी-स्लेज के लिए अतिरिक्त कमरे की आवश्यकता के बिना और स्टैक ऑफसेट का अनुमान लगाए बिना स्टैक बफ़र अधिकता के विश्वसनीय एक्सप्लॉइट की अनुमति देती है। रणनीति रिटर्न पॉइंटर को किसी ऐसी चीज़ से अधिलेखित करना है जो प्रोग्राम को रजिस्टर के भीतर संग्रहीत ज्ञात पॉइंटर पर कूदने का कारण बनेगी जो नियंत्रित बफ़र और इस प्रकार शेलकोड को इंगित करता है। उदाहरण के लिए, यदि रजिस्टर ए में बफ़र की शुरुआत के लिए सूचक होता है तो उस रजिस्टर को ऑपरेंड के रूप में लेने वाली किसी भी कूद या कॉल का उपयोग निष्पादन के प्रवाह को नियंत्रित करने के लिए किया जा सकता है।<ref name="shah" /> [[File:jumpToEsp.png|left|thumb|300px|कॉल करने के लिए ntdll.dll से निर्देश <code>DbgPrint()</code> रूटीन में [[i386]] मशीन का ऑपकोड होता है <code>jmp esp</code>.]]व्यावहारिक रूप से किसी प्रोग्राम में जानबूझकर किसी विशेष रजिस्टर में कूदने के निर्देश नहीं हो सकते हैं। पारंपरिक समाधान उपयुक्त ऑपकोड के अनजाने उदाहरण को खोजना है बाईं ओर ई i386 के ऐसे अनजाने उदाहरण है <code>jmp esp</code> इस निर्देश के लिए ओपकोड है <code>FF E4</code><ref name="intel1" /> यह दो-बाइट अनुक्रम निर्देश की शुरुआत से एक-बाइट ऑफ़सेट पर पाया जा सकता है <code>call DbgPrint</code> पते पर <code>0x7C941EED</code> यदि कोई अटैकर इस पते के साथ प्रोग्राम रिटर्न एड्रेस को ओवरराइट करता है, तो प्रोग्राम सबसे पहले जंप करेगा <code>0x7C941EED</code>, ओपकोड की व्याख्या <code>FF E4</code> के रूप में <code>jmp esp</code> निर्देश, और फिर स्टैक के शीर्ष पर कूद जाता है और अटैकर के कोड को निष्पादित करता है।<ref name="packetstorm1" />


जब यह तकनीक संभव हो जाती है तो भेद्यता की गंभीरता काफी बढ़ जाती है। ऐसा इसलिए है क्योंकि शोषण किसी हमले को चलाने के दौरान सफलता की आभासी गारंटी के साथ स्वचालित रूप से पर्याप्त रूप से काम करेगा। इस कारण से, यह [[इंटरनेट का कीड़ा]] में सबसे अधिक उपयोग की जाने वाली तकनीक है जो स्टैक बफर ओवरफ्लो कमजोरियों का फायदा उठाती है।<ref name="Yuji1" />
जब यह तकनीक संभव हो जाती है तो भेद्यता की गंभीरता काफी बढ़ जाती है। ऐसा इसलिए है क्योंकि एक्सप्लॉइट किसी अटैक को चलाने के दौरान सफलता की आभासी गारंटी के साथ स्वचालित रूप से पर्याप्त रूप से कार्य करता है। इस कारण से, यह [[इंटरनेट का कीड़ा|इंटरनेट]] में सबसे अधिक उपयोग की जाने वाली तकनीक है जो स्टैक बफ़र अधिकता कमजोरियों का फायदा उठाती है।<ref name="Yuji1" />


यह विधि विंडोज प्लेटफॉर्म पर ओवरराइट किए गए रिटर्न एड्रेस के बाद शेलकोड को रखने की भी अनुमति देती है। चूंकि निष्पादन योग्य अधिकतर पते पर आधारित होते हैं <code>0x00400000</code> और x86 एक [[छोटा एंडियन]] आर्किटेक्चर है, रिटर्न एड्रेस का आखिरी बाइट एक शून्य होना चाहिए, जो बफर कॉपी को समाप्त करता है और उसके आगे कुछ भी नहीं लिखा जाता है। यह शेलकोड के आकार को बफ़र के आकार तक सीमित करता है, जो अत्यधिक प्रतिबंधात्मक हो सकता है। DLL उच्च मेमोरी में स्थित हैं (ऊपर <code>0x01000000</code>) और ऐसे पते हैं जिनमें कोई शून्य बाइट नहीं है, इसलिए यह विधि अधिलेखित वापसी पते से नल बाइट्स (या अन्य अस्वीकृत वर्ण) को हटा सकती है। इस तरह से उपयोग की जाने वाली विधि को अक्सर डीएलएल ट्रैम्पोलिनिंग कहा जाता है।
यह विधि विंडोज प्लेटफॉर्म पर ओवरराइट किए गए रिटर्न एड्रेस के बाद शेलकोड को रखने की भी अनुमति देती है। चूंकि निष्पादन योग्य अधिकतर पते पर आधारित होते हैं <code>0x00400000</code> और x86 [[छोटा एंडियन]] आर्किटेक्चर है, रिटर्न एड्रेस का आखिरी बाइट शून्य होना चाहिए, जो बफ़र कॉपी को समाप्त करता है और उसके आगे कुछ भी नहीं लिखा जाता है। यह शेलकोड के आकार को बफ़र के आकार तक सीमित करता है, जो अत्यधिक प्रतिबंधात्मक हो सकता है। डीएलएल उच्च मेमोरी में स्थित हैं (ऊपर <code>0x01000000</code>) और ऐसे पते हैं जिनमें कोई शून्य बाइट नहीं है, इसलिए यह विधि अधिलेखित वापसी पते से नल बाइट्स (या अन्य अस्वीकृत वर्ण) को हटा सकती है। इस प्रकार से उपयोग की जाने वाली विधि को अधिकांशतः डीएलएल ट्रैम्पोलिनिंग कहा जाता है।


== सुरक्षात्मक प्रति उपाय ==
== सुरक्षात्मक प्रति उपाय ==


बफर ओवरफ्लो का पता लगाने या रोकने के लिए विभिन्न ट्रेडऑफ़ के साथ विभिन्न तकनीकों का उपयोग किया गया है। निम्नलिखित खंड उपलब्ध विकल्पों और कार्यान्वयनों का वर्णन करते हैं।
बफ़र अधिकता का पता लगाने या रोकने के लिए विभिन्न ट्रेडऑफ़ के साथ विभिन्न तकनीकों का उपयोग किया गया है। निम्नलिखित खंड उपलब्ध विकल्पों और कार्यान्वयनों का वर्णन करते हैं।


=== प्रोग्रामिंग भाषा का चुनाव ===
=== प्रोग्रामिंग भाषा का चुनाव ===


असेंबली और C/C++ लोकप्रिय प्रोग्रामिंग लैंग्वेज हैं जो बफर ओवरफ्लो के लिए कमजोर हैं, आंशिक रूप से क्योंकि वे मेमोरी तक सीधे पहुंच की अनुमति देते हैं और दृढ़ता से टाइप नहीं किए जाते हैं।<ref name="OWASP">https://www.owasp.org/index.php/Buffer_OverflowsBuffer Overflows article on OWASP {{Webarchive|url=https://web.archive.org/web/20160829122543/https://www.owasp.org/index.php/Buffer_Overflows |date=2016-08-29 }}</ref> C स्मृति के किसी भी हिस्से में डेटा तक पहुँचने या अधिलेखित करने के विरुद्ध कोई अंतर्निहित सुरक्षा प्रदान नहीं करता है; अधिक विशेष रूप से, यह जाँच नहीं करता है कि बफ़र को लिखा गया डेटा उस बफ़र की सीमाओं के भीतर है। मानक C++ लाइब्रेरी डेटा को सुरक्षित रूप से बफ़र करने के कई तरीके प्रदान करती है, और C++ की [[मानक टेम्पलेट लाइब्रेरी]] (STL) ऐसे कंटेनर प्रदान करती है जो वैकल्पिक रूप से बाउंड चेक कर सकते हैं यदि प्रोग्रामर स्पष्ट रूप से डेटा एक्सेस करते समय चेक के लिए कॉल करता है। उदाहरण के लिए, <code>vector</code>का सदस्य समारोह <code>at()</code> एक बाउंड चेक करता है और एक फेंकता है <code>out_of_range</code> सीमा जांच विफल होने पर अपवाद प्रबंधन।<ref>{{cite web|url=http://www.cplusplus.com/reference/vector/vector/at/ |title=वेक्टर :: पर - सी ++ संदर्भ|publisher=Cplusplus.com |access-date=2014-03-27}}</ref> हालाँकि, C ++ C की तरह ही व्यवहार करता है यदि सीमा जाँच को स्पष्ट रूप से नहीं कहा जाता है। सी के लिए बफर ओवरफ्लो से बचने की तकनीक भी मौजूद है।
असेंबली और C/C++ लोकप्रिय प्रोग्रामिंग लैंग्वेज हैं जो बफ़र अधिकता के लिए कमजोर हैं, आंशिक रूप से क्योंकि वे मेमोरी तक सीधे पहुंच की अनुमति देते हैं और दृढ़ता से टाइप नहीं किए जाते हैं।<ref name="OWASP">https://www.owasp.org/index.php/Buffer_OverflowsBuffer Overflows article on OWASP {{Webarchive|url=https://web.archive.org/web/20160829122543/https://www.owasp.org/index.php/Buffer_Overflows |date=2016-08-29 }}</ref> C स्मृति के किसी भी हिस्से में डेटा तक पहुँचने या अधिलेखित करने के विरुद्ध कोई अंतर्निहित सुरक्षा प्रदान नहीं करता है; अधिक विशेष रूप से, यह जाँच नहीं करता है कि बफ़र को लिखा गया डेटा उस बफ़र की सीमाओं के भीतर है। मानक C++ लाइब्रेरी डेटा को सुरक्षित रूप से बफ़र करने के कई तरीके प्रदान करती है, और C++ की [[मानक टेम्पलेट लाइब्रेरी]] (एसटीएल) ऐसे कंटेनर प्रदान करती है जो वैकल्पिक रूप से बाउंड चेक कर सकते हैं यदि प्रोग्रामर स्पष्ट रूप से डेटा एक्सेस करते समय चेक के लिए कॉल करता है। उदाहरण के लिए, A <code>vector</code>का सदस्य फंक्शन <code>at()</code> बाउंड चेक करता है और फेंकता है <code>out_of_range</code> सीमा जांच विफल होने पर अपवाद प्रबंधन।<ref>{{cite web|url=http://www.cplusplus.com/reference/vector/vector/at/ |title=वेक्टर :: पर - सी ++ संदर्भ|publisher=Cplusplus.com |access-date=2014-03-27}}</ref> चूंकि, C ++ C की प्रकार ही व्यवहार करता है यदि सीमा जाँच को स्पष्ट रूप से नहीं कहा जाता है। C के लिए बफ़र अधिकता से बचने की तकनीक भी उपलब्ध है।


भाषाएं जो दृढ़ता से टाइप की जाती हैं और सीधे मेमोरी एक्सेस की अनुमति नहीं देती हैं, जैसे कोबोल, जावा, पायथन, और अन्य, अधिकांश मामलों में बफर ओवरफ्लो होने से रोकती हैं।<ref name="OWASP"/>C/C++ के अलावा कई प्रोग्रामिंग लैंग्वेज रनटाइम चेकिंग प्रदान करती हैं और कुछ मामलों में कंपाइल-टाइम चेकिंग भी करती हैं जो एक चेतावनी भेज सकती हैं या अपवाद बढ़ा सकती हैं जब C या C++ डेटा को ओवरराइट कर देगा और गलत परिणाम प्राप्त होने तक आगे के निर्देशों को निष्पादित करना जारी रखेगा जो हो सकता है या कार्यक्रम के क्रैश होने का कारण नहीं हो सकता है। ऐसी भाषाओं के उदाहरणों में एडा (प्रोग्रामिंग लैंग्वेज), एफिल (प्रोग्रामिंग लैंग्वेज), [[लिस्प (प्रोग्रामिंग भाषा)]], [[मॉड्यूल-2]], स्मॉलटॉक, [[OCaml]] और ऐसे सी-डेरिवेटिव जैसे [[चक्रवात (प्रोग्रामिंग भाषा)]], [[जंग (प्रोग्रामिंग भाषा)]] और डी शामिल हैं। प्रोग्रामिंग भाषा)। [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] और .NET फ्रेमवर्क बायटेकोड वातावरण को भी सभी सरणियों पर सीमा जाँच की आवश्यकता होती है। लगभग हर [[व्याख्या की गई प्रोग्रामिंग भाषा]] बफर ओवरफ्लो से रक्षा करेगी, एक अच्छी तरह से परिभाषित त्रुटि स्थिति का संकेत देगी। अक्सर जहां एक भाषा सीमा जाँच करने के लिए पर्याप्त प्रकार की जानकारी प्रदान करती है, उसे सक्षम या अक्षम करने के लिए एक विकल्प प्रदान किया जाता है। स्टेटिक कोड विश्लेषण कई डायनेमिक बाउंड और टाइप चेक को हटा सकता है, लेकिन खराब कार्यान्वयन और अजीब मामले प्रदर्शन को काफी कम कर सकते हैं। सॉफ़्टवेयर इंजीनियरों को कौन सी भाषा और कंपाइलर सेटिंग का उपयोग करना है, यह तय करते समय सुरक्षा बनाम प्रदर्शन लागत के ट्रेडऑफ़ पर सावधानीपूर्वक विचार करना चाहिए।
भाषाएं जो दृढ़ता से टाइप की जाती हैं और सीधे मेमोरी एक्सेस की अनुमति नहीं देती हैं, जैसे कोबोल, जावा, पायथन, और अन्य, अधिकांश स्थिति में बफ़र अधिकता होने से रोकती हैं।<ref name="OWASP"/> C/C++ के अतिरिक्त कई प्रोग्रामिंग लैंग्वेज रनटाइम चेकिंग प्रदान करती हैं और कुछ स्थिति में कंपाइल-टाइम चेकिंग भी करती हैं जो चेतावनी भेज सकती हैं या अपवाद बढ़ा सकती हैं जब C या C++ डेटा को ओवरराइट कर देगा और गलत परिणाम प्राप्त होने तक आगे के निर्देशों को निष्पादित करना जारी रखेगा जो हो सकता है या प्रोग्राम के क्रैश होने का कारण नहीं हो सकता है। ऐसी भाषाओं के उदाहरणों में एडा (प्रोग्रामिंग लैंग्वेज), एफिल (प्रोग्रामिंग लैंग्वेज), [[लिस्प (प्रोग्रामिंग भाषा)]], [[मॉड्यूल-2]], स्मॉलटॉक, [[OCaml]] और ऐसे सी-डेरिवेटिव जैसे [[चक्रवात (प्रोग्रामिंग भाषा)]], [[जंग (प्रोग्रामिंग भाषा)]] और डी सम्मलित हैं। [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] और .NET फ्रेमवर्क बायटेकोड वातावरण को भी सभी सरणियों पर सीमा जाँच की आवश्यकता होती है। लगभग हर [[व्याख्या की गई प्रोग्रामिंग भाषा]] बफ़र अधिकता से रक्षा करेगी, अच्छी प्रकार से परिभाषित त्रुटि स्थिति का संकेत देगी। अधिकांशतः जहां भाषा सीमा जाँच करने के लिए पर्याप्त प्रकार की जानकारी प्रदान करती है, उसे सक्षम या अक्षम करने के लिए विकल्प प्रदान किया जाता है। स्टेटिक कोड विश्लेषण कई डायनेमिक बाउंड और टाइप चेक को हटा सकता है, लेकिन खराब कार्यान्वयन और विचित्र स्थिति प्रदर्शन को काफी कम कर सकते हैं। सॉफ़्टवेयर इंजीनियरों को कौन सी भाषा और कंपाइलर सेटिंग का उपयोग करना है, यह तय करते समय सुरक्षा बनाम प्रदर्शन लागत के ट्रेडऑफ़ पर सावधानीपूर्वक विचार करना चाहिए।


=== सुरक्षित पुस्तकालयों का उपयोग ===
=== सुरक्षित पुस्तकालयों का उपयोग ===


सी और सी ++ भाषाओं में बफर ओवरफ्लो की समस्या आम है क्योंकि वे डेटा प्रकारों के लिए कंटेनर के रूप में बफर के निम्न स्तर के प्रतिनिधित्व संबंधी विवरण का खुलासा करते हैं। बफर प्रबंधन करने वाले कोड में उच्च स्तर की शुद्धता बनाए रखने से बफर ओवरफ्लो से बचा जाना चाहिए। मानक पुस्तकालय कार्यों से बचने के लिए भी लंबे समय से सिफारिश की गई है, जो कि जांच की सीमा नहीं है, जैसे कि <code>[[gets()|gets]]</code>, <code>[[scanf]]</code> और <code>[[strcpy]]</code>. मोरिस वर्म ने शोषण किया a <code>gets</code> [[उंगली]] में कॉल करें।<ref>{{cite web |url=http://wiretap.area.com/Gopher/Library/Techdoc/Virus/inetvir.823 |title=संग्रहीत प्रति|website=wiretap.area.com |access-date=6 June 2022 |archive-url=https://web.archive.org/web/20010505080457/http://wiretap.area.com/Gopher/Library/Techdoc/Virus/inetvir.823 |archive-date=5 May 2001 |url-status=dead}}</ref>
C और C++ भाषाओं में बफ़र अधिकता की समस्या सामान्य है क्योंकि वे डेटा प्रकारों के लिए कंटेनर के रूप में बफ़र के निम्न स्तर के प्रतिनिधित्व संबंधी विवरण का खुलासा करते हैं। बफ़र प्रबंधन करने वाले कोड में उच्च स्तर की शुद्धता बनाए रखने से बफ़र अधिकता से बचा जाना चाहिए। मानक पुस्तकालय कार्यों से बचने के लिए भी लंबे समय से अनुरोध की गई है, जो कि जांच की सीमा नहीं है, जैसे कि <code>[[gets()|gets]]</code>, <code>[[scanf]]</code> और <code>[[strcpy]]</code> मोरिस वर्म ने एक्सप्लॉइट किया की <code>gets</code> [[उंगली|फिंगरड]] में कॉल करता है।<ref>{{cite web |url=http://wiretap.area.com/Gopher/Library/Techdoc/Virus/inetvir.823 |title=संग्रहीत प्रति|website=wiretap.area.com |access-date=6 June 2022 |archive-url=https://web.archive.org/web/20010505080457/http://wiretap.area.com/Gopher/Library/Techdoc/Virus/inetvir.823 |archive-date=5 May 2001 |url-status=dead}}</ref>
अच्छी तरह से लिखित और परीक्षण किए गए सार डेटा प्रकार पुस्तकालय जो केंद्रीकृत और स्वचालित रूप से बफर प्रबंधन करते हैं, जिसमें सीमा की जाँच भी शामिल है, बफर ओवरफ्लो की घटना और प्रभाव को कम कर सकते हैं। इन भाषाओं में दो मुख्य बिल्डिंग-ब्लॉक डेटा प्रकार जिनमें आमतौर पर बफर ओवरफ्लो होता है, स्ट्रिंग्स और एरेज़ हैं; इस प्रकार, इन डेटा प्रकारों में बफर ओवरफ़्लो को रोकने वाले पुस्तकालय आवश्यक कवरेज का विशाल बहुमत प्रदान कर सकते हैं। फिर भी, इन सुरक्षित पुस्तकालयों का सही ढंग से उपयोग करने में विफलता के परिणामस्वरूप बफर ओवरफ्लो और अन्य भेद्यताएं हो सकती हैं; और स्वाभाविक रूप से, पुस्तकालय में कोई भी [[सॉफ्टवेयर बग]] अपने आप में एक संभावित भेद्यता है। सुरक्षित लाइब्रेरी कार्यान्वयन में द बेटर स्ट्रिंग लाइब्रेरी शामिल है,<ref>{{cite web |url=http://bstring.sf.net/ |title=द बेटर स्ट्रिंग लाइब्रेरी}}</ref> एम्बेड<ref>{{cite web |url=http://www.and.org/vstr/ |title=वीएसटीआर होमपेज|access-date=2007-05-15 |archive-url=https://web.archive.org/web/20170305020810/http://www.and.org/vstr/ |archive-date=2017-03-05 |url-status=dead }}</ref> और इरविन।<ref>{{cite web |url=http://www.theiling.de/projects/erwin.html |title=इरविन होमपेज|access-date=2007-05-15}}</ref> [[OpenBSD]] ऑपरेटिंग सिस्टम की [[सी पुस्तकालय]] strlcpy और [[strlcat]] फ़ंक्शंस प्रदान करती है, लेकिन ये पूर्ण सुरक्षित लाइब्रेरी कार्यान्वयनों की तुलना में अधिक सीमित हैं।


सितंबर 2007 में, सी मानक समिति द्वारा तैयार की गई तकनीकी रिपोर्ट 24731 प्रकाशित हुई थी;<ref>{{Cite web|url=https://www.iso.org/obp/ui/#iso:std:iso-iec:tr:24731:-1:ed-2:v1:en:sec:4|title=सूचना प्रौद्योगिकी - प्रोग्रामिंग भाषाएं, उनके वातावरण और सिस्टम सॉफ्टवेयर इंटरफेस - सी लाइब्रेरी के विस्तार - भाग 1: बाउंड-चेकिंग इंटरफेस|last=International Organization for Standardization|date=2007|website=ISO Online Browsing Platform}}</ref> यह उन कार्यों का एक सेट निर्दिष्ट करता है जो अतिरिक्त बफर-आकार पैरामीटर के साथ मानक सी लाइब्रेरी की स्ट्रिंग और I/O फ़ंक्शंस पर आधारित होते हैं। हालाँकि, बफर ओवरफ्लो को कम करने के उद्देश्य से इन कार्यों की प्रभावकारिता विवादित है; इसके लिए प्रति फ़ंक्शन कॉल के आधार पर प्रोग्रामर हस्तक्षेप की आवश्यकता होती है जो हस्तक्षेप के बराबर है जो समान पुराने मानक लाइब्रेरी फ़ंक्शंस बफर ओवरफ़्लो सुरक्षित बना सकता है।<ref>{{cite web |url=https://www.securecoding.cert.org/confluence/x/QwY |archive-url=https://archive.today/20121228031633/https://www.securecoding.cert.org/confluence/x/QwY |url-status=dead |archive-date=December 28, 2012 |title=सीईआरटी सुरक्षित कोडिंग पहल|access-date=2007-07-30 }}</ref>
अच्छी प्रकार से लिखित और परीक्षण किए गए सार डेटा प्रकार पुस्तकालय जो केंद्रीकृत और स्वचालित रूप से बफ़र प्रबंधन करते हैं, जिसमें सीमा की जाँच भी सम्मलित है, बफ़र अधिकता की घटना और प्रभाव को कम कर सकते हैं। इन भाषाओं में दो मुख्य बिल्डिंग-ब्लॉक डेटा प्रकार जिनमें सामान्यतः बफ़र अधिकता होता है, स्ट्रिंग्स और एरेज़ हैं; इस प्रकार, इन डेटा प्रकारों में बफ़र अधिकता को रोकने वाले पुस्तकालय आवश्यक कवरेज का विशाल बहुमत प्रदान कर सकते हैं। फिर भी, इन सुरक्षित पुस्तकालयों का सही ढंग से उपयोग करने में विफलता के परिणामस्वरूप बफ़र अधिकता और अन्य भेद्यताएं हो सकती हैं; और स्वाभाविक रूप से, पुस्तकालय में कोई भी [[सॉफ्टवेयर बग]] अपने आप में संभावित भेद्यता है। सुरक्षित लाइब्रेरी कार्यान्वयन में द बेटर स्ट्रिंग लाइब्रेरी सम्मलित है,<ref>{{cite web |url=http://bstring.sf.net/ |title=द बेटर स्ट्रिंग लाइब्रेरी}}</ref> एम्बेड<ref>{{cite web |url=http://www.and.org/vstr/ |title=वीएसटीआर होमपेज|access-date=2007-05-15 |archive-url=https://web.archive.org/web/20170305020810/http://www.and.org/vstr/ |archive-date=2017-03-05 |url-status=dead }}</ref> और इरविन।<ref>{{cite web |url=http://www.theiling.de/projects/erwin.html |title=इरविन होमपेज|access-date=2007-05-15}}</ref> [[OpenBSD|ओपनबीएसडी]] ऑपरेटिंग सिस्टम की [[सी पुस्तकालय]] strlcpy और [[strlcat]] फ़ंक्शंस प्रदान करती है, लेकिन ये पूर्ण सुरक्षित लाइब्रेरी कार्यान्वयनों की तुलना में अधिक सीमित हैं।


सितंबर 2007 में, सी मानक समिति द्वारा तैयार की गई तकनीकी रिपोर्ट 24731 प्रकाशित हुई थी;<ref>{{Cite web|url=https://www.iso.org/obp/ui/#iso:std:iso-iec:tr:24731:-1:ed-2:v1:en:sec:4|title=सूचना प्रौद्योगिकी - प्रोग्रामिंग भाषाएं, उनके वातावरण और सिस्टम सॉफ्टवेयर इंटरफेस - सी लाइब्रेरी के विस्तार - भाग 1: बाउंड-चेकिंग इंटरफेस|last=International Organization for Standardization|date=2007|website=ISO Online Browsing Platform}}</ref> यह उन कार्यों का सेट निर्दिष्ट करता है जो अतिरिक्त बफ़र -आकार पैरामीटर के साथ मानक सी लाइब्रेरी की स्ट्रिंग और I/O फ़ंक्शंस पर आधारित होते हैं। चूंकि, बफ़र अधिकता को कम करने के उद्देश्य से इन कार्यों की प्रभावकारिता विवादित है; इसके लिए प्रति फ़ंक्शन कॉल के आधार पर प्रोग्रामर हस्तक्षेप की आवश्यकता होती है जो हस्तक्षेप के बराबर है जो समान प्राचीन मानक लाइब्रेरी फ़ंक्शंस बफ़र अधिकता सुरक्षित बना सकता है।<ref>{{cite web |url=https://www.securecoding.cert.org/confluence/x/QwY |archive-url=https://archive.today/20121228031633/https://www.securecoding.cert.org/confluence/x/QwY |url-status=dead |archive-date=December 28, 2012 |title=सीईआरटी सुरक्षित कोडिंग पहल|access-date=2007-07-30 }}</ref>
=== बफ़र अतिप्रवाह संरक्षण ===
{{Main|बफर अतिप्रवाह संरक्षण}}
बफ़र अधिकता सुरक्षा का उपयोग सबसे सामान्य बफ़र अधिकता का पता लगाने के लिए किया जाता है, यह जाँच कर कि फ़ंक्शन के वापस आने पर कॉल स्टैक को बदला नहीं गया है। यदि इसे बदल दिया गया है, तो प्रोग्राम सेगमेंटेशन गलती से बाहर निकलता है। ऐसी तीन प्रणालियाँ हैं लिबसेफ,<ref>{{cite web |url=http://directory.fsf.org/libsafe.html |title=FSF.org पर लिबसेफ|access-date=2007-05-20}}</ref> और [[स्टैकगार्ड]]<ref>{{cite web |url=https://www.usenix.org/publications/library/proceedings/sec98/full_papers/cowan/cowan.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.usenix.org/publications/library/proceedings/sec98/full_papers/cowan/cowan.pdf |archive-date=2022-10-09 |url-status=live |title=स्टैकगार्ड: कोवान एट अल द्वारा स्वचालित अनुकूली जांच और बफर-ओवरफ्लो हमलों की रोकथाम।|access-date=2007-05-20}}</ref> और प्रोपुलिस<ref>{{cite web|url=http://wiki.x.org/wiki/ProPolice |title=X.ORG पर प्रोपुलिस|access-date=2007-05-20 |url-status=dead |archive-url=https://web.archive.org/web/20070212032750/http://wiki.x.org/wiki/ProPolice |archive-date=12 February 2007 }}</ref> [[जीएनयू संकलक संग्रह]] पैच।


=== बफर अतिप्रवाह संरक्षण ===
माइक्रोसॉफ्ट का [[डेटा निष्पादन प्रतिबंध]] (डीइपी) मोड का कार्यान्वयन स्पष्ट रूप से [[संरचित अपवाद हैंडलर]] (एसइएच) के पॉइंटर को अधिलेखित होने से बचाता है।<ref>{{cite web |url=http://www.uninformed.org/?v=2&a=4&t=txt |title=Windows हार्डवेयर-प्रबलित डेटा निष्पादन रोकथाम को दरकिनार करना|access-date=2007-05-20 |archive-url=https://web.archive.org/web/20070430040534/http://www.uninformed.org/?v=2&a=4&t=txt |archive-date=2007-04-30 |url-status=dead }}</ref>
{{Main|Buffer overflow protection}}
बफर ओवरफ्लो सुरक्षा का उपयोग सबसे आम बफर ओवरफ्लो का पता लगाने के लिए किया जाता है, यह जाँच कर कि फ़ंक्शन के वापस आने पर कॉल स्टैक को बदला नहीं गया है। अगर इसे बदल दिया गया है, तो प्रोग्राम सेगमेंटेशन गलती से बाहर निकलता है। ऐसी तीन प्रणालियाँ हैं लिबसेफ,<ref>{{cite web |url=http://directory.fsf.org/libsafe.html |title=FSF.org पर लिबसेफ|access-date=2007-05-20}}</ref> और [[स्टैकगार्ड]]<ref>{{cite web |url=https://www.usenix.org/publications/library/proceedings/sec98/full_papers/cowan/cowan.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.usenix.org/publications/library/proceedings/sec98/full_papers/cowan/cowan.pdf |archive-date=2022-10-09 |url-status=live |title=स्टैकगार्ड: कोवान एट अल द्वारा स्वचालित अनुकूली जांच और बफर-ओवरफ्लो हमलों की रोकथाम।|access-date=2007-05-20}}</ref> और प्रोपुलिस<ref>{{cite web|url=http://wiki.x.org/wiki/ProPolice |title=X.ORG पर प्रोपुलिस|access-date=2007-05-20 |url-status=dead |archive-url=https://web.archive.org/web/20070212032750/http://wiki.x.org/wiki/ProPolice |archive-date=12 February 2007 }}</ref> [[जीएनयू संकलक संग्रह]] पैच।


Microsoft का [[डेटा निष्पादन प्रतिबंध]] (DEP) मोड का कार्यान्वयन स्पष्ट रूप से [[संरचित अपवाद हैंडलर]] (SEH) के पॉइंटर को अधिलेखित होने से बचाता है।<ref>{{cite web |url=http://www.uninformed.org/?v=2&a=4&t=txt |title=Windows हार्डवेयर-प्रबलित डेटा निष्पादन रोकथाम को दरकिनार करना|access-date=2007-05-20 |archive-url=https://web.archive.org/web/20070430040534/http://www.uninformed.org/?v=2&a=4&t=txt |archive-date=2007-04-30 |url-status=dead }}</ref>
स्टैक को दो भाग में विभाजित करके मजबूत स्टैक सुरक्षा संभव है: डेटा के लिए और फ़ंक्शन रिटर्न के लिए एक। यह विभाजन [[फोर्थ (प्रोग्रामिंग भाषा)]] में उपलब्ध है, चूंकि यह सुरक्षा-आधारित डिज़ाइन निर्णय नहीं था। भले ही, यह बफ़र अधिकता का पूर्ण समाधान नहीं है, क्योंकि रिटर्न एड्रेस के अतिरिक्त संवेदनशील डेटा अभी भी अधिलेखित हो सकता है।
स्टैक को दो में विभाजित करके मजबूत स्टैक सुरक्षा संभव है: डेटा के लिए एक और फ़ंक्शन रिटर्न के लिए एक। यह विभाजन [[फोर्थ (प्रोग्रामिंग भाषा)]] में मौजूद है, हालांकि यह सुरक्षा-आधारित डिज़ाइन निर्णय नहीं था। भले ही, यह बफर ओवरफ्लो का पूर्ण समाधान नहीं है, क्योंकि रिटर्न एड्रेस के अलावा संवेदनशील डेटा अभी भी अधिलेखित हो सकता है।


=== सूचक सुरक्षा ===
=== सूचक सुरक्षा ===


बफर ओवरफ्लो पॉइंटर (कंप्यूटर प्रोग्रामिंग) में हेरफेर करके काम करता है, जिसमें संग्रहीत पते शामिल हैं। प्वाइंटगार्ड को एक संकलक-विस्तार के रूप में प्रस्तावित किया गया था ताकि हमलावरों को पॉइंटर्स और पतों में मज़बूती से हेरफेर करने में सक्षम होने से रोका जा सके।<ref>{{cite web|url=http://www.usenix.org/events/sec03/tech/full_papers/cowan/cowan_html/index.html|title=12वीं USENIX सुरक्षा संगोष्ठी - तकनीकी पेपर|website=www.usenix.org|access-date=3 April 2018}}</ref> दृष्टिकोण उपयोग किए जाने से पहले और बाद में कंपाइलर को स्वचालित रूप से एक्सओआर-एन्कोड पॉइंटर्स में कोड जोड़कर काम करता है। सैद्धांतिक रूप से, क्योंकि हमलावर को यह नहीं पता होता है कि पॉइंटर को एनकोड/डीकोड करने के लिए किस मूल्य का उपयोग किया जाएगा, वह यह अनुमान नहीं लगा सकता है कि यदि वह इसे एक नए मूल्य के साथ अधिलेखित करता है तो यह क्या इंगित करेगा। प्वाइंटगार्ड कभी जारी नहीं किया गया था, लेकिन माइक्रोसॉफ्ट ने [[विंडोज एक्स पी]] एसपी2 और [[विंडोज सर्वर 2003]] एसपी1 में एक समान दृष्टिकोण लागू किया।<ref>{{cite web|url=http://blogs.msdn.com/michael_howard/archive/2006/01/30/520200.aspx|title=पॉइंटर सबटरफ्यूज से बचाव (किंडा!)|website=msdn.com|access-date=3 April 2018|archive-url=https://web.archive.org/web/20100502021754/http://blogs.msdn.com/michael_howard/archive/2006/01/30/520200.aspx|archive-date=2010-05-02|url-status=dead}}</ref> सूचक सुरक्षा को स्वचालित सुविधा के रूप में लागू करने के बजाय, माइक्रोसॉफ्ट ने एक एपीआई रूटीन जोड़ा जिसे कॉल किया जा सकता है। यह बेहतर प्रदर्शन की अनुमति देता है (क्योंकि यह हर समय उपयोग नहीं किया जाता है), लेकिन यह जानने के लिए प्रोग्रामर पर बोझ डालता है कि यह कब आवश्यक है।
बफ़र अधिकता पॉइंटर (कंप्यूटर प्रोग्रामिंग) में हेरफेर करके कार्य करता है, जिसमें संग्रहीत पते सम्मलित हैं। प्वाइंटगार्ड को संकलक-विस्तार के रूप में प्रस्तावित किया गया था जिससे की अटैकरों को पॉइंटर्स और पतों में मज़बूती से हेरफेर करने में सक्षम होने से रोका जा सके।<ref>{{cite web|url=http://www.usenix.org/events/sec03/tech/full_papers/cowan/cowan_html/index.html|title=12वीं USENIX सुरक्षा संगोष्ठी - तकनीकी पेपर|website=www.usenix.org|access-date=3 April 2018}}</ref> दृष्टिकोण उपयोग किए जाने से पहले और पश्चात कंपाइलर को स्वचालित रूप से एक्सओआर-एन्कोड पॉइंटर्स में कोड जोड़कर कार्य करता है। सैद्धांतिक रूप से, क्योंकि अटैकर को यह नहीं पता होता है कि पॉइंटर को एनकोड/डीकोड करने के लिए किस मूल्य का उपयोग किया जाएगा, वह यह अनुमान नहीं लगा सकता है कि यदि वह इसे नए मूल्य के साथ अधिलेखित करता है तो यह क्या इंगित करेगा। प्वाइंटगार्ड कभी जारी नहीं किया गया था, लेकिन माइक्रोसॉफ्ट ने [[विंडोज एक्स पी]] एसपी2 और [[विंडोज सर्वर 2003]] एसपी1 में समान दृष्टिकोण लागू किया।<ref>{{cite web|url=http://blogs.msdn.com/michael_howard/archive/2006/01/30/520200.aspx|title=पॉइंटर सबटरफ्यूज से बचाव (किंडा!)|website=msdn.com|access-date=3 April 2018|archive-url=https://web.archive.org/web/20100502021754/http://blogs.msdn.com/michael_howard/archive/2006/01/30/520200.aspx|archive-date=2010-05-02|url-status=dead}}</ref> सूचक सुरक्षा को स्वचालित सुविधा के रूप में लागू करने के अतिरिक्त, माइक्रोसॉफ्ट ने एपीआई रूटीन जोड़ा जिसे कॉल किया जा सकता है। यह उत्तम प्रदर्शन की अनुमति देता है (क्योंकि यह हर समय उपयोग नहीं किया जाता है), लेकिन यह जानने के लिए प्रोग्रामर पर बोझ डालता है कि यह कब आवश्यक है।
 
चूंकि एक्सओआर रैखिक है, एक हमलावर केवल एक पते के निचले बाइट्स को ओवरराइट करके एन्कोडेड पॉइंटर में हेरफेर करने में सक्षम हो सकता है। यह एक हमले को सफल होने की अनुमति दे सकता है यदि हमलावर कई बार शोषण का प्रयास करने में सक्षम है या एक सूचक को कई स्थानों में से एक को इंगित करने के लिए एक हमले को पूरा करने में सक्षम है (जैसे कि एनओपी स्लेज के भीतर कोई स्थान)।<ref>{{cite web|url=http://www.usenix.org/publications/login/2005-06/pdfs/alexander0506.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://www.usenix.org/publications/login/2005-06/pdfs/alexander0506.pdf |archive-date=2022-10-09 |url-status=live|title=USENIX - द एडवांस्ड कंप्यूटिंग सिस्टम्स एसोसिएशन|website=www.usenix.org|access-date=3 April 2018}}</ref> Microsoft ने आंशिक अधिलेखन की इस कमजोरी को दूर करने के लिए अपनी एन्कोडिंग योजना में एक यादृच्छिक रोटेशन जोड़ा।<ref>{{cite web|url=http://blogs.msdn.com/michael_howard/archive/2006/08/16/702707.aspx|title=पॉइंटर सबटरफ्यूज (Redux) से बचाव|website=msdn.com|access-date=3 April 2018|archive-url=https://web.archive.org/web/20091219202748/http://blogs.msdn.com/michael_howard/archive/2006/08/16/702707.aspx|archive-date=2009-12-19|url-status=dead}}</ref>


चूंकि एक्सओआर रैखिक है, अटैकर केवल पते के निचले बाइट्स को ओवरराइट करके एन्कोडेड पॉइंटर में हेरफेर करने में सक्षम हो सकता है। यह अटैक को सफल होने की अनुमति दे सकता है यदि अटैकर कई बार एक्सप्लॉइट का प्रयास करने में सक्षम है या सूचक को कई स्थानों में से को इंगित करने के लिए अटैक को पूरा करने में सक्षम है (जैसे कि एनओपी स्लेज के भीतर कोई स्थान)।<ref>{{cite web|url=http://www.usenix.org/publications/login/2005-06/pdfs/alexander0506.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://www.usenix.org/publications/login/2005-06/pdfs/alexander0506.pdf |archive-date=2022-10-09 |url-status=live|title=USENIX - द एडवांस्ड कंप्यूटिंग सिस्टम्स एसोसिएशन|website=www.usenix.org|access-date=3 April 2018}}</ref> माइक्रोसॉफ्ट ने आंशिक अधिलेखन की इस कमजोरी को दूर करने के लिए अपनी एन्कोडिंग योजना में यादृच्छिक रोटेशन जोड़ा।<ref>{{cite web|url=http://blogs.msdn.com/michael_howard/archive/2006/08/16/702707.aspx|title=पॉइंटर सबटरफ्यूज (Redux) से बचाव|website=msdn.com|access-date=3 April 2018|archive-url=https://web.archive.org/web/20091219202748/http://blogs.msdn.com/michael_howard/archive/2006/08/16/702707.aspx|archive-date=2009-12-19|url-status=dead}}</ref>
===निष्पादन योग्य स्थान सुरक्षा===
{{Main|निष्पादन योग्य अंतरिक्ष सुरक्षा}}


===निष्पादन योग्य स्थान सुरक्षा===
निष्पादन योग्य स्थान सुरक्षा बफ़र अधिकता सुरक्षा के लिए दृष्टिकोण है जो ढेर या ढेर पर कोड के निष्पादन को रोकता है। अटैकर किसी प्रोग्राम की मेमोरी में मनमाना कोड डालने के लिए बफ़र अधिकता का उपयोग कर सकता है, लेकिन निष्पादन योग्य स्थान सुरक्षा के साथ, उस कोड को निष्पादित करने का कोई भी प्रयास अपवाद का कारण बनेगा।
{{Main|Executable space protection}}
निष्पादन योग्य स्थान सुरक्षा बफर ओवरफ्लो सुरक्षा के लिए एक दृष्टिकोण है जो ढेर या ढेर पर कोड के निष्पादन को रोकता है। एक हमलावर किसी प्रोग्राम की मेमोरी में मनमाना कोड डालने के लिए बफर ओवरफ्लो का उपयोग कर सकता है, लेकिन निष्पादन योग्य स्थान सुरक्षा के साथ, उस कोड को निष्पादित करने का कोई भी प्रयास एक अपवाद का कारण बनेगा।


कुछ CPU NX बिट (No eXecute) या XD बिट (eXecute Disabled) नामक सुविधा का समर्थन करते हैं, जो सॉफ्टवेयर के संयोजन के साथ [[पेजिंग]] (जैसे स्टैक और ढेर वाले) को पढ़ने योग्य और लिखने योग्य के रूप में चिह्नित करने के लिए उपयोग किया जा सकता है लेकिन नहीं निष्पादन योग्य।
कुछ सीपीयू एनएक्स बिट (कोई निष्पादन नहीं) या एक्सडी बिट (निष्पादित अक्षम) नामक सुविधा का समर्थन करते हैं, जो सॉफ्टवेयर के संयोजन के साथ [[पेजिंग]] (जैसे स्टैक और ढेर वाले) को पढ़ने योग्य और लिखने योग्य के रूप में चिह्नित करने के लिए उपयोग किया जा सकता है।


कुछ यूनिक्स ऑपरेटिंग सिस्टम (जैसे OpenBSD, [[macOS]]) निष्पादन योग्य स्थान सुरक्षा (जैसे W^X) के साथ शिप होते हैं। कुछ वैकल्पिक पैकेजों में शामिल हैं:
कुछ यूनिक्स ऑपरेटिंग सिस्टम (जैसे ओपनबीएसडी, [[macOS|मैकओएस]]) निष्पादन योग्य स्थान सुरक्षा (जैसे W^X) के साथ शिप होते हैं। कुछ वैकल्पिक पैकेजों में सम्मलित हैं:


* [[शांति]]<ref>{{cite web |title=पैक्स: पैक्स टीम का होमपेज|url=http://pax.grsecurity.net |access-date=2007-06-03}}</ref>
* [[शांति|पैक्स]]<ref>{{cite web |title=पैक्स: पैक्स टीम का होमपेज|url=http://pax.grsecurity.net |access-date=2007-06-03}}</ref>
* [[एक्सेक शील्ड]]<ref>{{cite web |title=करनेलट्रॉप.ऑर्ग|url=http://kerneltrap.org/node/644 |access-date=2007-06-03 |url-status=dead |archive-url=https://archive.today/20120529183334/http://kerneltrap.org/node/644 |archive-date=2012-05-29 }}</ref>
* [[एक्सेक शील्ड]]<ref>{{cite web |title=करनेलट्रॉप.ऑर्ग|url=http://kerneltrap.org/node/644 |access-date=2007-06-03 |url-status=dead |archive-url=https://archive.today/20120529183334/http://kerneltrap.org/node/644 |archive-date=2012-05-29 }}</ref>
* [[ओपनवेल]]<ref>{{cite web |title=ओपनवॉल लिनक्स कर्नेल पैच 2.4.34-ओउ1|url=http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Openwall-Linux-kernel-patch-16454.shtml |access-date=2007-06-03 |url-status=dead |archive-url=https://web.archive.org/web/20120219111512/http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Openwall-Linux-kernel-patch-16454.shtml |archive-date=2012-02-19 }}</ref>
* [[ओपनवेल]]<ref>{{cite web |title=ओपनवॉल लिनक्स कर्नेल पैच 2.4.34-ओउ1|url=http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Openwall-Linux-kernel-patch-16454.shtml |access-date=2007-06-03 |url-status=dead |archive-url=https://web.archive.org/web/20120219111512/http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Openwall-Linux-kernel-patch-16454.shtml |archive-date=2012-02-19 }}</ref>
Microsoft Windows के नए संस्करण भी निष्पादन योग्य स्थान सुरक्षा का समर्थन करते हैं, जिसे डेटा निष्पादन रोकथाम कहा जाता है।<ref>{{cite web |title=Microsoft तकनीक: डेटा निष्पादन रोकथाम|url=http://technet2.microsoft.com/WindowsServer/en/Library/b0de1052-4101-44c3-a294-4da1bd1ef2271033.mspx?mfr=true |access-date=2006-06-30 |archive-url=https://web.archive.org/web/20060622140239/http://technet2.microsoft.com/WindowsServer/en/Library/b0de1052-4101-44c3-a294-4da1bd1ef2271033.mspx?mfr=true |archive-date=2006-06-22 |url-status=dead }}</ref> मालिकाना सॉफ़्टवेयर ऐड-ऑन में शामिल हैं:
माइक्रोसॉफ्ट विंडोज़ के नए संस्करण भी निष्पादन योग्य स्थान सुरक्षा का समर्थन करते हैं, जिसे डेटा निष्पादन रोकथाम कहा जाता है।<ref>{{cite web |title=Microsoft तकनीक: डेटा निष्पादन रोकथाम|url=http://technet2.microsoft.com/WindowsServer/en/Library/b0de1052-4101-44c3-a294-4da1bd1ef2271033.mspx?mfr=true |access-date=2006-06-30 |archive-url=https://web.archive.org/web/20060622140239/http://technet2.microsoft.com/WindowsServer/en/Library/b0de1052-4101-44c3-a294-4da1bd1ef2271033.mspx?mfr=true |archive-date=2006-06-22 |url-status=dead }}</ref> मालिकाना सॉफ़्टवेयर ऐड-ऑन में सम्मलित हैं:


* बफरशील्ड<ref>{{cite web |title=बफरशील्ड: विंडोज के लिए बफर ओवरफ्लो शोषण की रोकथाम|url=http://www.sys-manage.com/english/products/products_BufferShield.html |access-date=2007-06-03}}</ref>
* बफ़र शील्ड<ref>{{cite web |title=बफरशील्ड: विंडोज के लिए बफर ओवरफ्लो शोषण की रोकथाम|url=http://www.sys-manage.com/english/products/products_BufferShield.html |access-date=2007-06-03}}</ref>
* स्टैक डिफेंडर<ref>{{cite web |title=एनजीएसईसी स्टैक डिफेंडर|url=http://www.ngsec.com/ngproducts/stackdefender/ |access-date=2007-06-03 |archive-url = https://web.archive.org/web/20070513235539/http://www.ngsec.com/ngproducts/stackdefender/ <!-- Bot retrieved archive --> |archive-date = 2007-05-13}}</ref>
* स्टैक डिफेंडर<ref>{{cite web |title=एनजीएसईसी स्टैक डिफेंडर|url=http://www.ngsec.com/ngproducts/stackdefender/ |access-date=2007-06-03 |archive-url = https://web.archive.org/web/20070513235539/http://www.ngsec.com/ngproducts/stackdefender/ <!-- Bot retrieved archive --> |archive-date = 2007-05-13}}</ref>
निष्पादन योग्य अंतरिक्ष सुरक्षा आम तौर पर रिटर्न-टू-लिबक हमलों, या किसी अन्य हमले के खिलाफ सुरक्षा नहीं करती है जो हमलावरों के कोड के निष्पादन पर भरोसा नहीं करती है। हालाँकि, [[ASLR]] का उपयोग करने वाले [[64-बिट]] सिस्टम पर, जैसा कि नीचे वर्णित है, निष्पादन योग्य स्थान सुरक्षा ऐसे हमलों को निष्पादित करना कहीं अधिक कठिन बना देती है।
निष्पादन योग्य अंतरिक्ष सुरक्षा सामान्यतः रिटर्न-टू-लिबक अटैक्स, या किसी अन्य अटैक के विरुद्ध सुरक्षा नहीं करती है जो अटैकरों के कोड के निष्पादन पर भरोसा नहीं करती है। चूंकि, [[ASLR|एएसएलआर]] का उपयोग करने वाले [[64-बिट]] सिस्टम पर, जैसा कि नीचे वर्णित है, निष्पादन योग्य स्थान सुरक्षा ऐसे अटैक्स को निष्पादित करना कहीं अधिक कठिन बना देती है।


=== पता स्थान लेआउट यादृच्छिकीकरण ===
=== पता स्थान लेआउट यादृच्छिकीकरण ===
{{Main|Address space layout randomization}}
{{Main|पता स्थान अभिन्यास यादृच्छिक}}
एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) एक कंप्यूटर सुरक्षा सुविधा है जिसमें प्रमुख डेटा क्षेत्रों की स्थिति को व्यवस्थित करना शामिल है, जिसमें आमतौर पर निष्पादन योग्य आधार और लाइब्रेरी, हीप और स्टैक की स्थिति शामिल है, बेतरतीब ढंग से एक प्रक्रिया के पता स्थान में।
 
एड्रेस स्थान लेआउट रेंडमाइजेशन (एएसएलआर) कंप्यूटर सुरक्षा सुविधा है जिसमें प्रमुख डेटा क्षेत्रों की स्थिति को व्यवस्थित करना सम्मलित है, जिसमें सामान्यतः निष्पादन योग्य आधार और लाइब्रेरी, बेतरतीब ढंग से प्रक्रिया के पता स्थान में हीप और स्टैक की स्थिति सम्मलित है।


[[अप्रत्यक्ष स्मृति]] पतों का रैंडमाइजेशन जिस पर फ़ंक्शंस और चर पाए जा सकते हैं, बफर ओवरफ़्लो के शोषण को और अधिक कठिन बना सकते हैं, लेकिन असंभव नहीं। यह हमलावर को अलग-अलग सिस्टम के शोषण के प्रयास के लिए मजबूर करता है, जो इंटरनेट वर्म्स के प्रयासों को नाकाम कर देता है।<ref>{{cite web |title=PaX GRSecurity.net पर|url=http://pax.grsecurity.net/docs/aslr.txt |access-date=2007-06-03}}</ref> वर्चुअल एड्रेस स्पेस में प्रक्रियाओं और पुस्तकालयों को [[रिबेसिंग]] करने के लिए एक समान लेकिन कम प्रभावी तरीका है।
[[अप्रत्यक्ष स्मृति]] पतों का रैंडमाइजेशन जिस पर फ़ंक्शंस और चर पाए जा सकते हैं, बफ़र अधिकता के एक्सप्लॉइट को और अधिक कठिन बना सकते हैं, लेकिन असंभव नहीं होता है। यह अटैकर को भिन्न-भिन्न सिस्टम के एक्सप्लॉइट के प्रयास के लिए मजबूर करता है, जो इंटरनेट वर्म्स के प्रयासों को नाकार्य कर देता है।<ref>{{cite web |title=PaX GRSecurity.net पर|url=http://pax.grsecurity.net/docs/aslr.txt |access-date=2007-06-03}}</ref> वर्चुअल एड्रेस स्थान में प्रक्रियाओं और पुस्तकालयों को [[रिबेसिंग]] करने के लिए समान लेकिन कम प्रभावी तरीका है।


=== गहरा पैकेट निरीक्षण ===
=== गहरा पैकेट निरीक्षण ===
{{Main|Deep packet inspection}}
{{Main|गहन पैकेट निरीक्षण}}
डीप पैकेट इंस्पेक्शन (DPI) का उपयोग, नेटवर्क परिधि पर, अटैक सिग्नेचर और ह्यूरिस्टिक (कंप्यूटर साइंस) के उपयोग द्वारा बफर ओवरफ्लो का फायदा उठाने के लिए बहुत ही बुनियादी दूरस्थ प्रयासों का पता लगा सकता है। ये उन पैकेटों को ब्लॉक करने में सक्षम हैं जिनमें एक ज्ञात हमले के हस्ताक्षर हैं, या यदि नो-ऑपरेशन निर्देशों (एनओपी-स्लेज के रूप में जाना जाता है) की एक लंबी श्रृंखला का पता चला है, तो इनका उपयोग एक बार शोषण के [[पेलोड (सॉफ्टवेयर)]] के स्थान पर किया गया था। थोड़ा परिवर्तनशील है।
 
डीप पैकेट निरीक्षण (डीपीआई) के प्रयोग से नेटवर्क परिधि में, आक्रमण सिग्नेचर और अन्वेषण के प्रयोग द्वारा बफ़र अधिकता का पता लगाया जा सकता है। ये उन पैकेट्स को ब्लॉक करने में सक्षम हैं जिनमें ज्ञात अटैक के सिग्नेचर हैं, या यदि नो-ऑपरेशन निर्देशों की लंबी श्रृंखला है (एक नॉप-स्लेड के नाम से जाना जाता है), इन्हें बार तब उपयोग किया जाता था जब एक्सप्लॉइट के [[पेलोड]] की जगह थोड़ी सी चर होती थी।


पैकेट स्कैनिंग एक प्रभावी तरीका नहीं है क्योंकि यह केवल ज्ञात हमलों को रोक सकता है और ऐसे कई तरीके हैं जिनसे एनओपी-स्लेज को एन्कोड किया जा सकता है। हमलावरों द्वारा उपयोग किए जाने वाले शेलकोड को [[अल्फ़ान्यूमेरिक कोड]], [[रूपांतरित कोड]], या स्व-संशोधित कोड बनाया जा सकता है। ह्यूरिस्टिक पैकेट स्कैनर और घुसपैठ का पता लगाने वाले सिस्टम द्वारा पता लगाने से बचने के लिए स्व-संशोधित।
पैकेट स्कैनिंग प्रभावी तरीका नहीं है क्योंकि यह केवल ज्ञात अटैक्स को रोक सकता है और ऐसे कई तरीके हैं जिनसे एनओपी-स्लेज को एन्कोड किया जा सकता है। अटैकरों द्वारा उपयोग किया जाने वाला शेलकोड अक्षरांकीय रूपान्तरण या स्वतः संशोधन ह्यूरिस्टिक पैकेट स्कैनर और घुसपैठ की जांच प्रणालियों द्वारा पहचान से बचने के लिए बनाया जा सकता है।


=== परीक्षण ===
=== परीक्षण ===
बफ़र ओवरफ़्लो की जाँच करना और उन्हें पैदा करने वाले बग को पैच करना स्वाभाविक रूप से बफ़र ओवरफ़्लो को रोकने में मदद करता है। उन्हें खोजने के लिए एक सामान्य स्वचालित तकनीक [[फजर]] है।<ref>{{cite web|url=http://raykoid666.wordpress.com|title=शोषक - सुरक्षा जानकारी और ट्यूटोरियल|access-date=2009-11-29}}</ref> एज केस टेस्टिंग बफर ओवरफ्लो को भी उजागर कर सकता है, जैसा कि स्टेटिक एनालिसिस कर सकता है।<ref>{{Cite journal|last1=Larochelle|first1=David|last2=Evans|first2=David|date=13 August 2001|title=संभावित बफ़र ओवरफ़्लो भेद्यताओं का सांख्यिकीय रूप से पता लगाना|url=https://www.usenix.org/legacy/events/sec01/full_papers/larochelle/larochelle_html/|journal=USENIX Security Symposium|volume=32}}</ref> एक बार एक संभावित बफ़र अतिप्रवाह का पता चलने के बाद, इसे पैच किया जाना चाहिए; यह परीक्षण दृष्टिकोण को उस सॉफ़्टवेयर के लिए उपयोगी बनाता है जो विकास में है, लेकिन लीगेसी सॉफ़्टवेयर के लिए कम उपयोगी है जो अब अनुरक्षित या समर्थित नहीं है।
बफ़र अधिकता को जाँचे और प्राकृतिक रूप से आने वाले बग्स पर पैचिंग करने से बफ़र अधिकता को रोका जा सकता है। उन्हें खोजने के लिए सामान्य स्वचालित तकनीक फ़ज़िंग है।<ref>{{cite web|url=http://raykoid666.wordpress.com|title=शोषक - सुरक्षा जानकारी और ट्यूटोरियल|access-date=2009-11-29}}</ref> कोर केस परीक्षण बफ़र अंतर्वाह को भी उजागर कर सकता है जैसा कि स्थैतिक विश्लेषण हो सकता है। <ref>{{Cite journal|last1=Larochelle|first1=David|last2=Evans|first2=David|date=13 August 2001|title=संभावित बफ़र ओवरफ़्लो भेद्यताओं का सांख्यिकीय रूप से पता लगाना|url=https://www.usenix.org/legacy/events/sec01/full_papers/larochelle/larochelle_html/|journal=USENIX Security Symposium|volume=32}}</ref> बार संभावित बफ़र अतिप्रवाह का पता चलने के बाद, इसे पैच किया जाना चाहिए; यह परीक्षण दृष्टिकोण को सॉफ्टवेयर के लिए उपयोगी बनाता है जो विकास में है, लेकिन लीगेसी सॉफ़्टवेयर के लिए कम उपयोगी है जो अब अनुरक्षित या समर्थित नहीं है।


== इतिहास ==
== इतिहास ==


1972 की शुरुआत में बफर ओवरफ्लो को समझा गया और आंशिक रूप से सार्वजनिक रूप से प्रलेखित किया गया, जब कंप्यूटर सुरक्षा प्रौद्योगिकी योजना अध्ययन ने तकनीक निर्धारित की: इस फ़ंक्शन को निष्पादित करने वाला कोड स्रोत और गंतव्य पते की ठीक से जांच नहीं करता है, मॉनिटर के हिस्से को ओवरलैड करने की अनुमति देता है। उपयोगकर्ता। इसका उपयोग मॉनिटर में कोड इंजेक्ट करने के लिए किया जा सकता है जो उपयोगकर्ता को मशीन का नियंत्रण जब्त करने की अनुमति देगा।<ref>{{cite web |title=कंप्यूटर सुरक्षा प्रौद्योगिकी योजना अध्ययन|page=61 |url=http://csrc.nist.gov/publications/history/ande72.pdf |access-date=2007-11-02 |archive-url=https://web.archive.org/web/20110721060319/http://csrc.nist.gov/publications/history/ande72.pdf |archive-date=2011-07-21 |url-status=dead}}</ref> आज, मॉनिटर को कर्नेल कहा जाएगा।
बफ़र अधिकता को 1972 के प्रारंभ में आंशिक रूप से इसे समझा गया तथा सार्वजनिक रूप से अभिलेखित किया गया, जब कम्प्यूटर सुरक्षा प्रौद्योगिकी नियोजन अध्ययन ने इस तकनीक को प्रस्तुत किया तथा इस फंक्शन को निष्पादित करने वाला स्रोत कोड और गंतव्य पता को ठीक से जाँचा नहीं जाता है, मॉनिटर के हिस्से को उपयोगकर्ता द्वारा मड़ने की अनुमति दी जाती है। इसका उपयोग मॉनिटर में कोड इंजेक्ट करने के लिए किया जा सकता है जो उपयोगकर्ता को मशीन के नियंत्रण को जब्त करने की अनुमति देता है।<ref>{{cite web |title=कंप्यूटर सुरक्षा प्रौद्योगिकी योजना अध्ययन|page=61 |url=http://csrc.nist.gov/publications/history/ande72.pdf |access-date=2007-11-02 |archive-url=https://web.archive.org/web/20110721060319/http://csrc.nist.gov/publications/history/ande72.pdf |archive-date=2011-07-21 |url-status=dead}}</ref> आज के समय में, मॉनिटर को कर्नेल के रूप में संदर्भित किया जाता है।
 
भारत में सबसे पहले से प्रलेखित बफ़र अधिप्रवाह का शत्रुतापूर्ण एक्सप्लॉइट 1988 में हुआ था। यह मॉरिस वर्म द्वारा इंटरनेट पर खुद को प्रचारित करने के लिए उपयोग किए जाने वाले कई कारनामों में से था। एक्सप्लॉइट किया गया प्रोग्राम [[यूनिक्स]] पर [[फिंगर]] नामक सेवा थी।<ref>{{cite web |title=डोन सीले, यूटा विश्वविद्यालय द्वारा "ए टूर ऑफ़ द वर्म"|url=http://world.std.com/~franl/worm.html |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20070520233435/http://world.std.com/~franl/worm.html <!-- Bot retrieved archive --> |archive-date=2007-05-20}}</ref> इसके पश्चात 1995 में, थॉमस लोपेटिक ने बफ़र अधिप्रवाह को स्वतंत्र रूप से पुनः खोज लिया और [[बगट्रेक]] सुरक्षा मेलिंग सूची में अपने निष्कर्ष को प्रकाशित किए।<ref>{{cite web |title=Bugtraq सुरक्षा मेलिंग सूची संग्रह|url=http://www.security-express.com/archives/bugtraq/1995_1/0403.html |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20070901222723/http://www.security-express.com/archives/bugtraq/1995_1/0403.html <!-- Bot retrieved archive --> |archive-date=2007-09-01}}</ref> साल बाद, 1996 में, [[एलियास लेवी]] (जिसे एलेफ वन के नाम से भी जाना जाता है) ने [[फ्रैक]] पत्रिका में "स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट" पेपर प्रकाशित किया,<ref>{{cite web |title=एलेफ वन द्वारा "स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट"|url=http://www.phrack.com/issues.html?issue=49&id=14 |access-date=2012-09-05}}</ref> स्टैक-आधारित बफ़र अधिकता भेद्यताओं का एक्सप्लॉइट करने के लिए चरण-दर-चरण परिचय होता है।


बफर ओवरफ्लो का सबसे पहला प्रलेखित शत्रुतापूर्ण शोषण 1988 में हुआ था। यह मॉरिस वर्म द्वारा इंटरनेट पर खुद को प्रचारित करने के लिए उपयोग किए जाने वाले कई कारनामों में से एक था। शोषण किया गया कार्यक्रम [[यूनिक्स]] पर [[फिंगर प्रोटोकॉल]] नामक एक [[सेवा (सिस्टम आर्किटेक्चर)]] था।<ref>{{cite web |title=डोन सीले, यूटा विश्वविद्यालय द्वारा "ए टूर ऑफ़ द वर्म"|url=http://world.std.com/~franl/worm.html |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20070520233435/http://world.std.com/~franl/worm.html <!-- Bot retrieved archive --> |archive-date=2007-05-20}}</ref> बाद में, 1995 में, थॉमस लोपेटिक ने स्वतंत्र रूप से बफर ओवरफ्लो को फिर से खोजा और [[बुगत्रया]] सुरक्षा मेलिंग सूची पर अपने निष्कर्ष प्रकाशित किए।<ref>{{cite web |title=Bugtraq सुरक्षा मेलिंग सूची संग्रह|url=http://www.security-express.com/archives/bugtraq/1995_1/0403.html |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20070901222723/http://www.security-express.com/archives/bugtraq/1995_1/0403.html <!-- Bot retrieved archive --> |archive-date=2007-09-01}}</ref> एक साल बाद, 1996 में, [[इलियास लेवी]] (जिसे एलेफ वन के नाम से भी जाना जाता है) ने [[फ्रैक]] पत्रिका में पेपर स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट प्रकाशित किया,<ref>{{cite web |title=एलेफ वन द्वारा "स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट"|url=http://www.phrack.com/issues.html?issue=49&id=14 |access-date=2012-09-05}}</ref> स्टैक-आधारित बफर ओवरफ़्लो भेद्यताओं का शोषण करने के लिए चरण-दर-चरण परिचय।
तब से कम-से-कम दो प्रमुख इंटरनेट वर्म्स बफ़र अधिकता का फायदा उठा चुके हैं जिससे की बड़ी संख्या में प्रणालियों के साथ समझौता हो सके। वर्ष 2001 में, कोड रेड वर्म ने माइक्रोसॉफ्ट की इंटरनेट सूचना सेवाओं (आईआईएस) 5.0 में बफ़र अधिकता का उपयोग किया था।<ref>{{cite web |title=ईआई डिजिटल सुरक्षा|url=http://research.eeye.com/html/advisories/published/AL20010717.html |access-date=2007-06-03}}</ref> और 2003 में एसक्यूएल स्लैमर वर्म ने माइक्रोसॉफ्ट एसक्यूएल सर्वर 2000 चलाने वाली मशीनों के साथ समझौता किया गया था।<ref>{{cite web |title=Microsoft तकनीक सुरक्षा बुलेटिन MS02-039|website=[[Microsoft]] |url=http://www.microsoft.com/technet/security/bulletin/ms02-039.mspx |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20080307052903/http://www.microsoft.com/technet/security/bulletin/ms02-039.mspx |archive-date=2008-03-07 |url-status=dead}}</ref>  


तब से, कम से कम दो प्रमुख इंटरनेट वर्म्स ने बड़ी संख्या में सिस्टम से समझौता करने के लिए बफर ओवरफ्लो का शोषण किया है। 2001 में, [[कोड लाल कीड़ा]] ने माइक्रोसॉफ्ट की इंटरनेट सूचना सेवाओं (आईआईएस) 5.0 में बफर ओवरफ्लो का फायदा उठाया।<ref>{{cite web |title=ईआई डिजिटल सुरक्षा|url=http://research.eeye.com/html/advisories/published/AL20010717.html |access-date=2007-06-03}}</ref> और 2003 में [[SQL Slammer]] वर्म ने [[Microsoft SQL Server 2000]] चलाने वाली मशीनों से समझौता किया।<ref>{{cite web |title=Microsoft तकनीक सुरक्षा बुलेटिन MS02-039|website=[[Microsoft]] |url=http://www.microsoft.com/technet/security/bulletin/ms02-039.mspx |access-date=2007-06-03 |archive-url=https://web.archive.org/web/20080307052903/http://www.microsoft.com/technet/security/bulletin/ms02-039.mspx |archive-date=2008-03-07 |url-status=dead}}</ref>
वर्ष 2003 में लाइसेंस प्राप्त [[एक्सबॉक्स]] गेम्स में उपलब्ध बफ़र अधिकता का उपयोग लाइसेंस रहित सॉफ्टवेयर को अनुमति देने के लिए किया गया है, होमब्रू खेलों सहित, कंसोल पर हार्डवेयर संशोधनों की आवश्यकता के बिना, मोडचिप्स के रूप में जाना जाता है।<ref>{{cite web |url=http://www.gamesindustry.biz/content_page.php?aid=1461 |archive-url=https://web.archive.org/web/20070927210513/http://www.gamesindustry.biz/content_page.php?aid=1461 |archive-date=2007-09-27 |title=हैकर बिना मॉड-चिप के Xbox सुरक्षा को तोड़ देता है|access-date=2007-06-03}}</ref> पीएस2 [[स्वतंत्रता]] का लाभ उठाने से प्लेस्टेशन 2 प्राप्त करने के लिए बफ़र अधिकता का भी प्रयोग किया जाता है। द लीजेंड ऑफ ज़ेल्डा: ट्वाइलाइट प्रिंसेस में बफ़र अधिकता का उपयोग करते हुए ट्वाइलाइट हैक ने डब्ल्यूआईआई के साथ भी ऐसा ही किया था।
2003 में, लाइसेंस प्राप्त [[एक्सबॉक्स (कंसोल)]] गेम में मौजूद बफर ओवरफ्लो का शोषण किया गया है ताकि हार्डवेयर संशोधनों की आवश्यकता के बिना कंसोल पर चलने के लिए बिना लाइसेंस वाले सॉफ़्टवेयर को अनुमति दी जा सके, जिसे मॉडचिप्स के रूप में जाना जाता है।<ref>{{cite web |url=http://www.gamesindustry.biz/content_page.php?aid=1461 |archive-url=https://web.archive.org/web/20070927210513/http://www.gamesindustry.biz/content_page.php?aid=1461 |archive-date=2007-09-27 |title=हैकर बिना मॉड-चिप के Xbox सुरक्षा को तोड़ देता है|access-date=2007-06-03}}</ref> [[PS2 स्वतंत्रता शोषण]] ने [[PlayStation 2]] के लिए इसे प्राप्त करने के लिए एक बफर ओवरफ्लो का भी उपयोग किया। द लीजेंड ऑफ ज़ेल्डा: ट्वाइलाइट प्रिंसेस में बफर ओवरफ्लो का उपयोग करते हुए ट्वाइलाइट हैक ने [[Wii]] के साथ इसे पूरा किया।


== यह भी देखें ==
== यह भी देखें ==
Line 285: Line 279:




==इस पेज में लापता आंतरिक लिंक की सूची==
*
 
*डेटा बफ़र
*सरणी डेटा संरचना
*सी (प्रोग्रामिंग भाषा)
*सी ++
*गलत मंशा वाला कोड
*मुख्य स्मृति
*सॉफ्टवेयर में विसंगति
*स्मृति पता
*अपवाद संचालक
*ट्रैम्पोलिनिंग (कम्प्यूटिंग)
*रिटर्न-टू-लिबक हमला
*अतिक्रमण संसूचन प्रणाली
*अनाधिकृत प्रवेश निरोधक प्रणाली
*कार्यकारी प्रबंधक
*दृढ़ता से टाइप किया गया
*एक्सेप्शन हेंडलिंग
*एडा (प्रोग्रामिंग भाषा)
*डी (प्रोग्रामिंग भाषा)
*छोटी बात
*एफिल (प्रोग्रामिंग भाषा)
*स्थैतिक कोड विश्लेषण
*प्रोपोल
*सूचक (कंप्यूटर प्रोग्रामिंग)
*एक्सडी बिट
*एनएक्स बिट
*मालिकाना सॉफ्टवेयर
*अनुमानी (कंप्यूटर विज्ञान)
*इंटरनेट सूचना सेवाएँ
*modchip
*होमब्रू (वीडियो गेम)
==बाहरी कड़ियाँ==
==बाहरी कड़ियाँ==
* [http://raykoid666.wordpress.com/2009/11/28/remote-buffer-overflow-from-vulnerability-to-exploit-part-1/ "Discovering and exploiting a remote buffer overflow vulnerability in an FTP server"] by Raykoid666
* [http://raykoid666.wordpress.com/2009/11/28/remote-buffer-overflow-from-vulnerability-to-exploit-part-1/ "Discovering and exploiting a remote buffer overflow vulnerability in an FTP server"] by Raykoid666
Line 334: Line 297:
* [https://www.helviojunior.com.br/it/security/criacao-de-exploits/criacao-de-exploits-parte-0-um-pouco-de-teoria/ "Criação de Exploits com Buffer Overflor – Parte 0 – Um pouco de teoria "] (2018), by Helvio Junior (M4v3r1ck)
* [https://www.helviojunior.com.br/it/security/criacao-de-exploits/criacao-de-exploits-parte-0-um-pouco-de-teoria/ "Criação de Exploits com Buffer Overflor – Parte 0 – Um pouco de teoria "] (2018), by Helvio Junior (M4v3r1ck)


{{Memory management navbox}}
{{Authority control}}
{{DEFAULTSORT:Buffer Overflow}}[[श्रेणी: सॉफ़्टवेयर बग]]
[[श्रेणी:कंप्यूटर मेमोरी]]
[[श्रेणी: कंप्यूटर सुरक्षा शोषण]]
[[श्रेणी: उदाहरण सी कोड वाले लेख]]


{{DEFAULTSORT:Buffer Overflow}}{{Authority control}}


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Buffer Overflow]]
[[Category:Created On 30/12/2022]]
[[Category:CS1 errors|Buffer Overflow]]
[[Category:Collapse templates|Buffer Overflow]]
[[Category:Created On 30/12/2022|Buffer Overflow]]
[[Category:Lua-based templates|Buffer Overflow]]
[[Category:Machine Translated Page|Buffer Overflow]]
[[Category:Multi-column templates|Buffer Overflow]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Buffer Overflow]]
[[Category:Pages using div col with small parameter|Buffer Overflow]]
[[Category:Pages with script errors|Buffer Overflow]]
[[Category:Short description with empty Wikidata description|Buffer Overflow]]
[[Category:Sidebars with styles needing conversion|Buffer Overflow]]
[[Category:Templates Vigyan Ready|Buffer Overflow]]
[[Category:Templates that add a tracking category|Buffer Overflow]]
[[Category:Templates that generate short descriptions|Buffer Overflow]]
[[Category:Templates using TemplateData|Buffer Overflow]]
[[Category:Templates using under-protected Lua modules|Buffer Overflow]]
[[Category:Webarchive template wayback links|Buffer Overflow]]
[[Category:Wikipedia fully protected templates|Div col]]

Latest revision as of 15:59, 30 August 2023

एक सॉफ्टवेयर बफ़र अधिकता का विजुअलाइजेशन। डेटा ए में लिखा गया है, लेकिन ए के भीतर फिट होने के लिए बहुत बड़ा है, इसलिए यह बी में बहता है।

सूचना सुरक्षा और प्रोग्रामिंग में, बफ़र अतिप्रवाह, या बफ़र ओवररन, विसंगति है जिसके द्वारा प्रोग्राम बफ़र में डेटा लिखते समय बफ़र की सीमा को अतिक्रमित कर देते हैं और आसन्न स्मृति स्थानों पर उपरिलेखन करते हैं।

बफ़र्स, डेटा को धारण करने के लिए स्मृति के भिन्न-भिन्न क्षेत्र होते हैं, अधिकांशतः इसे प्रोग्राम के एक भाग से दूसरे भाग में या प्रोग्रामों के बीच ले जाते समय बफ़र अधिकता अधिकांशतः खराब इनपुट द्वारा ट्रिगर किया जाता है; यदि कोई यह मानता है कि सभी इनपुट निश्चित आकार से छोटे होते है और बफ़र उस आकार के लिए बनाया जाता है तब असंगत लेनदेन, जो अधिक डेटा का उत्पादन करता है, बफ़र के अंत में इसे लिख जाता है। यदि यह संलग्न डेटा या निष्पादन योग्य कोड को अधिलेखित करता है, तो इसका गलत परिणाम और क्रैश सहित अनिश्चित प्रोग्राम व्यवहार में हो सकता हैं।

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

बफ़र अधिकता से जुड़ी प्रोग्रामिंग भाषाओं में C और C++ सम्मलित हैं, जो मेमोरी के किसी भी हिस्से में डेटा के अभिगम या ओवरराइटिंग के विरुद्ध कोई अंतर्निहित सुरक्षा प्रदान नहीं करती है और सारणी पर लिखे गए डेटा को स्वतः जाँच नहीं करती है (अंतर्निहित बफ़र प्रकार) सारणी की सीमाओं के भीतर होता है। परिबद्ध जांच बफ़र बहिर्वाह को रोक सकता है परंतु अतिरिक्त कोड एवं संसाधन को समय की आवश्यकता होती है। आधुनिक ऑपरेटिंग सिस्टम मैलिसियस बफ़र अधिकता का सामना करने के लिए, विशेष रूप से मेमोरी के लेआउट को यादृच्छिक रूप से, विभिन्न तकनीकों का उपयोग किया जाता है, या जानबूझकर बफ़र्स के बीच में स्थान छोड़ कर उन क्षेत्रों ("कनारी") में लिखने वाली क्रियाओं की खोज करता है।

तकनीकी विवरण

एक बफ़र अतिप्रवाह तब होता है जब बफ़र को लिखा गया डेटा भी अपर्याप्त सीमा जाँच के कारण गंतव्य बफ़र से सटे मेमोरी पतों में डेटा मान को दूषित कर जानकारी रखता है।[1]: 41  यह तब हो सकता है जब डेटा को एक बफ़र से दूसरे बफ़र में पहले जाँचे बिना कॉपी किया जाता है कि डेटा डेस्टिनेशन बफ़र के भीतर फिट बैठता है या नहीं।

उदाहरण

C (प्रोग्रामिंग लैंग्वेज) में निम्नलिखित उदाहरण व्यक्त है, जैसे प्रोग्राम में दो चर होते हैं जो स्मृति में आसन्न होते हैं: 8-बाइट-लंबा स्ट्रिंग बफ़र A, और दो-बाइट बड़ा-एंडियन पूर्णांक, B

char           A[8] = "";
unsigned short B    = 1979;

प्रारंभ में, A में शून्य बाइट्स के अतिरिक्त कुछ नहीं होता है, और B में 1979 की संख्या होती है।

चर नाम A B
मूल्य [null string] 1979
हेक्स मान 00 00 00 00 00 00 00 00 07 BB

अब, "excessive" A बफ़र में एएससीआईआई एन्कोडिंग के साथ प्रोग्राम अशक्त-समाप्त स्ट्रिंग को संग्रहीत करने का प्रयास करता है।

strcpy(A, "excessive");

"excessive" 9 अक्षर लंबा है और नल टर्मिनेटर सहित 10 बाइट्स को एन्कोड करता है, लेकिन A केवल 8 बाइट्स ले सकता है। स्ट्रिंग की लंबाई की जांच करने में विफल होने पर, यह B के मान को भी अधिलेखित कर देता है:

चर नाम A B
मूल्य 'e' 'x' 'c' 'e' 's' 's' 'i' 'v' 25856
हेक्स 65 78 63 65 73 73 69 76 65 00

B का मान अनजाने में वर्ण स्ट्रिंग के भाग से बनी संख्या से बदल दिया जाता है। तथा इस उदाहरण में E के बाद शून्य बाइट 25856 बन जाता है।

आबंटित मेमोरी के अंत के बाद डेटा लिखकर कभी-कभी ऑपरेटिंग सिस्टम द्वारा प्रक्रिया को समाप्त करने वाली विखंडन दोष त्रुटि उत्पन्न करने के लिए पता लगाया जा सकता है।

इस उदाहरण में बफ़र अधिकता होने से रोकने के लिए, strcpy कॉल को strlcpy से बदला जा सकता है, जो A की अधिकतम क्षमता लेता है (अशक्त-समाप्ति वर्ण सहित) अतिरिक्त पैरामीटर के रूप में और यह सुनिश्चित करता है कि डेटा की इस राशि से अधिक A को नहीं लिखा गया है:

strlcpy(A, "excessive", sizeof(A));

उपलब्ध होने पर, strlcpy लाइब्रेरी फ़ंक्शन को strncpy से अधिक पसंद किया जाता है, जो स्रोत स्ट्रिंग की लंबाई बफ़र के आकार से अधिक या उसके बराबर होने पर गंतव्य बफ़र को शून्य-समाप्त नहीं करता है (तीसरा तर्क फ़ंक्शन को पास किया गया), इसलिए A को अशक्त-समाप्त नहीं किया जा सकता है और इसे मान्य C-शैली स्ट्रिंग के रूप में नहीं माना जा सकता है।

एक्सप्लॉइट

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

स्टैक-आधारित एक्सप्लॉइट

तकनीकी इच्छुक उपयोगकर्ता अनेक तरीकों से प्रोग्राम को अपने लाभ में बदलने के लिए ढेर आधारित बफ़र अधिकता का फायदा उठा सकता है:

  • प्रोग्राम के बर्ताव को बदलने के लिए, लोकल चर पर लिख कर, जो स्टैक के कॉलोसिव बफ़र के निकट स्थित होता है।
  • सामान्यतः अटैकर द्वारा चयनित कोड को इंगित करने के लिए स्टैक फ्रेम में रिटर्न पता को अधिलेखित करके शेलकोड कहा जाता है। फ़ंक्शन रिटर्न मिलने के बाद, निष्पादन अटैकर के शेलकोड पर फिर से शुरू होता है।
  • शेलकोड को इंगित करने के लिए फंक्शन सूचक[2] या अपवाद हैंडलर को अधिलेखित करके, जो पश्चात निष्पादित किया जाता है।
  • भिन्न स्टैक फ्रेम के स्थानीय चर (या सूचक) को अधिलेखित करके, जिसका प्रयोग पश्चात उस फ्रेम के स्वामित्व वाले फंक्शन द्वारा किया जाता है।

अटैकर इन कारनामों का उपयोग करने के लिए डेटा को डिजाइन करता है, फिर इस डेटा को सुभेद्य कोड द्वारा प्रयोक्ता को प्रदत्त बफ़र में रख देता है। यदि स्टैक बफ़र अधिकता को प्रभावित करने के लिए उपयोग किए जाने वाले उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा का पता अप्रत्याशित होता है, तो रिमोट कोड निष्पादन के कारण स्टैक बफ़र अधिकता का एक्सप्लॉइट करना और अधिक कठिन हो जाता है। तकनीक जिसका प्रयोग बफ़र अधिप्रवाह के दोहन हेतु किया जाता है उसे "ट्रम्पोलिनिंग" कहा जाता है। उस तकनीक में, अटैकर कमज़ोर स्टैक बफ़र में सूचक खोज लेता है और उसके शेलकोड की उस संकेतक के सापेक्ष स्थिति की गणना करता है। फिर, वे स्मृति में पहले से उपलब्ध निर्देश पर कूदने के लिए ओवरराइट का उपयोग करेंगे जो दूसरी छलांग लगाते है, इस बार सूचक के सापेक्ष; वह दूसरी छलांग शेलकोड में शाखा निष्पादन करती है। उपयुक्त निर्देश अधिकांशतः बड़े कोड में उपलब्ध होते हैं। उदाहरण के लिए, मेटास्प्लोइट प्रोजेक्ट उपयुक्त ऑपकोड का डेटाबेस रखता है, चूंकि यह केवल विंडोज ऑपरेटिंग सिस्टम में पाए जाने वाले को सूचीबद्ध करता है।[3]

ढेर आधारित एक्सप्लॉइट

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

जेपीईजी को संभालने में माइक्रोसॉफ्ट की जीडीआई + भेद्यता खतरे का उदाहरण है जो ढेर अतिप्रवाह प्रस्तुत कर सकता है।[4]

एक्सप्लॉइट में बाधाएँ

बफ़र में हेर-फेर, जो उसके पढ़ने या निष्पादित करने से पहले आता है, एक्सप्लॉइट के प्रयास की विफलता का कारण बन सकता है। इन हस्तक्षेपों से एक्सप्लॉइट के खतरे को कम किया जा सकता है लेकिन संभव है कि यह असंभव न हो। जोड़-तोड़ में ऊपर या निचले भाग में रूपांतरण, मेटचार्टर्स को हटाने और अल्फान्यूमेरिक तारों को फ़िल्टर करने का भी समावेश हो सकता है। चूंकि, इन फ़िल्टर और जोड़-तोड़ को बायपास करने के लिए तकनीक उपलब्ध है; अल्फ़ान्यूमेरिक शेलकोड, बहुरूपी कोड, स्व-संशोधित कोड और रिटर्न-टू-लिबक अटैक होते है। अंतर्वेधन संसूचन पद्धति द्वारा संसूचन से बचने के लिए भी उसी विधि का प्रयोग किया जा सकता है। कुछ स्थिति में, जहां कोड को यूनिकोड में परिवर्तित किया जाता है,[5] जब वास्तव में स्वैच्छिक कोड का दूरस्थ निष्पादन संभव होता है, भेद्यता के खतरे को प्रकटीकरणकर्ताओं द्वारा केवल सेवा से इनकार के रूप में गलत तरीके से प्रस्तुत किया जाता है।

एक्सप्लॉइट की व्यावहारिकता

वास्तविक दुनिया में कारनामों में कई चुनौतियों का सामना करने के लिए मज़बूती से संचालित कारनामों पर काबू पाने की जरूरत होती है। इन कारकों में पतों में अशक्त बाइट्स, शेलकोड के स्थान में परिवर्तनशीलता, वातावरण के बीच अंतर और संचालन में विभिन्न प्रति-उपाय सम्मलित हैं।

एनओपी स्लेज तकनीक

स्टैक पर एनओपी-स्लेज पेलोड का चित्रण।

एनओपी-स्लेज स्टैक बफ़र अधिकता के दोहन की सबसे पुरानी और सर्वाधिक प्रचलित तकनीक है।[6] यह लक्ष्य क्षेत्र के आकार को प्रभावी ढंग से बढ़ाकर बफ़र के सटीक पते को खोजने की समस्या का समाधान करता है। ऐसा करने के लिए, स्टैक के बहुत बड़े हिस्से नो-ऑप मशीन निर्देश के साथ दूषित हो जाते हैं। अटैकर द्वारा प्रदान किए गए डेटा को अंत में, नो-ऑप निर्देशों के बाद, अटैकर बफ़र के शीर्ष पर सापेक्षिक छलांग लगाने के लिए निर्देश देता है जहां शेलकोड स्थित होता है। नो-ऑप्स के इस संग्रह को "एनओपी-स्लेज" के रूप में संदर्भित किया जाता है क्योंकि यदि रिटर्न एड्रेस को बफ़र के नो-ऑप क्षेत्र के भीतर किसी भी पते से ओवरराइट किया जाता है, निष्पादन नो-ऑप्स को "स्लाइड" करता है जब तक कि यह अंत में वास्तविक मैलिसियस कोड पर पुनर्निर्देशित नहीं हो जाता है। इस तकनीक के लिए अटैकर को अपेक्षाकृत छोटे शेलकोड के स्थान पर, एनओपी-स्लेज के स्टैक का अनुमान लगाने की आवश्यकता होती है।[7]

इस तकनीक की लोकप्रियता के कारण बहुत से घुसपैठियों द्वारा रोकथाम के लिए इस पद्धति में से कई विक्रेता कार्य में उपयोग होने वाले शेलकोड का पता लगाने के प्रयास में मशीन से नो-ऑप सिस्टम के निर्देशों की खोज करते है। यह ध्यान रखना महत्वपूर्ण है कि एनओपी-स्लेज में केवल पारंपरिक नो-ऑप मशीन निर्देश ही सम्मलित नहीं हैं; कोई भी निर्देश जो मशीन की स्थिति को उस बिंदु तक दूषित नहीं करता है जहां शेलकोड नहीं चलेगा, हार्डवेयर की सहायता से नो-ऑप के स्थान पर उपयोग किया जा सकता है। परिणामस्वरुप, एक्सप्लॉइट करने वाले लेखकों के लिए बेतरतीब ढंग से चुने गए निर्देशों के साथ नो-ऑप स्लेज की रचना करना सामान्य बात हो गई है, जिसका शेलकोड निष्पादन पर कोई वास्तविक प्रभाव नहीं पड़ता है।[8]

इस विधि से दौरों के सफल होने की सम्भावना में बहुत सुधार आता है लेकिन यह बिना किसी समस्या के नहीं है। इस तकनीक का उपयोग करने वाले एक्सप्लॉइट्स को अभी भी भाग्य की कुछ मात्रा पर भरोसा करना चाहिए कि वे एनओपी-स्लेज क्षेत्र के भीतर ढेर पर ऑफ़सेट का अनुमान लगाएंगे।[9] सामान्यतया गलत अनुमान के परिणामस्वरूप लक्ष्य प्रोग्राम में अटैकर की गतिविधियों के प्रति सिस्टम प्रशासक को सचेत किया जा सकता है। और समस्या यह है कि एनओपी-स्लेज के लिए मेमोरी की बड़ी मात्रा की आवश्यकता होती है, जिसमें कि किसी भी उपयोग के लिए एनओपी-स्लेज पर्याप्त होता है। यह समस्या हो सकती है जब प्रभावित बफ़र का आबंटित आकार बहुत छोटा हो और स्टैक की वर्तमान गहराई कम हो (अर्थात्, वर्तमान स्टैक फ्रेम के अंत से स्टैक की शुरुआत तक बहुत अधिक स्थान नहीं है)। अपनी समस्याओं के बावजूद, एनओपी-स्लेज ही एकमात्र तरीका है जो किसी दिए गए प्लेटफार्म, पर्यावरण, या परिस्थिति के लिए कार्य करता है,और इसलिए यह अभी भी महत्वपूर्ण तकनीक है।

एक रजिस्टर तकनीक में संग्रहीत पते पर जायें

रजिस्टर करने के लिए कूदने की तकनीक एनओपी-स्लेज के लिए अतिरिक्त कमरे की आवश्यकता के बिना और स्टैक ऑफसेट का अनुमान लगाए बिना स्टैक बफ़र अधिकता के विश्वसनीय एक्सप्लॉइट की अनुमति देती है। रणनीति रिटर्न पॉइंटर को किसी ऐसी चीज़ से अधिलेखित करना है जो प्रोग्राम को रजिस्टर के भीतर संग्रहीत ज्ञात पॉइंटर पर कूदने का कारण बनेगी जो नियंत्रित बफ़र और इस प्रकार शेलकोड को इंगित करता है। उदाहरण के लिए, यदि रजिस्टर ए में बफ़र की शुरुआत के लिए सूचक होता है तो उस रजिस्टर को ऑपरेंड के रूप में लेने वाली किसी भी कूद या कॉल का उपयोग निष्पादन के प्रवाह को नियंत्रित करने के लिए किया जा सकता है।[10]

कॉल करने के लिए ntdll.dll से निर्देश DbgPrint() रूटीन में i386 मशीन का ऑपकोड होता है jmp esp.

व्यावहारिक रूप से किसी प्रोग्राम में जानबूझकर किसी विशेष रजिस्टर में कूदने के निर्देश नहीं हो सकते हैं। पारंपरिक समाधान उपयुक्त ऑपकोड के अनजाने उदाहरण को खोजना है बाईं ओर ई i386 के ऐसे अनजाने उदाहरण है jmp esp इस निर्देश के लिए ओपकोड है FF E4[11] यह दो-बाइट अनुक्रम निर्देश की शुरुआत से एक-बाइट ऑफ़सेट पर पाया जा सकता है call DbgPrint पते पर 0x7C941EED यदि कोई अटैकर इस पते के साथ प्रोग्राम रिटर्न एड्रेस को ओवरराइट करता है, तो प्रोग्राम सबसे पहले जंप करेगा 0x7C941EED, ओपकोड की व्याख्या FF E4 के रूप में jmp esp निर्देश, और फिर स्टैक के शीर्ष पर कूद जाता है और अटैकर के कोड को निष्पादित करता है।[12]

जब यह तकनीक संभव हो जाती है तो भेद्यता की गंभीरता काफी बढ़ जाती है। ऐसा इसलिए है क्योंकि एक्सप्लॉइट किसी अटैक को चलाने के दौरान सफलता की आभासी गारंटी के साथ स्वचालित रूप से पर्याप्त रूप से कार्य करता है। इस कारण से, यह इंटरनेट में सबसे अधिक उपयोग की जाने वाली तकनीक है जो स्टैक बफ़र अधिकता कमजोरियों का फायदा उठाती है।[13]

यह विधि विंडोज प्लेटफॉर्म पर ओवरराइट किए गए रिटर्न एड्रेस के बाद शेलकोड को रखने की भी अनुमति देती है। चूंकि निष्पादन योग्य अधिकतर पते पर आधारित होते हैं 0x00400000 और x86 छोटा एंडियन आर्किटेक्चर है, रिटर्न एड्रेस का आखिरी बाइट शून्य होना चाहिए, जो बफ़र कॉपी को समाप्त करता है और उसके आगे कुछ भी नहीं लिखा जाता है। यह शेलकोड के आकार को बफ़र के आकार तक सीमित करता है, जो अत्यधिक प्रतिबंधात्मक हो सकता है। डीएलएल उच्च मेमोरी में स्थित हैं (ऊपर 0x01000000) और ऐसे पते हैं जिनमें कोई शून्य बाइट नहीं है, इसलिए यह विधि अधिलेखित वापसी पते से नल बाइट्स (या अन्य अस्वीकृत वर्ण) को हटा सकती है। इस प्रकार से उपयोग की जाने वाली विधि को अधिकांशतः डीएलएल ट्रैम्पोलिनिंग कहा जाता है।

सुरक्षात्मक प्रति उपाय

बफ़र अधिकता का पता लगाने या रोकने के लिए विभिन्न ट्रेडऑफ़ के साथ विभिन्न तकनीकों का उपयोग किया गया है। निम्नलिखित खंड उपलब्ध विकल्पों और कार्यान्वयनों का वर्णन करते हैं।

प्रोग्रामिंग भाषा का चुनाव

असेंबली और C/C++ लोकप्रिय प्रोग्रामिंग लैंग्वेज हैं जो बफ़र अधिकता के लिए कमजोर हैं, आंशिक रूप से क्योंकि वे मेमोरी तक सीधे पहुंच की अनुमति देते हैं और दृढ़ता से टाइप नहीं किए जाते हैं।[14] C स्मृति के किसी भी हिस्से में डेटा तक पहुँचने या अधिलेखित करने के विरुद्ध कोई अंतर्निहित सुरक्षा प्रदान नहीं करता है; अधिक विशेष रूप से, यह जाँच नहीं करता है कि बफ़र को लिखा गया डेटा उस बफ़र की सीमाओं के भीतर है। मानक C++ लाइब्रेरी डेटा को सुरक्षित रूप से बफ़र करने के कई तरीके प्रदान करती है, और C++ की मानक टेम्पलेट लाइब्रेरी (एसटीएल) ऐसे कंटेनर प्रदान करती है जो वैकल्पिक रूप से बाउंड चेक कर सकते हैं यदि प्रोग्रामर स्पष्ट रूप से डेटा एक्सेस करते समय चेक के लिए कॉल करता है। उदाहरण के लिए, A vectorका सदस्य फंक्शन at() बाउंड चेक करता है और फेंकता है out_of_range सीमा जांच विफल होने पर अपवाद प्रबंधन।[15] चूंकि, C ++ C की प्रकार ही व्यवहार करता है यदि सीमा जाँच को स्पष्ट रूप से नहीं कहा जाता है। C के लिए बफ़र अधिकता से बचने की तकनीक भी उपलब्ध है।

भाषाएं जो दृढ़ता से टाइप की जाती हैं और सीधे मेमोरी एक्सेस की अनुमति नहीं देती हैं, जैसे कोबोल, जावा, पायथन, और अन्य, अधिकांश स्थिति में बफ़र अधिकता होने से रोकती हैं।[14] C/C++ के अतिरिक्त कई प्रोग्रामिंग लैंग्वेज रनटाइम चेकिंग प्रदान करती हैं और कुछ स्थिति में कंपाइल-टाइम चेकिंग भी करती हैं जो चेतावनी भेज सकती हैं या अपवाद बढ़ा सकती हैं जब C या C++ डेटा को ओवरराइट कर देगा और गलत परिणाम प्राप्त होने तक आगे के निर्देशों को निष्पादित करना जारी रखेगा जो हो सकता है या प्रोग्राम के क्रैश होने का कारण नहीं हो सकता है। ऐसी भाषाओं के उदाहरणों में एडा (प्रोग्रामिंग लैंग्वेज), एफिल (प्रोग्रामिंग लैंग्वेज), लिस्प (प्रोग्रामिंग भाषा), मॉड्यूल-2, स्मॉलटॉक, OCaml और ऐसे सी-डेरिवेटिव जैसे चक्रवात (प्रोग्रामिंग भाषा), जंग (प्रोग्रामिंग भाषा) और डी सम्मलित हैं। जावा (सॉफ्टवेयर प्लेटफॉर्म) और .NET फ्रेमवर्क बायटेकोड वातावरण को भी सभी सरणियों पर सीमा जाँच की आवश्यकता होती है। लगभग हर व्याख्या की गई प्रोग्रामिंग भाषा बफ़र अधिकता से रक्षा करेगी, अच्छी प्रकार से परिभाषित त्रुटि स्थिति का संकेत देगी। अधिकांशतः जहां भाषा सीमा जाँच करने के लिए पर्याप्त प्रकार की जानकारी प्रदान करती है, उसे सक्षम या अक्षम करने के लिए विकल्प प्रदान किया जाता है। स्टेटिक कोड विश्लेषण कई डायनेमिक बाउंड और टाइप चेक को हटा सकता है, लेकिन खराब कार्यान्वयन और विचित्र स्थिति प्रदर्शन को काफी कम कर सकते हैं। सॉफ़्टवेयर इंजीनियरों को कौन सी भाषा और कंपाइलर सेटिंग का उपयोग करना है, यह तय करते समय सुरक्षा बनाम प्रदर्शन लागत के ट्रेडऑफ़ पर सावधानीपूर्वक विचार करना चाहिए।

सुरक्षित पुस्तकालयों का उपयोग

C और C++ भाषाओं में बफ़र अधिकता की समस्या सामान्य है क्योंकि वे डेटा प्रकारों के लिए कंटेनर के रूप में बफ़र के निम्न स्तर के प्रतिनिधित्व संबंधी विवरण का खुलासा करते हैं। बफ़र प्रबंधन करने वाले कोड में उच्च स्तर की शुद्धता बनाए रखने से बफ़र अधिकता से बचा जाना चाहिए। मानक पुस्तकालय कार्यों से बचने के लिए भी लंबे समय से अनुरोध की गई है, जो कि जांच की सीमा नहीं है, जैसे कि gets, scanf और strcpy मोरिस वर्म ने एक्सप्लॉइट किया की gets फिंगरड में कॉल करता है।[16]

अच्छी प्रकार से लिखित और परीक्षण किए गए सार डेटा प्रकार पुस्तकालय जो केंद्रीकृत और स्वचालित रूप से बफ़र प्रबंधन करते हैं, जिसमें सीमा की जाँच भी सम्मलित है, बफ़र अधिकता की घटना और प्रभाव को कम कर सकते हैं। इन भाषाओं में दो मुख्य बिल्डिंग-ब्लॉक डेटा प्रकार जिनमें सामान्यतः बफ़र अधिकता होता है, स्ट्रिंग्स और एरेज़ हैं; इस प्रकार, इन डेटा प्रकारों में बफ़र अधिकता को रोकने वाले पुस्तकालय आवश्यक कवरेज का विशाल बहुमत प्रदान कर सकते हैं। फिर भी, इन सुरक्षित पुस्तकालयों का सही ढंग से उपयोग करने में विफलता के परिणामस्वरूप बफ़र अधिकता और अन्य भेद्यताएं हो सकती हैं; और स्वाभाविक रूप से, पुस्तकालय में कोई भी सॉफ्टवेयर बग अपने आप में संभावित भेद्यता है। सुरक्षित लाइब्रेरी कार्यान्वयन में द बेटर स्ट्रिंग लाइब्रेरी सम्मलित है,[17] एम्बेड[18] और इरविन।[19] ओपनबीएसडी ऑपरेटिंग सिस्टम की सी पुस्तकालय strlcpy और strlcat फ़ंक्शंस प्रदान करती है, लेकिन ये पूर्ण सुरक्षित लाइब्रेरी कार्यान्वयनों की तुलना में अधिक सीमित हैं।

सितंबर 2007 में, सी मानक समिति द्वारा तैयार की गई तकनीकी रिपोर्ट 24731 प्रकाशित हुई थी;[20] यह उन कार्यों का सेट निर्दिष्ट करता है जो अतिरिक्त बफ़र -आकार पैरामीटर के साथ मानक सी लाइब्रेरी की स्ट्रिंग और I/O फ़ंक्शंस पर आधारित होते हैं। चूंकि, बफ़र अधिकता को कम करने के उद्देश्य से इन कार्यों की प्रभावकारिता विवादित है; इसके लिए प्रति फ़ंक्शन कॉल के आधार पर प्रोग्रामर हस्तक्षेप की आवश्यकता होती है जो हस्तक्षेप के बराबर है जो समान प्राचीन मानक लाइब्रेरी फ़ंक्शंस बफ़र अधिकता सुरक्षित बना सकता है।[21]

बफ़र अतिप्रवाह संरक्षण

बफ़र अधिकता सुरक्षा का उपयोग सबसे सामान्य बफ़र अधिकता का पता लगाने के लिए किया जाता है, यह जाँच कर कि फ़ंक्शन के वापस आने पर कॉल स्टैक को बदला नहीं गया है। यदि इसे बदल दिया गया है, तो प्रोग्राम सेगमेंटेशन गलती से बाहर निकलता है। ऐसी तीन प्रणालियाँ हैं लिबसेफ,[22] और स्टैकगार्ड[23] और प्रोपुलिस[24] जीएनयू संकलक संग्रह पैच।

माइक्रोसॉफ्ट का डेटा निष्पादन प्रतिबंध (डीइपी) मोड का कार्यान्वयन स्पष्ट रूप से संरचित अपवाद हैंडलर (एसइएच) के पॉइंटर को अधिलेखित होने से बचाता है।[25]

स्टैक को दो भाग में विभाजित करके मजबूत स्टैक सुरक्षा संभव है: डेटा के लिए और फ़ंक्शन रिटर्न के लिए एक। यह विभाजन फोर्थ (प्रोग्रामिंग भाषा) में उपलब्ध है, चूंकि यह सुरक्षा-आधारित डिज़ाइन निर्णय नहीं था। भले ही, यह बफ़र अधिकता का पूर्ण समाधान नहीं है, क्योंकि रिटर्न एड्रेस के अतिरिक्त संवेदनशील डेटा अभी भी अधिलेखित हो सकता है।

सूचक सुरक्षा

बफ़र अधिकता पॉइंटर (कंप्यूटर प्रोग्रामिंग) में हेरफेर करके कार्य करता है, जिसमें संग्रहीत पते सम्मलित हैं। प्वाइंटगार्ड को संकलक-विस्तार के रूप में प्रस्तावित किया गया था जिससे की अटैकरों को पॉइंटर्स और पतों में मज़बूती से हेरफेर करने में सक्षम होने से रोका जा सके।[26] दृष्टिकोण उपयोग किए जाने से पहले और पश्चात कंपाइलर को स्वचालित रूप से एक्सओआर-एन्कोड पॉइंटर्स में कोड जोड़कर कार्य करता है। सैद्धांतिक रूप से, क्योंकि अटैकर को यह नहीं पता होता है कि पॉइंटर को एनकोड/डीकोड करने के लिए किस मूल्य का उपयोग किया जाएगा, वह यह अनुमान नहीं लगा सकता है कि यदि वह इसे नए मूल्य के साथ अधिलेखित करता है तो यह क्या इंगित करेगा। प्वाइंटगार्ड कभी जारी नहीं किया गया था, लेकिन माइक्रोसॉफ्ट ने विंडोज एक्स पी एसपी2 और विंडोज सर्वर 2003 एसपी1 में समान दृष्टिकोण लागू किया।[27] सूचक सुरक्षा को स्वचालित सुविधा के रूप में लागू करने के अतिरिक्त, माइक्रोसॉफ्ट ने एपीआई रूटीन जोड़ा जिसे कॉल किया जा सकता है। यह उत्तम प्रदर्शन की अनुमति देता है (क्योंकि यह हर समय उपयोग नहीं किया जाता है), लेकिन यह जानने के लिए प्रोग्रामर पर बोझ डालता है कि यह कब आवश्यक है।

चूंकि एक्सओआर रैखिक है, अटैकर केवल पते के निचले बाइट्स को ओवरराइट करके एन्कोडेड पॉइंटर में हेरफेर करने में सक्षम हो सकता है। यह अटैक को सफल होने की अनुमति दे सकता है यदि अटैकर कई बार एक्सप्लॉइट का प्रयास करने में सक्षम है या सूचक को कई स्थानों में से को इंगित करने के लिए अटैक को पूरा करने में सक्षम है (जैसे कि एनओपी स्लेज के भीतर कोई स्थान)।[28] माइक्रोसॉफ्ट ने आंशिक अधिलेखन की इस कमजोरी को दूर करने के लिए अपनी एन्कोडिंग योजना में यादृच्छिक रोटेशन जोड़ा।[29]

निष्पादन योग्य स्थान सुरक्षा

निष्पादन योग्य स्थान सुरक्षा बफ़र अधिकता सुरक्षा के लिए दृष्टिकोण है जो ढेर या ढेर पर कोड के निष्पादन को रोकता है। अटैकर किसी प्रोग्राम की मेमोरी में मनमाना कोड डालने के लिए बफ़र अधिकता का उपयोग कर सकता है, लेकिन निष्पादन योग्य स्थान सुरक्षा के साथ, उस कोड को निष्पादित करने का कोई भी प्रयास अपवाद का कारण बनेगा।

कुछ सीपीयू एनएक्स बिट (कोई निष्पादन नहीं) या एक्सडी बिट (निष्पादित अक्षम) नामक सुविधा का समर्थन करते हैं, जो सॉफ्टवेयर के संयोजन के साथ पेजिंग (जैसे स्टैक और ढेर वाले) को पढ़ने योग्य और लिखने योग्य के रूप में चिह्नित करने के लिए उपयोग किया जा सकता है।

कुछ यूनिक्स ऑपरेटिंग सिस्टम (जैसे ओपनबीएसडी, मैकओएस) निष्पादन योग्य स्थान सुरक्षा (जैसे W^X) के साथ शिप होते हैं। कुछ वैकल्पिक पैकेजों में सम्मलित हैं:

माइक्रोसॉफ्ट विंडोज़ के नए संस्करण भी निष्पादन योग्य स्थान सुरक्षा का समर्थन करते हैं, जिसे डेटा निष्पादन रोकथाम कहा जाता है।[33] मालिकाना सॉफ़्टवेयर ऐड-ऑन में सम्मलित हैं:

  • बफ़र शील्ड[34]
  • स्टैक डिफेंडर[35]

निष्पादन योग्य अंतरिक्ष सुरक्षा सामान्यतः रिटर्न-टू-लिबक अटैक्स, या किसी अन्य अटैक के विरुद्ध सुरक्षा नहीं करती है जो अटैकरों के कोड के निष्पादन पर भरोसा नहीं करती है। चूंकि, एएसएलआर का उपयोग करने वाले 64-बिट सिस्टम पर, जैसा कि नीचे वर्णित है, निष्पादन योग्य स्थान सुरक्षा ऐसे अटैक्स को निष्पादित करना कहीं अधिक कठिन बना देती है।

पता स्थान लेआउट यादृच्छिकीकरण

एड्रेस स्थान लेआउट रेंडमाइजेशन (एएसएलआर) कंप्यूटर सुरक्षा सुविधा है जिसमें प्रमुख डेटा क्षेत्रों की स्थिति को व्यवस्थित करना सम्मलित है, जिसमें सामान्यतः निष्पादन योग्य आधार और लाइब्रेरी, बेतरतीब ढंग से प्रक्रिया के पता स्थान में हीप और स्टैक की स्थिति सम्मलित है।

अप्रत्यक्ष स्मृति पतों का रैंडमाइजेशन जिस पर फ़ंक्शंस और चर पाए जा सकते हैं, बफ़र अधिकता के एक्सप्लॉइट को और अधिक कठिन बना सकते हैं, लेकिन असंभव नहीं होता है। यह अटैकर को भिन्न-भिन्न सिस्टम के एक्सप्लॉइट के प्रयास के लिए मजबूर करता है, जो इंटरनेट वर्म्स के प्रयासों को नाकार्य कर देता है।[36] वर्चुअल एड्रेस स्थान में प्रक्रियाओं और पुस्तकालयों को रिबेसिंग करने के लिए समान लेकिन कम प्रभावी तरीका है।

गहरा पैकेट निरीक्षण

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

पैकेट स्कैनिंग प्रभावी तरीका नहीं है क्योंकि यह केवल ज्ञात अटैक्स को रोक सकता है और ऐसे कई तरीके हैं जिनसे एनओपी-स्लेज को एन्कोड किया जा सकता है। अटैकरों द्वारा उपयोग किया जाने वाला शेलकोड अक्षरांकीय रूपान्तरण या स्वतः संशोधन ह्यूरिस्टिक पैकेट स्कैनर और घुसपैठ की जांच प्रणालियों द्वारा पहचान से बचने के लिए बनाया जा सकता है।

परीक्षण

बफ़र अधिकता को जाँचे और प्राकृतिक रूप से आने वाले बग्स पर पैचिंग करने से बफ़र अधिकता को रोका जा सकता है। उन्हें खोजने के लिए सामान्य स्वचालित तकनीक फ़ज़िंग है।[37] कोर केस परीक्षण बफ़र अंतर्वाह को भी उजागर कर सकता है जैसा कि स्थैतिक विश्लेषण हो सकता है। [38] बार संभावित बफ़र अतिप्रवाह का पता चलने के बाद, इसे पैच किया जाना चाहिए; यह परीक्षण दृष्टिकोण को सॉफ्टवेयर के लिए उपयोगी बनाता है जो विकास में है, लेकिन लीगेसी सॉफ़्टवेयर के लिए कम उपयोगी है जो अब अनुरक्षित या समर्थित नहीं है।

इतिहास

बफ़र अधिकता को 1972 के प्रारंभ में आंशिक रूप से इसे समझा गया तथा सार्वजनिक रूप से अभिलेखित किया गया, जब कम्प्यूटर सुरक्षा प्रौद्योगिकी नियोजन अध्ययन ने इस तकनीक को प्रस्तुत किया तथा इस फंक्शन को निष्पादित करने वाला स्रोत कोड और गंतव्य पता को ठीक से जाँचा नहीं जाता है, मॉनिटर के हिस्से को उपयोगकर्ता द्वारा मड़ने की अनुमति दी जाती है। इसका उपयोग मॉनिटर में कोड इंजेक्ट करने के लिए किया जा सकता है जो उपयोगकर्ता को मशीन के नियंत्रण को जब्त करने की अनुमति देता है।[39] आज के समय में, मॉनिटर को कर्नेल के रूप में संदर्भित किया जाता है।

भारत में सबसे पहले से प्रलेखित बफ़र अधिप्रवाह का शत्रुतापूर्ण एक्सप्लॉइट 1988 में हुआ था। यह मॉरिस वर्म द्वारा इंटरनेट पर खुद को प्रचारित करने के लिए उपयोग किए जाने वाले कई कारनामों में से था। एक्सप्लॉइट किया गया प्रोग्राम यूनिक्स पर फिंगर नामक सेवा थी।[40] इसके पश्चात 1995 में, थॉमस लोपेटिक ने बफ़र अधिप्रवाह को स्वतंत्र रूप से पुनः खोज लिया और बगट्रेक सुरक्षा मेलिंग सूची में अपने निष्कर्ष को प्रकाशित किए।[41] साल बाद, 1996 में, एलियास लेवी (जिसे एलेफ वन के नाम से भी जाना जाता है) ने फ्रैक पत्रिका में "स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट" पेपर प्रकाशित किया,[42] स्टैक-आधारित बफ़र अधिकता भेद्यताओं का एक्सप्लॉइट करने के लिए चरण-दर-चरण परिचय होता है।

तब से कम-से-कम दो प्रमुख इंटरनेट वर्म्स बफ़र अधिकता का फायदा उठा चुके हैं जिससे की बड़ी संख्या में प्रणालियों के साथ समझौता हो सके। वर्ष 2001 में, कोड रेड वर्म ने माइक्रोसॉफ्ट की इंटरनेट सूचना सेवाओं (आईआईएस) 5.0 में बफ़र अधिकता का उपयोग किया था।[43] और 2003 में एसक्यूएल स्लैमर वर्म ने माइक्रोसॉफ्ट एसक्यूएल सर्वर 2000 चलाने वाली मशीनों के साथ समझौता किया गया था।[44]

वर्ष 2003 में लाइसेंस प्राप्त एक्सबॉक्स गेम्स में उपलब्ध बफ़र अधिकता का उपयोग लाइसेंस रहित सॉफ्टवेयर को अनुमति देने के लिए किया गया है, होमब्रू खेलों सहित, कंसोल पर हार्डवेयर संशोधनों की आवश्यकता के बिना, मोडचिप्स के रूप में जाना जाता है।[45] पीएस2 स्वतंत्रता का लाभ उठाने से प्लेस्टेशन 2 प्राप्त करने के लिए बफ़र अधिकता का भी प्रयोग किया जाता है। द लीजेंड ऑफ ज़ेल्डा: ट्वाइलाइट प्रिंसेस में बफ़र अधिकता का उपयोग करते हुए ट्वाइलाइट हैक ने डब्ल्यूआईआई के साथ भी ऐसा ही किया था।

यह भी देखें


संदर्भ

  1. {{#section:Template:Ref RFC/db/49|rfc4949ref}} {{#section:Template:Ref RFC/db/49|rfc4949status}}.
  2. "CORE-2007-0219: OpenBSD का IPv6 mbufs रिमोट कर्नेल बफर ओवरफ्लो". Retrieved 2007-05-15.
  3. "मेटास्प्लोइट ओपकोड डेटाबेस". Archived from the original on 12 May 2007. Retrieved 2007-05-15.
  4. "Microsoft तकनीक सुरक्षा बुलेटिन MS04-028". Microsoft. Archived from the original on 2011-08-04. Retrieved 2007-05-15.
  5. "यूनिकोड विस्तारित स्ट्रिंग्स में मनमाना शेलकोड बनाना" (PDF). Archived from the original (PDF) on 2006-01-05. Retrieved 2007-05-15.
  6. Vangelis (2004-12-08). "Stack-based Overflow Exploit: Introduction to Classical and Advanced Overflow Technique". Wowhacker via Neworder. Archived from the original (text) on August 18, 2007. {{cite journal}}: Cite journal requires |journal= (help)
  7. Balaban, Murat. "Buffer Overflows Demystified" (text). Enderunix.org. {{cite journal}}: Cite journal requires |journal= (help)
  8. Akritidis, P.; Evangelos P. Markatos; M. Polychronakis; Kostas D. Anagnostakis (2005). "STRIDE: Polymorphic Sled Detection through Instruction Sequence Analysis." (PDF). Proceedings of the 20th IFIP International Information Security Conference (IFIP/SEC 2005). IFIP International Information Security Conference. Archived from the original (PDF) on 2012-09-01. Retrieved 2012-03-04.
  9. Klein, Christian (September 2004). "Buffer Overflow" (PDF). Archived from the original (PDF) on 2007-09-28. {{cite journal}}: Cite journal requires |journal= (help)
  10. Shah, Saumil (2006). "Writing Metasploit Plugins: from vulnerability to exploit" (PDF). Hack In The Box. Kuala Lumpur. Retrieved 2012-03-04.
  11. Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-M (PDF). Intel Corporation. May 2007. pp. 3–508. Archived from the original (PDF) on 2007-11-29.
  12. Alvarez, Sergio (2004-09-05). "Win32 Stack BufferOverFlow Real Life Vuln-Dev Process" (PDF). IT Security Consulting. Retrieved 2012-03-04. {{cite journal}}: Cite journal requires |journal= (help)
  13. Ukai, Yuji; Soeder, Derek; Permeh, Ryan (2004). "Environment Dependencies in Windows Exploitation". BlackHat Japan. Japan: eEye Digital Security. Retrieved 2012-03-04.
  14. 14.0 14.1 https://www.owasp.org/index.php/Buffer_OverflowsBuffer Overflows article on OWASP Archived 2016-08-29 at the Wayback Machine
  15. "वेक्टर :: पर - सी ++ संदर्भ". Cplusplus.com. Retrieved 2014-03-27.
  16. "संग्रहीत प्रति". wiretap.area.com. Archived from the original on 5 May 2001. Retrieved 6 June 2022.
  17. "द बेटर स्ट्रिंग लाइब्रेरी".
  18. "वीएसटीआर होमपेज". Archived from the original on 2017-03-05. Retrieved 2007-05-15.
  19. "इरविन होमपेज". Retrieved 2007-05-15.
  20. International Organization for Standardization (2007). "सूचना प्रौद्योगिकी - प्रोग्रामिंग भाषाएं, उनके वातावरण और सिस्टम सॉफ्टवेयर इंटरफेस - सी लाइब्रेरी के विस्तार - भाग 1: बाउंड-चेकिंग इंटरफेस". ISO Online Browsing Platform.
  21. "सीईआरटी सुरक्षित कोडिंग पहल". Archived from the original on December 28, 2012. Retrieved 2007-07-30.
  22. "FSF.org पर लिबसेफ". Retrieved 2007-05-20.
  23. "स्टैकगार्ड: कोवान एट अल द्वारा स्वचालित अनुकूली जांच और बफर-ओवरफ्लो हमलों की रोकथाम।" (PDF). Archived (PDF) from the original on 2022-10-09. Retrieved 2007-05-20.
  24. "X.ORG पर प्रोपुलिस". Archived from the original on 12 February 2007. Retrieved 2007-05-20.
  25. "Windows हार्डवेयर-प्रबलित डेटा निष्पादन रोकथाम को दरकिनार करना". Archived from the original on 2007-04-30. Retrieved 2007-05-20.
  26. "12वीं USENIX सुरक्षा संगोष्ठी - तकनीकी पेपर". www.usenix.org. Retrieved 3 April 2018.
  27. "पॉइंटर सबटरफ्यूज से बचाव (किंडा!)". msdn.com. Archived from the original on 2010-05-02. Retrieved 3 April 2018.
  28. "USENIX - द एडवांस्ड कंप्यूटिंग सिस्टम्स एसोसिएशन" (PDF). www.usenix.org. Archived (PDF) from the original on 2022-10-09. Retrieved 3 April 2018.
  29. "पॉइंटर सबटरफ्यूज (Redux) से बचाव". msdn.com. Archived from the original on 2009-12-19. Retrieved 3 April 2018.
  30. "पैक्स: पैक्स टीम का होमपेज". Retrieved 2007-06-03.
  31. "करनेलट्रॉप.ऑर्ग". Archived from the original on 2012-05-29. Retrieved 2007-06-03.
  32. "ओपनवॉल लिनक्स कर्नेल पैच 2.4.34-ओउ1". Archived from the original on 2012-02-19. Retrieved 2007-06-03.
  33. "Microsoft तकनीक: डेटा निष्पादन रोकथाम". Archived from the original on 2006-06-22. Retrieved 2006-06-30.
  34. "बफरशील्ड: विंडोज के लिए बफर ओवरफ्लो शोषण की रोकथाम". Retrieved 2007-06-03.
  35. "एनजीएसईसी स्टैक डिफेंडर". Archived from the original on 2007-05-13. Retrieved 2007-06-03.
  36. "PaX GRSecurity.net पर". Retrieved 2007-06-03.
  37. "शोषक - सुरक्षा जानकारी और ट्यूटोरियल". Retrieved 2009-11-29.
  38. Larochelle, David; Evans, David (13 August 2001). "संभावित बफ़र ओवरफ़्लो भेद्यताओं का सांख्यिकीय रूप से पता लगाना". USENIX Security Symposium. 32.
  39. "कंप्यूटर सुरक्षा प्रौद्योगिकी योजना अध्ययन" (PDF). p. 61. Archived from the original (PDF) on 2011-07-21. Retrieved 2007-11-02.
  40. "डोन सीले, यूटा विश्वविद्यालय द्वारा "ए टूर ऑफ़ द वर्म"". Archived from the original on 2007-05-20. Retrieved 2007-06-03.
  41. "Bugtraq सुरक्षा मेलिंग सूची संग्रह". Archived from the original on 2007-09-01. Retrieved 2007-06-03.
  42. "एलेफ वन द्वारा "स्मैशिंग द स्टैक फॉर फन एंड प्रॉफिट"". Retrieved 2012-09-05.
  43. "ईआई डिजिटल सुरक्षा". Retrieved 2007-06-03.
  44. "Microsoft तकनीक सुरक्षा बुलेटिन MS02-039". Microsoft. Archived from the original on 2008-03-07. Retrieved 2007-06-03.
  45. "हैकर बिना मॉड-चिप के Xbox सुरक्षा को तोड़ देता है". Archived from the original on 2007-09-27. Retrieved 2007-06-03.


बाहरी कड़ियाँ