2012-02-18 16 views
24

मान लीजिए कि एक सी # प्रोग्राम केवल प्रबंधित .NET कोड का उपयोग करता है, क्या उस प्रोग्राम के भीतर बफर ओवरफ़्लो सुरक्षा भेद्यता संभव है? यदि हां, तो ऐसी भेद्यता कैसे संभव होगी?क्या सी # में बफर ओवरफ्लो शोषण संभव है?

+0

शास्त्रीय अर्थ में बफर ओवरफ़्लो, या किसी भी प्रकार का बफर ओवरफ़्लो शोषण? – Dykam

+0

'अनचेक' और 'असुरक्षित' कीवर्ड देखें। –

+0

@ डिकम: एक शोषण के अर्थ में। – poke

उत्तर

43

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

बफर अतिप्रवाह के लिए कुछ संभावनाएं:

  1. unsafe कीवर्ड है, जो संकेत देता है का उपयोग करना। असुरक्षित कोड गलत होने के लिए जितना आसान है, सी या सी ++ में पॉइंटर आधारित कोड के रूप में।
  2. ऐसे Marshal वर्ग से तरीके के रूप में असुरक्षित एपीआई, का उपयोग करते हुए
  3. (मोनो केवल) आप सरणी सीमा जाँच (सुरक्षा बनाम प्रदर्शन व्यापार बंद)

भी कुछ अन्य तरीके हैं निष्क्रिय कर सकते हैं बफर ओवरफ्लो के अलावा स्मृति को भ्रष्ट करने के लिए।

  1. StructLayoutKind.Explicit
  2. गलत देशी इंटरॉप हस्ताक्षर

(क्रम में ही सी ++ में लिखा है, इसलिए क्रम में एक बग भी भ्रष्ट स्मृति या एक बफर अतिप्रवाह सकते हैं, लेकिन मुझे लगता है कि बाहर करने पर विचार इस प्रश्न के लिए दायरे का)

3

केवल तभी यदि आप unsafe कीवर्ड का उपयोग करते हैं।

3

एक पूर्ण अर्थ में, हाँ .NET रनटाइम में बग के कारण एक बफर शोषण संभव है। हालांकि .NET सबसे अंत उपयोगकर्ता कोड ('असुरक्षित' उपयोग को छोड़कर) को इस तरह की समस्याओं से रोकता है ताकि वास्तविक जीवन में यह कम जोखिम भरा हो।

वास्तविक जीवन में, इस तरह की अधिकांश समस्याएं मूल कोड (COM dlls आदि) से प्रबंधित कोड से आती हैं।

14

हाँ, असुरक्षित वातावरण में:

unsafe void bufferOverflow(string s) 
{ 
    char* ptr = stackalloc char[10]; 

    foreach (var c in s) 
    { 
     *ptr++ = c; // Bufferoverflow if s.Length > 10 
    } 
} 

"असुरक्षित कोड की अनुमति दें" यह संकलन करने के लिए जांच की जानी है।

आप एक सरणी के साथ पारंपरिक बफर-ओवरफ्लो नहीं कर सकते हैं। यह सरणी तक पहुंचने से पहले सीमा-जांच करेगा, जब तक कि यह (सीएलआर) गारंटी दे सके कि यह सुरक्षित है।

+2

+1। –

+1

यह कुछ हद तक गलत है - स्टैकलॉक आपको अतिप्रवाह बफर करने की अनुमति नहीं देगा। –

संबंधित मुद्दे