2010-05-26 15 views
16

क्या किसी के पास विस्तृत विवरण है कि पूर्णांक का शोषण कैसे किया जा सकता है? मैं अवधारणा के बारे में बहुत कुछ पढ़ रहा हूं, और मैं समझता हूं कि यह क्या है, और मैं बफर ओवरफ्लो को समझता हूं, लेकिन मुझे समझ में नहीं आता कि कोई व्यक्ति विश्वसनीय रूप से स्मृति को कैसे संशोधित कर सकता है, या अनुप्रयोग प्रवाह को संशोधित करने के तरीके में, एक पूर्णांक को बड़ा करके इसकी परिभाषित स्मृति ....पूर्णांक अतिप्रवाह शोषण योग्य कैसे है?

+0

एक [संभावित शोषण जिसमें सरणी/मेमोरी मैनिपुलेशन शामिल नहीं है] (http://news.cnet.com/8301-17852_3-57341753-71/man-wins-$57-million-casino-says-software-glitch /)। उनकी जीत की राशि, 43 मिलियन यूरो संदिग्ध रूप से 2^32 = 42 9 4 9 672 9 6 के करीब है कि हम सभी परिचित हैं, और अत्यधिक सुझाव देते हैं कि गड़बड़ एक पूर्णांक अंडरफ्लो के कारण हो सकती है। जहां से अधिक प्रवाह एक पूर्णांक के तहत/- –

उत्तर

14

यह निश्चित रूप से शोषक है, लेकिन पाठ्यक्रम की स्थिति पर निर्भर करता है।

पुराने संस्करणों में एसएसएच का एक पूर्णांक ओवरफ़्लो था जिसे दूरस्थ रूप से शोषित किया जा सकता था। शोषण ने एसएसएच डिमन को आकार शून्य का हैशटेबल बनाने और स्मृति में ओवरराइट करने का कारण बना दिया जब उसने वहां कुछ मूल्यों को स्टोर करने का प्रयास किया। ssh पूर्णांक अतिप्रवाह पर

अधिक विवरण: पूर्णांक अतिप्रवाह पर http://www.kb.cert.org/vuls/id/945216

अधिक विवरण: http://projects.webappsec.org/w/page/13246946/Integer%20Overflows

+4

+1 अधिक जानकारी यहां http://www.owasp.org/index.php/Integer_overflow – Shaji

+1

है के रूप में उदाहरण ईरा बैक्सटर द्वारा नीचे की व्याख्या, यह ऐसा एक विशिष्ट स्थिति हो गया है जब हैश/बफर/सरणी आवंटित करता है जो आपको स्मृति तक पहुंचने की अनुमति देता है, तो आपके पास पहुंच नहीं होनी चाहिए, फिर एफपी की गणना करने का कोई तरीका नहीं होना चाहिए। – wuntee

+0

@wuntee: मुझे नहीं लगता कि ऐसा कोई बिंदु है जो इसे कम करने की कोशिश कर रहा है । प्रत्येक स्थिति अलग है। संसाधनपूर्ण लोग ऐसे तरीकों को ढूंढते हैं जो कल्पना भी नहीं कर सकते! मुझे नेटस्केप में याद है कि एक ही ऑफ-बाय-वन त्रुटि थी जो अंतरिक्ष के साथ एक बाइट को ओवरराइट करती थी। लोग इसका फायदा उठाने में सक्षम थे! –

3

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

int pricePerWidgetInCents = 3199; 
int numberOfWidgetsToBuy = int.Parse(/* some user input string */); 
int totalCostOfWidgetsSoldInCents = pricePerWidgetInCents * numberOfWidgetsToBuy; // KA-BOOM! 

// potentially much later 
int orderSubtotal = whatever + totalCostOfWidgetInCents; 

सब कुछ hunky-dory दिन तक है आप के लिए 671,299 विजेट बिक्री:

फिर

फिर, मैं यह है कि उपयोगकर्ता इनपुट को मान्य नहीं है (हालांकि यह उदाहरण काल्पनिक है) की तरह कोड के बहुत देखा है - $ 21,474,817.95। बॉस परेशान हो सकता है।

+1

हाँ, लेकिन आप अपने लाभ के लिए उपयोग कैसे करूँ कि? आप कैसे पैदा कर सकता है कि फ्रेम सूचक ओवरराइड करने के लिए - उदाहरण के लिए ... – wuntee

+0

एक बेहतर उदाहरण होगा: पूर्णांक arraySize = [कुछ उपयोगकर्ता इनपुट]; पूर्णांक सरणी [arraySize]; – wuntee

+3

आप इस उदाहरण का उपयोग नहीं कर सकते हैं फ्रेम सूचक ओवरराइड करने के लिए।हालांकि, आप इसे 42 मिलियन डॉलर चोरी करने के लिए उपयोग कर सकते हैं, जो अभी भी एक सुरक्षा समस्या का शोषण कर रहा है। –

11

मैंने आईबीएम 360/40 पर 60 के उत्तरार्ध में एपीएल/370 का उपयोग किया। एपीएल, जिसमें अनिवार्य रूप से सब कुछ बात एक बहुआयामी सरणी है भाषा है, और वहाँ, आदि सरणियों जोड़ तोड़, एन आयामों से एम आयामों को देगी सहित के लिए अद्भुत ऑपरेटर हैं

हैरानगी, एन आयाम की एक सरणी 1 के सूचकांक सीमा था। प्रत्येक अक्ष के लिए एक अलग सकारात्मक के साथ .k और कानूनी रूप से हमेशा 2^31 से कम था (32 बिट हस्ताक्षरित मशीन शब्द में सकारात्मक मान)। अब, एन आयामों की एक सरणी में स्मृति में असाइन किया गया स्थान है। एक अक्ष के लिए बहुत बड़ी अनुक्रमणिका का उपयोग करके एक सरणी स्लॉट तक पहुंचने का प्रयास एपीएल द्वारा ऊपरी बाउंड सरणी के खिलाफ चेक किया जाता है। और निश्चित रूप से यह एन आयामों की एक सरणी के लिए लागू किया गया जहां एन == 1.

एपीएल ने यह जांच नहीं की कि आपने आरएचओ (सरणी reshape) ऑपरेटर के साथ अविश्वसनीय रूप से बेवकूफ किया है या नहीं। एपीएल ने केवल अधिकतम 64 आयामों की अनुमति दी। तो, आप 1-64 आयाम की सरणी बना सकते हैं, और एपीएल ऐसा करेगा यदि सरणी आयाम 2^31 से कम थे। या, आप आयामों की सरणी बनाने का प्रयास कर सकते हैं। इस मामले में, एपीएल ने गुमराह किया, और आश्चर्यजनक रूप से एक 64 आयाम सरणी, वापस दिया लेकिन अक्ष आकारों को जांचने में विफल रहा। (यह प्रभावी रूप से है जहां "पूर्णांक ओवरफ़्लो हुआ")। इसका मतलब है कि आप 2^31 या उससे अधिक अक्ष आकारों के साथ एक सरणी बना सकते हैं ... लेकिन हस्ताक्षरित पूर्णांक के रूप में व्याख्या की जा रही है, उन्हें नकारात्मक संख्या के रूप में माना जाता था।

सही आरएचओ ऑपरेटर इन्सेंटेशन इस तरह के एक सरणी पर लागू होता है जिससे आयाम 1 को कम करने के लिए आयाम हो सकता है, इसे प्राप्त करें, "-1"। इस मैट्रिक्स को "वर्महोल" पर कॉल करें (आप देखेंगे कि क्यों पल में)। इस तरह की एक वर्महोल सरणी में मेमोरी में एक जगह है, बस किसी भी अन्य सरणी की तरह। लेकिन सभी सरणी एक्सेस ऊपरी बाउंड के खिलाफ चेक किए जाते हैं ... लेकिन सरणी बाध्य चेक द्वारा हस्ताक्षरित एपीएल द्वारा तुलना की जाती है। तो, आप वर्महोल [1], वर्महोले [2], ... वर्महोले [2^32-2] पर आपत्ति के बिना पहुंच सकते हैं। असल में, आप पूरी मशीन की मेमोरी तक पहुंच सकते हैं।

एपीएल में एक सरणी असाइनमेंट ऑपरेशन भी था, जिसमें आप एक मान के साथ सरणी भर सकते थे। वर्महोले [] < -0 इस प्रकार स्मृति के सभी शून्य।

मैंने केवल एक बार ऐसा किया, क्योंकि यह मेरी एपीएल वर्कस्पेस, एपीएल दुभाषिया युक्त स्मृति को मिटा देता है, और एपीएल के महत्वपूर्ण भाग को स्पष्ट करता है जो टाइमशेयरिंग सक्षम करता है (उन दिनों में यह उपयोगकर्ताओं से संरक्षित नहीं था) ... टर्मिनल रूम यांत्रिक रूप से बहुत शोर (हमारे पास 2741 सिलेक्ट्रिक एपीएल टर्मिनलों) की सामान्य स्थिति से लगभग 2 सेकंड में मूक चुप हो गया। ग्लास के माध्यम से कंप्यूटर रूम में मैं ऑपरेटर को 370 पर रोशनी पर चौंकाने वाला लग रहा था क्योंकि वे सभी बाहर गए थे। चारों ओर दौड़ने के बहुत सारे।

हालांकि उस समय मजाकिया था, मैंने अपना मुंह बंद कर दिया।

कुछ देखभाल के साथ, किसी ने मनमाने ढंग से ओएस के साथ छेड़छाड़ की हो सकती है।

+0

मैं निश्चित रूप से देख सकता हूं कि इसका लाभ कैसे उठा सकता है (क्योंकि आप मशीन की सभी मेमोरी एक्सेस कर सकते हैं)। मुझे लगता है कि विचार यह है कि यह सब विशिष्ट स्थिति पर निर्भर करता है - इसमें, एप्लिकेशन किसी सरणी के आवंटन की जांच नहीं करता है, जहां सरणी का आकार एक पूर्णांक है। मेरा दिमाग सरल 'बफर ओवरफ्लो' पर फंस गया था और सोच रहा था कि 'int x = y + z * w' होने का कोई तरीका था जहां y और z और w सभी उपयोगकर्ता परिभाषित थे, और उस कथन में किसी भी तरह स्मृति पर लिख सकता था एक विश्वसनीय फैशन में। – wuntee

+1

खैर, मेरे उदाहरण में एरे आवंटन पर * सीमा * एक सीमा जांच कर रहा है, लेकिन असल में सरणी में अतिप्रवाह होने से चेक को पराजित किया जाता है। आप अपना उदाहरण इस तरह काम कर सकते हैं: x = y + z; डेटा [एक्स] जहां एक्स ओवरफ्लो के लिए गणना। सी में, कोई शिकायत नहीं है; आप परिभाषा @ (और डेटा + एक्स) से मिलता है। यदि आप एक्स को कुछ भी (ओवरफ्लो द्वारा) पर सेट कर सकते हैं, तो आप कुछ भी एक्सेस कर सकते हैं। –

3

एक आम मामला कोड होगा जो बफर ओवरफ्लो के खिलाफ प्रदान किए जाने वाले इनपुट की संख्या मांगकर और फिर उस सीमा को लागू करने का प्रयास करके रोक देगा। ऐसी स्थिति पर विचार करें जहां मैं 2^30 + 10 पूर्णांक प्रदान करने का दावा करता हूं। प्राप्त करने वाली प्रणाली 4 * (2^30 + 10) = 40 बाइट्स (!) के बफर को आवंटित करती है। चूंकि स्मृति आवंटन सफल हुआ, मुझे जारी रखने की अनुमति है। 11 < 2^30 + 10 के बाद से, जब मैं अपना 11 वां इनपुट भेजता हूं तो इनपुट बफर चेक मुझे रोक नहीं पाएगा। फिर भी मैं वास्तव में आवंटित बफर ओवरफ्लो कर दूंगा।

2

मैं बस अपने मूल प्रश्न के बारे में जो कुछ भी पाया है उसे जोड़ना चाहता था।

कारणों से मुझे भ्रमित करने का कारण था क्योंकि मुझे पता है कि बफर ओवरफ्लो कैसे काम करता है, और यह समझ सकता है कि आप आसानी से इसका कैसे फायदा उठा सकते हैं। एक पूर्णांक ओवरफ़्लो एक अलग मामला है - आप मनमानी कोड जोड़ने के लिए पूर्णांक ओवरफ़्लो का उपयोग नहीं कर सकते हैं, और किसी एप्लिकेशन के प्रवाह में परिवर्तन को मजबूर कर सकते हैं।

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

उम्मीद है कि इससे मदद मिलती है।

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