2013-02-07 16 views
52

मैं अपने सिर को तोड़ रहा हूं और इस सवाल का जवाब देने वाला एक अच्छा स्रोत नहीं ढूंढ रहा हूं। मुझे पता है कि एक एनओपी स्लेज एक तकनीक है जो बफर ओवरफ्लो हमले में स्टैक यादृच्छिकता को रोकने के लिए प्रयोग की जाती है, लेकिन मैं अपने सिर को कैसे काम करता है इसके बारे में नहीं मिल सकता।एनओपी कैसे काम करता है?

इस विधि को स्पष्ट करने वाला एक साधारण उदाहरण क्या है?

128-बाइट नॉप स्लेज का मतलब क्या है?

+0

बस सोच रहा है कि व्यावहारिक अनुप्रयोग क्या हैं जिसके लिए आप इसे सीखने की योजना बना रहे हैं? –

+6

मैं एक सीई अंडरग्रेड हूं और ब्रायंट, ओहॉलरॉन पाठ्यपुस्तक सीएस: एपीपी में इस विषय के बारे में सीख रहा हूं। मैं अपने कॉलेज में आईटी सुरक्षा के लिए भी काम करता हूं, इसलिए यह मुझे रूचि देता है। – amorimluc

+4

यही एक सामाजिक अभियंता कहता है! ;) – DeepS1X

उत्तर

64

कुछ हमलों में प्रोग्राम को एक विशिष्ट पते पर कूदने और वहां से चलते रहना शामिल है। इंजेक्शन कोड को उस सटीक स्थान पर पहले किसी भी तरह लोड किया जाना चाहिए।

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

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

एक 128-बाइट एनओपी स्लेज सिर्फ 128 बाइट चौड़े एनओपी निर्देशों का एक समूह है।

नोट # 1: एनओपी (नो-ऑप्शन) एक निर्देश है जो अधिकांश (सभी?) आर्किटेक्चर में उपलब्ध है जो स्मृति और कुछ रनटाइम पर कब्जा करने के अलावा कुछ भी नहीं करता है।

नोट # 2: चर लंबाई लंबाई वाले आर्किटेक्चर में, एक एनओपी निर्देश आमतौर पर लंबाई में केवल एक बाइट होता है, इसलिए इसे सुविधाजनक निर्देश पैडिंग के रूप में उपयोग किया जा सकता है। दुर्भाग्य से, यह एनओपी स्लेज करने में भी आसान बनाता है।

+0

ठीक है, मुझे लगता है कि मुझे नॉप-स्लड्स का सारांश मिलता है। क्या कहीं ऐसा आप इंगित कर सकते हैं जो एक नॉप-स्लेज का असेंबली-कोड उदाहरण दिखाता है? – amorimluc

+0

नोप-स्लड्स अभी भी मेरे लिए थोड़ा सा सार हैं। एक उदाहरण वास्तव में मदद करेगा। – amorimluc

+10

@amorimluc वह उदाहरण मौजूद है, लेकिन यह लाइन 15 या उसके बाद वास्तव में उबाऊ हो जाता है ... –

0

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

Sidenote: 86 आर्किटेक्चर पर एनओपी अनुदेश हेक्स बाइट 0x90 इसलिए एक पूरा करने के बराबर है का फायदा उठाने के बफर कुछ इस तरह दिखाई दे सकता है:

| एनओपी स्लेज | शैलकोड | दोहराया वापसी पता |

देखकर मानो एनओपी स्लेज में पाया किसी भी पते पर EIP रजिस्टर अंक, यह जबकि प्रत्येक एनओपी अनुदेश, एक समय में एक को क्रियान्वित करने को बढ़ा देते हैं, तक यह अंत में shellcode

-1

तक पहुँच जाता है के संदर्भ में लिनक्स और सी, मुझे यकीन है कि '0x90' एनओपी स्लेज के बारे में जानकारी का एक महत्वपूर्ण हिस्सा है। कर्नेल शोषण पर किताबें सहायक होनी चाहिए!

+0

0x90 एक एकल बाइट एनओपी के लिए x86 ओपोड है। लिनक्स और सी पर काम करने वाले अन्य आर्किटेक्चर पर, एनओपी एक अलग बिट-पैटर्न है। –

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