निष्पादन योग्य स्पेस सुरक्षा
कंप्यूटर सुरक्षा में, निष्पादन योग्य-स्थान सुरक्षा कंप्यूटर मेमोरी क्षेत्रों को गैर-निष्पादन योग्य के रूप में चिह्नित करती है, जैसे कि इन क्षेत्रों में मशीन कोड को निष्पादित करने का प्रयास एक अपवाद हैंडलिंग का कारण होगा। यह एनएक्स बिट (नो-एक्ज़ीक्यूट बिट) जैसी हार्डवेयर सुविधाओं का उपयोग करता है, या कुछ स्थितियोंमें उन सुविधाओं का सॉफ़्टवेयर अनुकरण करता है। चूंकि, एनएक्स बिट का अनुकरण या आपूर्ति करने वाली प्रौद्योगिकियां सामान्यतः पर एक औसत दर्जे का ओवरहेड लगाती हैं, जबकि हार्डवेयर-आपूर्ति वाले एनएक्स बिट का उपयोग करने से कोई औसत दर्जे का ओवरहेड नहीं होता है।
द बरोज़ लार्ज सिस्टम्स टैग्ड आर्किटेक्चर ने 1961 में इसकी प्रारंभ पर निष्पादन-योग्य अंतरिक्ष सुरक्षा के लिए हार्डवेयर समर्थन की प्रस्तुति की; वह क्षमता कम से कम 2006 तक इसके उत्तराधिकारियों में बनी रही। टैग की गई वास्तुकला के कार्यान्वयन में, स्मृति के प्रत्येक शब्द में एक संबद्ध, छिपा हुआ टैग बिट होता है जो इसे कोड या डेटा निर्दिष्ट करता है। इस प्रकार उपयोगकर्ता प्रोग्राम प्रोग्राम शब्द लिख या पढ़ भी नहीं सकते हैं, और डेटा शब्द निष्पादित नहीं किए जा सकते हैं।
यदि कोई ऑपरेटिंग सिस्टम मेमोरी के कुछ या सभी लिखने योग्य क्षेत्रों को गैर-निष्पादन योग्य के रूप में चिह्नित कर सकता है, तो यह कॉल स्टैक और डायनेमिक मेमोरी आवंटन मेमोरी क्षेत्रों को निष्पादन योग्य होने से रोकने में सक्षम हो सकता है। यह कुछ बफ़र अधिकता शोषण (कंप्यूटर सुरक्षा) को सफल होने से रोकने में मदद करता है, विशेष रूप से वे जो कोड को इंजेक्ट और निष्पादित करते हैं, जैसे कि सैसर (कंप्यूटर वर्म) और ब्लास्टर (कंप्यूटर वर्म) वर्म्स। ये हमले मेमोरी के कुछ हिस्से पर निर्भर करते हैं, सामान्यतः पर स्टैक, लिखने योग्य और निष्पादन योग्य दोनों होने के कारण; यदि यह नहीं है, तो हमला विफल हो जाता है।
ओएस कार्यान्वयन
कई ऑपरेटिंग सिस्टम निष्पादन योग्य अंतरिक्ष सुरक्षा नीति को लागू करते हैं या उपलब्ध कराते हैं। यहां वर्णानुक्रम में ऐसी प्रणालियों की एक सूची दी गई है, जिनमें से प्रत्येक में नई से पुरानी तकनीकों का क्रम दिया गया है।
कुछ तकनीकों के लिए, एक सारांश है जो प्रत्येक तकनीक द्वारा समर्थित प्रमुख विशेषताओं को बताता है। सारांश नीचे के रूप में संरचित है।
- हार्डवेयर समर्थित प्रोसेसर: (सीपीयू आर्किटेक्चर की अल्पविराम से अलग की गई सूची)
- एमुलेशन: (नहीं) या (आर्किटेक्चर इंडिपेंडेंट) या (सीपीयू आर्किटेक्चर की कोमा से अलग की गई सूची)
- अन्य समर्थित: (कोई नहीं) या (सीपीयू आर्किटेक्चर की अल्पविराम से अलग की गई सूची)
- मानक वितरण: (नहीं) या (हां) या (अल्पविराम से अलग की गई वितरणों की सूची या संस्करण जो प्रौद्योगिकी का समर्थन करते हैं)
- रिलीज की तारीख: (पहली रिलीज की तारीख)
आर्किटेक्चर इंडिपेंडेंट एम्यूलेटर की आपूर्ति करने वाली तकनीक उन सभी प्रोसेसर पर कार्य करेगी जो हार्डवेयर समर्थित नहीं हैं। अन्य समर्थित लाइन प्रोसेसर के लिए है जो कुछ ग्रे-एरिया विधि की अनुमति देती है, जहां एक स्पष्ट एनएक्स बिट मौजूद नहीं है, फिर भी हार्डवेयर किसी तरह से नकल करने की अनुमति देता है।
एंड्रॉइड
एंड्रॉइड (ऑपरेटिंग सिस्टम) 2.3 और बाद में, इसका समर्थन करने वाले आर्किटेक्चर में गैर-निष्पादन योग्य स्टैक और हीप सहित डिफ़ॉल्ट रूप से गैर-निष्पादन योग्य पृष्ठ हैं।
फ्रीबीएसडी
एनएक्स बिट के लिए प्रारंभिक समर्थन, एक्स86-64 और आईए-32 प्रोसेसर पर जो इसका समर्थन करते हैं, पहली बार 8 जून, 2004 को फ्रीबीएसडी -वर्तमान में दिखाई दिए। यह 5.3 रिलीज के बाद से फ्रीबीएसडी रिलीज़ में है।
लिनक्स
लिनक्स कर्नेल एक्स86-64 और आईए-32 प्रोसेसर पर एनएक्स बिट का समर्थन करता है जो इसका समर्थन करता है, जैसे एएमडी, इंटेल, ट्रांसमेटा और वीइए द्वारा बनाए गए आधुनिक 64-बिट प्रोसेसर। एक्स86-64 सीपीयू पर 64-बिट मोड में इस सुविधा के लिए समर्थन 2004 में एंडी क्लेन द्वारा जोड़ा गया था, और बाद में उसी वर्ष, इंगो मोलनार ने 64-बिट सीपीयू पर 32-बिट मोड में इसके लिए समर्थन जोड़ा। अगस्त 2004 में कर्नेल संस्करण 2.6.8 के जारी होने के बाद से ये विशेषताएं लिनक्स कर्नेल मेनलाइन का हिस्सा रही हैं।[4]
32-बिट एक्स86 कर्नेल पर एनएक्स बिट की उपलब्धता, जो 32-बिट एक्स86 सीपीयू और 64-बिट आईए-32-संगत सीपीयू दोनों पर चल सकती है, महत्वपूर्ण है क्योंकि 32-बिट एक्स86 कर्नेल सामान्य रूप से एनएक्स बिट की अपेक्षा नहीं करेगा। कि एक एक्स86-64 या आइए-64 आपूर्ति करता है; एनएक्स एनबलर पैच आश्वासन देता है कि ये कर्नेल मौजूद होने पर एनएक्स बिट का उपयोग करने का प्रयास करेंगे।
कुछ डेस्कटॉप लिनक्स वितरण, जैसे फेडोरा लिनक्स, उबंटू (ऑपरेटिंग सिस्टम) और ओपनएसयूएसई, अपने डिफ़ॉल्ट कर्नेल में डिफ़ॉल्ट रूप से हाईमेम 64 विकल्प को सक्षम नहीं करते हैं, जो कि 32-बिट मोड में एनएक्स बिट तक पहुंच प्राप्त करने के लिए आवश्यक है, क्योंकि भौतिक एनएक्स बिट का उपयोग करने के लिए भौतिक पता विस्तार मोड प्री-पेंटियम प्रो (पेंटियम एमएमएक्स समेत) और सेलेरॉन एम और पेंटियम एम प्रोसेसर पर एनएक्स समर्थन के बिना बूट विफलता का कारण बनता है। अन्य प्रोसेसर जो पीएई का समर्थन नहीं करते हैं वे हैं एएमडी के6 और पहले के संस्करण, ट्रांसमेटा क्रूसो, वीइए सी3 और पहले के संस्करण, और जीओड (प्रोसेसर) जीएक्स और एलएक्स। 4.0 से पुराने वीएमवेयर वर्कस्टेशन वर्जन, 4.0 से पुराने समानांतर कार्य केंद्र वर्जन और माइक्रोसॉफ्ट वर्चुअल पीसी और माइक्रोसॉफ्ट वर्चुअल सर्वर अतिथि पर पीएई का समर्थन नहीं करते हैं। फेडोरा कोर 6 और उबंटू 9.10 और बाद में कर्नेल-पीएई पैकेज प्रदान करता है जो पीएई और एनएक्स का समर्थन करता है।
एनएक्स मेमोरी सुरक्षा हमेशा उबंटू में किसी भी सिस्टम के लिए उपलब्ध रही है जिसमें हार्डवेयर का समर्थन करने के लिए और 64-बिट कर्नेल या 32-बिट सर्वर कर्नेल चलाया गया था। उबंटू 9.10 और बाद में 32-बिट पीएई डेस्कटॉप कर्नेल (लिनक्स-इमेज-जेनेरिक-पीएई), एनएक्स सीपीयू फीचर के साथ हार्डवेयर के लिए आवश्यक पीएई मोड भी प्रदान करता है। उन प्रणालियों के लिए जिनमें एनएक्स हार्डवेयर की कमी है, 32-बिट कर्नेल अब सॉफ़्टवेयर एमुलेशन के माध्यम से एनएक्स सीपीयू सुविधा का एक अनुमान प्रदान करते हैं जो स्टैक या हीप मेमोरी से चलने वाले हमलावरों के कई कारनामों को ब्लॉक करने में मदद कर सकता है।
कई रिलीज के लिए इस कार्यक्षमता का समर्थन करने वाले अन्य गैर-एक्स86 प्रोसेसर के लिए गैर-निष्पादित कार्यक्षमता भी मौजूद है।
एक्ज़ेक शील्ड
रेड हैट कर्नेल डेवलपर इंगो मोलनार ने 32-बिट एक्स86 सीपीयू पर एनएक्स कार्यक्षमता का अनुमान लगाने और उपयोग करने के लिए एक्सेक शील्ड नाम का एक लिनक्स कर्नेल पैच जारी किया। एक्सेक शील्ड पैच 2 मई, 2003 को लिनक्स कर्नेल मेलिंग सूची में जारी किया गया था, लेकिन बेस कर्नेल के साथ विलय के लिए इसे अस्वीकार कर दिया गया था क्योंकि इसमें अनुकरण के जटिल भागों को संभालने के लिए कोर कोड में कुछ दखल देने वाले परिवर्तन शामिल थे। एक्सेक शील्ड का पुराना सीपीयू समर्थन ऊपरी कोड खंड सीमा को ट्रैक करके एनएक्स अनुकरण का अनुमान लगाता है। यह संदर्भ स्विच के दौरान ओवरहेड के केवल कुछ चक्र लगाता है, जो सभी उद्देश्यों और उद्देश्यों के लिए अथाह है। एनएक्स बिट के बिना लीगेसी सीपीयू के लिए, एक्सेक शील्ड कोड सेगमेंट सीमा से नीचे के पेजों की सुरक्षा करने में विफल रहता है; उच्च मेमोरी को चिह्नित करने के लिए एक एमप्रोटेक्ट () कॉल, जैसे स्टैक, निष्पादन योग्य उस सीमा से नीचे की सभी मेमोरी को निष्पादन योग्य भी चिह्नित करेगा। इस प्रकार, इन स्थितियों में, एक्सेक शील्ड की योजनाएँ विफल हो जाती हैं। यह एक्ज़ेक शील्ड के लो ओवरहेड की लागत है। एक्सेक शील्ड दो निष्पादन योग्य और लिंक करने योग्य प्रारूप हेडर मार्किंग की जांच करता है, जो यह निर्धारित करता है कि स्टैक या हीप को एक्जीक्यूटेबल होने की जरूरत है या नहीं। इन्हें क्रमशः पीटी_जीएनयू _स्टैक और पीटी_जीएनयू _हीप कहा जाता है। एक्सेक शील्ड इन नियंत्रणों को बाइनरी एक्जीक्यूटेबल और लाइब्रेरी दोनों के लिए सेट करने की अनुमति देता है; यदि एक निष्पादन योग्य किसी पुस्तकालय को किसी दिए गए प्रतिबंध को शिथिल करने की आवश्यकता होती है, तो निष्पादन योग्य उस अंकन को प्राप्त करेगा और उस प्रतिबंध को शिथिल कर देगा।
- हार्डवेयर समर्थित प्रोसेसर: वह सब जो लिनक्स एनएक्स को सपोर्ट करता है
- अनुकरण: आईए-32 (एक्स86) और संगत पर कोड खंड सीमा का उपयोग करके एनएक्स सन्निकटन
- अन्य समर्थित: कोई नहीं
- मानक वितरण: फेडोरा कोर और रेड हैट एंटरप्राइज लिनक्स
- रिलीज की तारीख: 2 मई, 2003
पैक्स
पैक्स एनएक्स तकनीक एनएक्स कार्यक्षमता का अनुकरण कर सकती है, या हार्डवेयर एनएक्स बिट का उपयोग कर सकती है। पीएएक्स एक्स86 सीपीयू पर काम करता है जिसमें एनएक्स बिट नहीं है, जैसे कि 32-बिट एक्स86। लिनक्स कर्नेल (ऑपरेटिंग सिस्टम) अभी भी पीएएक्स (मई, 2007 तक) के साथ शिप नहीं करता है; पैच को मैन्युअल रूप से मर्ज किया जाना चाहिए।
पीएएक्स एनएक्स बिट एमुलेशन के दो विधि प्रदान करता है, जिन्हें सेग्मेक्सेक और पगीक्सेक कहा जाता है। सेग्मेक्सेक विधि एक औसत दर्जे का लेकिन कम ओवरहेड लगाती है, सामान्यतः पर 1% से कम, जो निष्पादन और डेटा एक्सेस के बीच अलगाव के लिए उपयोग की जाने वाली वर्चुअल मेमोरी मिररिंग के कारण होने वाला एक निरंतर स्केलर है।[5] सेग्मेक्सेक में कार्य के वर्चुअल एड्रेस स्पेस को आधा करने का भी प्रभाव होता है, जिससे कार्य को सामान्य रूप से कम मेमोरी तक पहुंचने की अनुमति मिलती है। यह तब तक कोई समस्या नहीं है जब तक कि कार्य को सामान्य पता स्थान के आधे से अधिक तक पहुंच की आवश्यकता न हो, जो दुर्लभ है। सेग्मेक्सेक प्रोग्राम को अधिक सिस्टम मेमोरी (अर्थात आरएएम) का उपयोग करने का कारण नहीं बनाता है, यह केवल प्रतिबंधित करता है कि वे कितना एक्सेस कर सकते हैं। 32-बिट सीपीयू पर, यह 3जीबी के बजाय 1.5जीबी हो जाता है।
पीएएक्स स्पीडअप के रूप में पगीक्सेक में एक्सेक शील्ड के सन्निकटन के समान एक विधि प्रदान करता है; हालाँकि, जब उच्च मेमोरी को निष्पादन योग्य के रूप में चिह्नित किया जाता है, तो यह विधि अपनी सुरक्षा खो देती है। इन स्थितियोंमें, पीएएक्स सीएस सीमा से नीचे के पृष्ठों की सुरक्षा के लिए पगीक्सेक द्वारा उपयोग की जाने वाली पुरानी, वेरिएबल-ओवरहेड विधि पर वापस आ जाता है, जो कुछ मेमोरी एक्सेस पैटर्न में काफी उच्च-ओवरहेड ऑपरेशन बन सकता है। जब हार्डवेयर एनएक्स बिट की आपूर्ति करने वाले सीपीयू पर पगीक्सेक विधि का उपयोग किया जाता है, तो हार्डवेयर एनएक्स बिट का उपयोग किया जाता है, इस प्रकार कोई महत्वपूर्ण ओवरहेड नहीं होता है।
पीएएक्स मेमोरी को उन विधि से चिह्नित करने से प्रोग्राम को रोकने के लिए मप्रोतेक्ट() प्रतिबंधों की आपूर्ति करता है जो एक संभावित शोषण_(कंप्यूटर_सुरक्षा) के लिए उपयोगी मेमोरी उत्पन्न करते हैं। इस नीति के कारण कुछ एप्लिकेशन कार्य करना बंद कर देते हैं, लेकिन इसे प्रभावित कार्यक्रमों के लिए अक्षम किया जा सकता है।
पीएएक्स प्रत्येक बाइनरी निष्पादन योग्य के लिए प्रौद्योगिकी के निम्नलिखित कार्यों पर व्यक्तिगत नियंत्रण की अनुमति देता है:
- पेजईएक्सईसी
- सेगमेक्सिक
- एमप्रोटेक्ट () प्रतिबंध
- ट्रैम्पोलिन (कंप्यूटिंग) अनुकरण
- यादृच्छिक निष्पादन योग्य आधार
- यादृच्छिक एमएमएपी () आधार
पीएएक्स पीटी_जीएनयू_स्टैक और पीटी_जीएनयू_हीप दोनों पर ध्यान नहीं देता। अतीत में, पीएएक्स के पास इन सेटिंग्स का सम्मान करने के लिए एक कॉन्फ़िगरेशन विकल्प था लेकिन सुरक्षा कारणों से उस विकल्प को हटा दिया गया था, क्योंकि इसे उपयोगी नहीं माना गया था। पीटी_जीएनयू_स्टैक के समान परिणाम सामान्य रूप से मप्रोतेक्ट() प्रतिबंधों को अक्षम करके प्राप्त किए जा सकते हैं, क्योंकि प्रोग्राम सामान्य रूप से मप्रोतेक्ट() लोड पर स्टैक करेगा। यह हमेशा सच नहीं हो सकता है; उन स्थितियों के लिए जहां यह विफल हो जाता है, केवल पगीक्सेक और सेग्मेक्सेक दोनों को अक्षम करने से सभी निष्पादन योग्य स्थान प्रतिबंधों को प्रभावी ढंग से हटा दिया जाएगा, कार्य को गैर-पीएएक्स सिस्टम के रूप में इसके निष्पादन योग्य स्थान पर समान सुरक्षा प्रदान करेगा।
- हार्डवेयर समर्थित प्रोसेसर: डीईसी अल्फा, एक्स86-64, आइए
- -64 , एमआईपीएस आर्किटेक्चर (32 और 64 बिट), पीए-आरआईएससी, पावरपीसी, स्पार्क
- अनुकरण: आईए-32 (एक्स86
- अन्य समर्थित: पावरपीसी (32 और 64 बिट), स्पार्क (32 और 64 बिट)
- मानक वितरण: अल्पाइन लिनक्स
- रिलीज की तारीख: 1 अक्टूबर 200
मैकोज़
इंटेल के लिए मैकओएस एप्पल द्वारा समर्थित सभी सीपीयू पर एनएक्स बिट का समर्थन करता है (मैक ओएस एक्स 10.4.4 से - पहला इंटेल रिलीज़ - बाद में)। मैक ओएस एक्स 10.4 केवल एनएक्स स्टैक सुरक्षा का समर्थन करता है। मैक ओएस एक्स 10.5 में, सभी 64-बिट एक्जीक्यूटेबल में एनएक्स स्टैक और हीप है; डब्ल्यू ^ एक्स सुरक्षा। इसमें एक्स86-64 (कोर 2 या बाद का संस्करण) और पावरपीसी 970 मैक पर 64-बिट पावरपीसी शामिल है।
नेटबीएसडी
नेटबीएसडी 2.0 और बाद में (9 दिसंबर, 2004) तक, इसका समर्थन करने वाले आर्किटेक्चर में गैर-निष्पादन योग्य स्टैक और हीप है।
आर्किटेक्चर जिनमें प्रति-पृष्ठ ग्रैन्युलैरिटी शामिल है: डीईसी अल्फा, एक्स86-64, पीए-आरआईएससी, आईए-32 (भौतिक पता एक्सटेंशन के साथ), पावरपीसी आईबीएम 4एक्सएक्स), सुपरएच एसएच-5, स्पार्क (एस एसयूएन -4एम, एसयूएन- 4डी), स्पार्क64.
आर्किटेक्चर जो केवल क्षेत्र ग्रैन्युलैरिटी के साथ इनका समर्थन कर सकते हैं वे हैं: i386 (पीएई के बिना), अन्य पावरपीसी (जैसे मैकपीपीसी)।
अन्य आर्किटेक्चर गैर-निष्पादन योग्य स्टैक या हीप से लाभान्वित नहीं होते हैं; नेटबीएसडी उन आर्किटेक्चर पर इन सुविधाओं की प्रस्तुति करने के लिए डिफ़ॉल्ट रूप से किसी सॉफ़्टवेयर एमुलेशन का उपयोग नहीं करता है।
ओपनबीएसडी
ओपनबीएसडी ऑपरेटिंग सिस्टम में एक तकनीक, जिसे डब्ल्यू ^ एक्स के रूप में जाना जाता है, लिखने योग्य पृष्ठों को डिफ़ॉल्ट रूप से उन प्रोसेसर पर गैर-निष्पादन योग्य के रूप में चिह्नित करती है जो इसका समर्थन करते हैं। 32-बिट एक्स86 प्रोसेसर पर, कोड सेगमेंट को निष्पादन योग्य स्थान सुरक्षा के कुछ स्तर प्रदान करने के लिए पता स्थान का केवल एक हिस्सा शामिल करने के लिए सेट किया गया है।
ओपनबीएसडी 3.3 को 1 मई, 2003 को भेज दिया गया था, और डब्ल्यू ^ एक्स को शामिल करने वाला पहला था।
- हार्डवेयर समर्थित प्रोसेसर: डीईसी अल्फा, एएमडी64, पीए-आरआईएससी, स्पार्क
- अनुकरण: आईए-32 (एक्स86)
- अन्य समर्थित: कोई नहीं
- मानक वितरण: हाँ
- रिलीज की तारीख: 1 मई, 2003
सोलारिस
सोलारिस (ऑपरेटिंग सिस्टम) ने सोलारिस 2.6 (1997) के बाद से स्पार्क प्रोसेसरों पर स्टैक निष्पादन को विश्व स्तर पर अक्षम करने का समर्थन किया है; सोलारिस 9 (2002) में, प्रति-निष्पादन योग्य आधार पर स्टैक निष्पादन को अक्षम करने के लिए समर्थन जोड़ा गया था।
विंडोज
विन्डोज़ एक्सपी सर्विस पैक 2 (2004) और विंडोज सर्वर 2003 सर्विस पैक 1 (2005) से शुरू होकर, एनएक्स सुविधाओं को पहली बार एक्स86 आर्किटेक्चर पर लागू किया गया था। विंडोज़ पर निष्पादन योग्य स्थान सुरक्षा को डेटा निष्पादन रोकथाम (डीईपी) कहा जाता है।
विन्डोज़ एक्सपी या सर्वर 2003 एनएक्स के तहत विशेष रूप से डिफ़ॉल्ट रूप से महत्वपूर्ण विंडोज़ सेवा पर सुरक्षा का उपयोग किया गया था। यदि एक्स86 प्रोसेसर हार्डवेयर में इस सुविधा का समर्थन करता है, तो डिफ़ॉल्ट रूप से विंडोज एक्सपी/सर्वर 2003 में एनएक्स सुविधाएँ स्वचालित रूप से चालू हो जाती हैं। यदि सुविधा एक्स86 प्रोसेसर द्वारा समर्थित नहीं थी, तो कोई सुरक्षा नहीं दी गई थी।
डीईपी के शुरुआती कार्यान्वयन ने कोई पता स्थान लेआउट रेंडमाइजेशन (एएसएलआर) प्रदान नहीं किया, जिसने संभावित रिटर्न-टू-लिबसी हमलों की अनुमति दी, जो संभवतः एक हमले के दौरान डीईपी को अक्षम करने के लिए इस्तेमाल किया जा सकता था।[7] पीएएक्स प्रलेखन विस्तार से बताता है कि एएसएलआर क्यों आवश्यक है;[8] एक प्रूफ-ऑफ-कॉन्सेप्ट तैयार किया गया था जिसमें एक ऐसी विधि का विवरण दिया गया था जिसके द्वारा एएसएलआर की अनुपस्थिति में डीईपी को दरकिनार किया जा सकता था।[9] एक सफल हमला विकसित करना संभव हो सकता है यदि तैयार डेटा जैसे दूषित चित्र या एमपी3 का पता हमलावर द्वारा जाना जा सकता है।
माइक्रोसॉफ्ट ने विंडोज विस्टा और विंडोज सर्वर 2008 में एएसएलआर कार्यक्षमता जोड़ी। इस प्लेटफ़ॉर्म पर, डीईपी को 32-बिट विंडोज़ में भौतिक पता एक्सटेंशन कर्नेल (ऑपरेटिंग सिस्टम) के स्वचालित उपयोग और 64-बिट कर्नेल पर मूल समर्थन के माध्यम से कार्यान्वित किया जाता है। विंडोज़ विस्टा डीईपी स्मृति के कुछ हिस्सों को केवल डेटा रखने के इरादे से चिह्नित करके काम करता है, जिसे एनएक्स या एक्सडी बिट सक्षम प्रोसेसर तब गैर-निष्पादन योग्य समझता है।[10] विंडोज़ में, संस्करण विस्टा से, किसी विशेष प्रक्रिया के लिए डीईपी सक्षम या अक्षम है या नहीं, कार्य प्रबंधक (विंडोज़) में प्रक्रिया/विवरण टैब पर देखा जा सकता है।
माइक्रोसॉफ्ट के सुरक्षित संरचित अपवाद हैंडलिंग (सेफएसईएच) के माध्यम से विंडोज़ सॉफ़्टवेयर डीईपी ( एनएक्स बिट के उपयोग के बिना) को लागू करता है। ठीक से संकलित अनुप्रयोगों के लिए, SafeSEH जाँचता है कि, जब प्रोग्राम निष्पादन के दौरान एक अपवाद उठाया जाता है, तो अपवाद का हैंडलर वह होता है जिसे एप्लिकेशन द्वारा मूल रूप से संकलित किया गया था। इस सुरक्षा का प्रभाव यह है कि एक हमलावर अपने स्वयं के अपवाद हैंडलर को जोड़ने में सक्षम नहीं होता है जिसे उसने अनियंत्रित प्रोग्राम इनपुट के माध्यम से डेटा पेज में संग्रहीत किया है।[10][11]
जब एनएक्स समर्थित होता है, तो यह डिफ़ॉल्ट रूप से सक्षम होता है। विंडोज़ प्रोग्राम को यह नियंत्रित करने की अनुमति देता है कि कौन से पृष्ठ अपने एपीआई के साथ-साथ पोर्टेबल निष्पादन योग्य में सेक्शन हेडर के माध्यम से निष्पादन को अस्वीकार करते हैं। एपीआई में, Win32 एपीआई कॉल के माध्यम से एनएक्स बिट तक रनटाइम पहुंच का खुलासा किया गया है VirtualAlloc[Ex] और VirtualProtect[Ex]. प्रत्येक पृष्ठ को निष्पादन योग्य या गैर-निष्पादन योग्य के रूप में व्यक्तिगत रूप से फ़्लैग किया जा सकता है। पिछले एक्स86 हार्डवेयर समर्थन की कमी के बावजूद, शुरुआत से ही निष्पादन योग्य और गैर-निष्पादन योग्य दोनों पृष्ठ सेटिंग्स प्रदान की गई हैं। प्री-एनएक्स सीपीयू पर, 'निष्पादन योग्य' विशेषता की उपस्थिति का कोई प्रभाव नहीं पड़ता है। इसे प्रलेखित किया गया था जैसे कि यह कार्य करता था, और, परिणामस्वरूप, अधिकांश प्रोग्रामर ने इसे ठीक से उपयोग किया। पीई फ़ाइल स्वरूप में, प्रत्येक अनुभाग अपनी निष्पादन क्षमता निर्दिष्ट कर सकता है। निष्पादन ध्वज प्रारूप की शुरुआत के बाद से अस्तित्व में है और मानक लिंकर (कंप्यूटिंग) ने हमेशा इस ध्वज का सही ढंग से उपयोग किया है, एनएक्स बिट से बहुत पहले भी। इस वजह से, विंडोज़ पुराने कार्यक्रमों पर एनएक्स बिट लागू करने में सक्षम है। यह मानते हुए कि प्रोग्रामर ने सर्वोत्तम प्रथाओं का अनुपालन किया है, अनुप्रयोगों को अब ठीक से काम करना चाहिए क्योंकि एनएक्स वास्तव में लागू है। केवल कुछ ही स्थितियोंमें समस्याएँ रही हैं; माइक्रोसॉफ्ट के अपने .नेट रनटाइम में एनएक्स बिट के साथ समस्या थी और इसे अपडेट किया गया था।
- हार्डवेयर समर्थित प्रोसेसर: एक्स86-64 (एएमडी64 और इंटेल 64), आइए-64 , ट्रांसमेटा इफिसोन, पेंटियम एम (बाद के संशोधन), सेमप्रॉन (बाद के संशोधन)
- अनुकरण: हाँ
- अन्य समर्थित: कोई नहीं
- मानक वितरण: विंडोज़ एक्सपी के बाद
- रिलीज की तारीख: 6 अगस्त 2004
एक्सबॉक्स
माइक्रोसॉफ्ट के एक्सबॉक्स (कंसोल) में, हालाँकि सीपीयू में एनएक्स बिट नहीं है, एक्सबॉक्स डेवलपमेंट किट के नए संस्करण कर्नेल के .डेटा सेक्शन की शुरुआत में कोड सेगमेंट की सीमा निर्धारित करते हैं (सामान्य परिस्थितियों में इस बिंदु के बाद कोई कोड नहीं होना चाहिए) . संस्करण 51xx से शुरू हो रहा है, यह परिवर्तन नए एक्सबॉक्स के कर्नेल में भी लागू किया गया था। इसने उन तकनीकों को तोड़ दिया जो पुराने कारनामे एक टर्मिनेट-एंड-स्टे-रेजिडेंट प्रोग्राम बनते थे। हालाँकि, इस नए कर्नेल संस्करण का समर्थन करते हुए नए कारनामे जल्दी से जारी किए गए क्योंकि एक्सबॉक्स कर्नेल में मूलभूत भेद्यता अप्रभावित थी।
सीमाएं
जहां रनटाइम पर कोड लिखा और निष्पादित किया जाता है - एक जेआईटी कंपाइलर एक प्रमुख उदाहरण है जेआईटी कंपाइलर का उपयोग संभावित रूप से शोषण कोड (जैसे जेआईटी स्प्रे का उपयोग करके) का उत्पादन करने के लिए किया जा सकता है जिसे निष्पादन के लिए फ़्लैग किया गया है और इसलिए फंसाया नहीं जाएगा।[12][13]
वापसी-उन्मुख प्रोग्रामिंग एक हमलावर को मनमाना कोड निष्पादित करने की अनुमति दे सकती है, भले ही निष्पादन योग्य स्थान सुरक्षा लागू हो।
यह भी देखें
संदर्भ
- ↑ "Memory Management Security Enhancements", Android Security Overview, retrieved 2012/07/29.
- ↑ "Android कोड परिवर्तन डिफ़ॉल्ट रूप से NX को सक्षम करता है।". Android Source Repository Change. Retrieved 2019-08-27.
- ↑ "एनएक्स के लिए एंड्रॉइड संगतता आवश्यकता". Android Code Review. Retrieved 2019-08-27.
- ↑ "Linux kernel 2.6.8". kernelnewbies.org. 2004-08-14. Retrieved 2015-08-01.
- ↑ "PaX SEGMEXEC documentation" (TXT). pax.grsecurity.net. September 10, 2004. Retrieved January 25, 2015.
- ↑ NetBSD, Non-executable stack and heap, retrieved 2011/07/14.
- ↑ "Blog on Cyberterror".
- ↑ "एड्रेस स्पेस लेआउट रैंडमाइजेशन". PaX project.
- ↑ "Uninformed - vol 2 article 4". Archived from the original on 2016-03-12. Retrieved 2010-03-19.
- ↑ 10.0 10.1 "A detailed description of the Data Execution Prevention (DEP) feature in Windows XP Service Pack 2, Windows XP Tablet PC Edition 2005, and Windows Server 2003". Microsoft. 2006-09-26. Archived from the original on 2014-09-11. Retrieved 2008-07-11.
- ↑ Johnson, Peter. "Yasm User Manual, win32: Safe Structured Exception Handling". Tortall Networks: Open Source and Free Software. Archived from the original on January 2, 2015. Retrieved 27 September 2015.
- ↑ Dion Blazakis. "Interpreter Exploitation: Pointer Inference And JIT Spraying" (PDF).
- ↑ Alexey Sintsov (March 5, 2010). "मनोरंजन और लाभ के लिए JIT-Spray Shellcode लिखना" (PDF). Archived from the original (PDF) on 2016-03-04.