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

From Vigyanwiki
No edit summary
No edit summary
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|एक सॉफ्टवेयर बफ़र अधिकता का विजुअलाइजेशन। डेटा ए में लिखा गया है, लेकिन ए के भीतर फिट होने के लिए बहुत बड़ा है, इसलिए यह बी में बहता है।]]


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


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


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


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


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


=== उदाहरण ===
=== उदाहरण ===
{{further|topic=स्टैक आधारित ओवरफ्लो|स्टैक बफर ओवरफ़्लो}}
{{further|topic=स्टैक आधारित अधिकता|स्टैक बफर अधिकता}}


'''सी''' (प्रोग्रामिंग लैंग्वेज) में व्यक्त निम्नलिखित उदाहरण में, कार्यक्रम में दो चर होते हैं जो स्मृति में आसन्न होते हैं: 8-बाइट-लंबा स्ट्रिंग बफर, '''ए''', और दो-बाइट बड़ा-एंडियन पूर्णांक, '''बी'''।<syntaxhighlight lang="c">
'''सी''' (प्रोग्रामिंग लैंग्वेज) में व्यक्त निम्नलिखित उदाहरण में, कार्यक्रम में दो चर होते हैं जो स्मृति में आसन्न होते हैं: 8-बाइट-लंबा स्ट्रिंग बफ़र , '''ए''', और दो-बाइट बड़ा-एंडियन पूर्णांक, '''बी'''।<syntaxhighlight lang="c">
char          A[8] = "";
char          A[8] = "";
unsigned short B    = 1979;
unsigned short B    = 1979;
Line 34: Line 34:
| 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"}} '''ए''' बफर में [[एएससीआईआई]] एन्कोडिंग के साथ।<syntaxhighlight lang="c">
अब, कार्यक्रम [[अशक्त-समाप्त स्ट्रिंग]] को संग्रहीत करने का प्रयास करता है {{code|"excessive"}} '''ए''' बफ़र में [[एएससीआईआई]] एन्कोडिंग के साथ।<syntaxhighlight lang="c">
strcpy(A, "excessive");
strcpy(A, "excessive");
</syntaxhighlight>{{code|"excessive"}} 9 अक्षर लंबा है और नल टर्मिनेटर सहित 10 बाइट्स को एन्कोड करता है, लेकिन A केवल 8 बाइट्स ले सकता है। स्ट्रिंग की लंबाई की जांच करने में विफल होने पर, यह B के मान को भी अधिलेखित कर देता है:
</syntaxhighlight>{{code|"excessive"}} 9 अक्षर लंबा है और नल टर्मिनेटर सहित 10 बाइट्स को एन्कोड करता है, लेकिन A केवल 8 बाइट्स ले सकता है। स्ट्रिंग की लंबाई की जांच करने में विफल होने पर, यह B के मान को भी अधिलेखित कर देता है:
Line 55: Line 55:
आबंटित मेमोरी के अंत के बाद डेटा लिखना कभी-कभी ऑपरेटिंग सिस्टम द्वारा प्रक्रिया को समाप्त करने वाली [[विखंडन दोष]] त्रुटि उत्पन्न करने के लिए पता लगाया जा सकता है।
आबंटित मेमोरी के अंत के बाद डेटा लिखना कभी-कभी ऑपरेटिंग सिस्टम द्वारा प्रक्रिया को समाप्त करने वाली [[विखंडन दोष]] त्रुटि उत्पन्न करने के लिए पता लगाया जा सकता है।


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


== शोषण ==
== एक्सप्लॉइट ==


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


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


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


*प्रोग्राम के बर्ताव को बदलने के लिए, लोकल चर पर लिख कर, जो स्टैक के कॉलोसिव बफर के निकट स्थित होता है।
*प्रोग्राम के बर्ताव को बदलने के लिए, लोकल चर पर लिख कर, जो स्टैक के कॉलोसिव बफ़र के निकट स्थित होता है।
*सामान्यतः अटैकर द्वारा चयनित कोड को इंगित करने के लिए स्टैक फ्रेम में रिटर्न पता को अधिलेखित करके शेलकोड कहा जाता है। फ़ंक्शन रिटर्न मिलने के बाद, निष्पादन अटैकर के शेलकोड पर फिर से शुरू होगा।
*सामान्यतः अटैकर द्वारा चयनित कोड को इंगित करने के लिए स्टैक फ्रेम में रिटर्न पता को अधिलेखित करके शेलकोड कहा जाता है। फ़ंक्शन रिटर्न मिलने के बाद, निष्पादन अटैकर के शेलकोड पर फिर से शुरू होगा।
*शेलकोड को इंगित करने के लिए फंक्शन सूचक<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://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>
अटैकर इन कारनामों में से का उपयोग करने के लिए डेटा का डिजाइन करता है, फिर इस डेटा को सुभेद्य कोड द्वारा प्रयोक्ता को प्रदत्त बफ़र में रख देता है। यदि स्टैक बफ़र अधिकता को प्रभावित करने के लिए उपयोग किए जाने वाले उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा का पता अप्रत्याशित है, तो रिमोट कोड निष्पादन के कारण स्टैक बफ़र अधिकता का एक्सप्लॉइट करना और अधिक कठिन हो जाता है। तकनीक जिसका प्रयोग बफ़र अधिप्रवाह के दोहन हेतु किया जा सकता है उसे "ट्रम्पोलिनिंग" कहा जाता है। उस तकनीक में, अटैकर कमज़ोर स्टैक बफ़र में सूचक खोज लेगा और उसके शेलकोड की उस संकेतक के सापेक्ष स्थिति की गणना करेगा। फिर, वे स्मृति में पहले से उपलब्ध निर्देश पर कूदने के लिए ओवरराइट का उपयोग करेंगे जो दूसरी छलांग लगाएगा, इस बार सूचक के सापेक्ष; वह दूसरी छलांग शेलकोड में शाखा निष्पादन करेगी। उपयुक्त निर्देश अधिकांशतः बड़े कोड में उपलब्ध होते हैं। उदाहरण के लिए, मेटास्प्लोइट [[प्रोजेक्ट]] उपयुक्त [[ऑपकोड]] का डेटाबेस रखता है, चूंकि यह केवल विंडोज ऑपरेटिंग सिस्टम में पाए जाने वाले को सूचीबद्ध करता है।<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.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> सहित, भेद्यता के खतरे को प्रकटीकरणकर्ताओं द्वारा केवल सेवा से इनकार के रूप में गलत तरीके से प्रस्तुत किया गया है जब वास्तव में स्वैच्छिक कोड का दूरस्थ निष्पादन संभव है।  
बफ़र में हेर-फेर, जो उसके पढ़ने या निष्पादित करने से पहले आता है, एक्सप्लॉइट के प्रयास की विफलता का कारण बन सकता है। इन हस्तक्षेपों से एक्सप्लॉइट के खतरे को कम किया जा सकता है लेकिन संभव है कि यह असंभव न हो। जोड़-तोड़ में ऊपर या निचले भाग में रूपांतरण, [[मेटचार्टर्स]] को हटाने और अल्फान्यूमेरिक तारों को फ़िल्टर करने का भी समावेश हो सकता है। चूंकि, इन फ़िल्टर और जोड़-तोड़ को बायपास करने के लिए तकनीक उपलब्ध है; [[अल्फ़ान्यूमेरिक शेलकोड]], [[बहुरूपी कोड]], [[स्व-संशोधित कोड]] और रिटर्न-टू-लिबक अटैक होते है। अंतर्वेधन संसूचन पद्धति द्वारा संसूचन से बचने के लिए भी उसी विधि का प्रयोग किया जा सकता है। कुछ स्थिति में, जहां कोड को [[यूनिकोड]] में परिवर्तित किया जाता है,<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> सहित, भेद्यता के खतरे को प्रकटीकरणकर्ताओं द्वारा केवल सेवा से इनकार के रूप में गलत तरीके से प्रस्तुत किया गया है जब वास्तव में स्वैच्छिक कोड का दूरस्थ निष्पादन संभव है।  


=== शोषण की व्यावहारिकता ===
=== एक्सप्लॉइट की व्यावहारिकता ===


वास्तविक दुनिया में कारनामों में कई चुनौतियों का सामना करने के लिए मज़बूती से संचालित कारनामों पर काबू पाने की जरूरत है। इन कारकों में पतों में अशक्त बाइट्स, शेलकोड के स्थान में परिवर्तनशीलता, वातावरण के बीच अंतर और संचालन में विभिन्न प्रति-उपाय सम्मलित हैं।  
वास्तविक दुनिया में कारनामों में कई चुनौतियों का सामना करने के लिए मज़बूती से संचालित कारनामों पर काबू पाने की जरूरत है। इन कारकों में पतों में अशक्त बाइट्स, शेलकोड के स्थान में परिवर्तनशीलता, वातावरण के बीच अंतर और संचालन में विभिन्न प्रति-उपाय सम्मलित हैं।  
Line 92: Line 92:
[[File:nopsled.svg|right|thumb|200px|स्टैक पर एनओपी-स्लेज पेलोड का चित्रण।]]
[[File:nopsled.svg|right|thumb|200px|स्टैक पर एनओपी-स्लेज पेलोड का चित्रण।]]


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


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


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


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>
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]] फ़ंक्शंस प्रदान करती है, लेकिन ये पूर्ण सुरक्षित लाइब्रेरी कार्यान्वयनों की तुलना में अधिक सीमित हैं।
अच्छी प्रकार से लिखित और परीक्षण किए गए सार डेटा प्रकार पुस्तकालय जो केंद्रीकृत और स्वचालित रूप से बफ़र प्रबंधन करते हैं, जिसमें सीमा की जाँच भी सम्मलित है, बफ़र अधिकता की घटना और प्रभाव को कम कर सकते हैं। इन भाषाओं में दो मुख्य बिल्डिंग-ब्लॉक डेटा प्रकार जिनमें सामान्यतः बफ़र अधिकता होता है, स्ट्रिंग्स और एरेज़ हैं; इस प्रकार, इन डेटा प्रकारों में बफ़र अधिकता को रोकने वाले पुस्तकालय आवश्यक कवरेज का विशाल बहुमत प्रदान कर सकते हैं। फिर भी, इन सुरक्षित पुस्तकालयों का सही ढंग से उपयोग करने में विफलता के परिणामस्वरूप बफ़र अधिकता और अन्य भेद्यताएं हो सकती हैं; और स्वाभाविक रूप से, पुस्तकालय में कोई भी [[सॉफ्टवेयर बग]] अपने आप में संभावित भेद्यता है। सुरक्षित लाइब्रेरी कार्यान्वयन में द बेटर स्ट्रिंग लाइब्रेरी सम्मलित है,<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>
सितंबर 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|बफर अतिप्रवाह संरक्षण}}
{{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://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>
माइक्रोसॉफ्ट का [[डेटा निष्पादन प्रतिबंध]] (डीइपी) मोड का कार्यान्वयन स्पष्ट रूप से [[संरचित अपवाद हैंडलर]] (एसइएच) के पॉइंटर को अधिलेखित होने से बचाता है।<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> माइक्रोसॉफ्ट ने आंशिक अधिलेखन की इस कमजोरी को दूर करने के लिए अपनी एन्कोडिंग योजना में यादृच्छिक रोटेशन जोड़ा।<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|निष्पादन योग्य अंतरिक्ष सुरक्षा}}


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


कुछ सीपीयू एनएक्स बिट (कोई निष्पादन नहीं) या एक्सडी बिट (निष्पादित अक्षम) नामक सुविधा का समर्थन करते हैं, जो सॉफ्टवेयर के संयोजन के साथ [[पेजिंग]] (जैसे स्टैक और ढेर वाले) को पढ़ने योग्य और लिखने योग्य के रूप में चिह्नित करने के लिए उपयोग किया जा सकता है लेकिन नहीं निष्पादन योग्य।
कुछ सीपीयू एनएक्स बिट (कोई निष्पादन नहीं) या एक्सडी बिट (निष्पादित अक्षम) नामक सुविधा का समर्थन करते हैं, जो सॉफ्टवेयर के संयोजन के साथ [[पेजिंग]] (जैसे स्टैक और ढेर वाले) को पढ़ने योग्य और लिखने योग्य के रूप में चिह्नित करने के लिए उपयोग किया जा सकता है लेकिन नहीं निष्पादन योग्य।
Line 150: Line 150:
माइक्रोसॉफ्ट विंडोज़ के नए संस्करण भी निष्पादन योग्य स्थान सुरक्षा का समर्थन करते हैं, जिसे डेटा निष्पादन रोकथाम कहा जाता है।<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-बिट]] सिस्टम पर, जैसा कि नीचे वर्णित है, निष्पादन योग्य स्थान सुरक्षा ऐसे अटैक्स को निष्पादित करना कहीं अधिक कठिन बना देती है।
Line 159: Line 159:
एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) कंप्यूटर सुरक्षा सुविधा है जिसमें प्रमुख डेटा क्षेत्रों की स्थिति को व्यवस्थित करना सम्मलित है, जिसमें सामान्यतः निष्पादन योग्य आधार और लाइब्रेरी, हीप और स्टैक की स्थिति सम्मलित है, बेतरतीब ढंग से प्रक्रिया के पता स्थान में।
एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) कंप्यूटर सुरक्षा सुविधा है जिसमें प्रमुख डेटा क्षेत्रों की स्थिति को व्यवस्थित करना सम्मलित है, जिसमें सामान्यतः निष्पादन योग्य आधार और लाइब्रेरी, हीप और स्टैक की स्थिति सम्मलित है, बेतरतीब ढंग से प्रक्रिया के पता स्थान में।


[[अप्रत्यक्ष स्मृति]] पतों का रैंडमाइजेशन जिस पर फ़ंक्शंस और चर पाए जा सकते हैं, बफर ओवरफ़्लो के शोषण को और अधिक कठिन बना सकते हैं, लेकिन असंभव नहीं। यह अटैकर को भिन्न-भिन्न सिस्टम के शोषण के प्रयास के लिए मजबूर करता है, जो इंटरनेट वर्म्स के प्रयासों को नाकाम कर देता है।<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|गहन पैकेट निरीक्षण}}
{{Main|गहन पैकेट निरीक्षण}}


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


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


=== परीक्षण ===
=== परीक्षण ===
बफर ओवरफ्लो को जाँचे और प्राकृतिक रूप से आने वाले बग्स पर पैचिंग करने से बफर ओवरफ्लो को रोका जा सकता है। उन्हें खोजने के लिए सामान्य स्वचालित तकनीक फ़ज़िंग है।<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 में एसक्यूएल स्लैमर वर्म ने माइक्रोसॉफ्ट एसक्यूएल सर्वर 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> पीएस2 [[स्वतंत्रता]] का लाभ उठाने से प्लेस्टेशन 2 के लिए इसे प्राप्त करने के लिए बफ़र अधिकता का भी प्रयोग किया गया। द लीजेंड ऑफ ज़ेल्डा: ट्वाइलाइट प्रिंसेस में बफ़र अधिकता का उपयोग करते हुए ट्वाइलाइट हैक ने डब्ल्यूआईआई के साथ भी ऐसा ही किया था।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 22:41, 29 January 2023

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

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

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

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

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

तकनीकी विवरण

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

उदाहरण

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

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

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

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

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

strcpy(A, "excessive");

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

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

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

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

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

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

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

एक्सप्लॉइट

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

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

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

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

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

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

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

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

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

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

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

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

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

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

एनओपी-स्लेज स्टैक बफ़र अधिकता के दोहन की सबसे पुरानी और सर्वाधिक प्रचलित तकनीक है।[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++ की मानक टेम्पलेट लाइब्रेरी (एसटीएल) ऐसे कंटेनर प्रदान करती है जो वैकल्पिक रूप से बाउंड चेक कर सकते हैं यदि प्रोग्रामर स्पष्ट रूप से डेटा एक्सेस करते समय चेक के लिए कॉल करता है। उदाहरण के लिए, ए vectorका सदस्य समारोह at() बाउंड चेक करता है और फेंकता है out_of_range सीमा जांच विफल होने पर अपवाद प्रबंधन।[15] चूंकि, 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.


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