निष्पादन योग्य-अंतरिक्ष सुरक्षा

From alpha
Jump to navigation Jump to search

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

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

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

ओएस कार्यान्वयन

कई ऑपरेटिंग सिस्टम निष्पादन योग्य स्थान सुरक्षा नीति लागू करते हैं या उपलब्ध रखते हैं। यहां वर्णानुक्रम में ऐसी प्रणालियों की एक सूची दी गई है, जिनमें से प्रत्येक में नवीनतम से लेकर सबसे पुरानी तकनीकों का ऑर्डर दिया गया है।

कुछ प्रौद्योगिकियों के लिए, एक सारांश है जो प्रत्येक प्रौद्योगिकी द्वारा समर्थित प्रमुख विशेषताओं को बताता है। सारांश नीचे इस प्रकार संरचित है।

  • हार्डवेयर समर्थित प्रोसेसर: (सीपीयू आर्किटेक्चर की अल्पविराम से अलग की गई सूची)
  • अनुकरण: (नहीं) या (आर्किटेक्चर स्वतंत्र) या (सीपीयू आर्किटेक्चर की अल्पविराम से अलग की गई सूची)
  • अन्य समर्थित: (कोई नहीं) या (सीपीयू आर्किटेक्चर की अल्पविराम से अलग की गई सूची)
  • मानक वितरण: (नहीं) या (हां) या (प्रौद्योगिकी का समर्थन करने वाले वितरण या संस्करणों की अल्पविराम से अलग की गई सूची)
  • रिलीज की तारीख: (पहली रिलीज की तारीख)

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

एंड्रॉइड

एंड्रॉइड (ऑपरेटिंग सिस्टम) 2.3 और बाद के संस्करण के अनुसार, इसका समर्थन करने वाले आर्किटेक्चर में डिफ़ॉल्ट रूप से गैर-निष्पादन योग्य पृष्ठ होते हैं, जिनमें गैर-निष्पादन योग्य स्टैक और हीप शामिल होते हैं। [1] [2] [3]


फ्रीबीएसडी

NX बिट के लिए प्रारंभिक समर्थन, x86-64 और IA-32 प्रोसेसर पर जो इसका समर्थन करते हैं, पहली बार 8 जून 2004 को FreeBSD -CURRENT में दिखाई दिया। यह 5.3 रिलीज़ के बाद से FreeBSD रिलीज़ में है।

लिनक्स

लिनक्स कर्नेल x86-64 और IA-32 प्रोसेसर पर NX बिट का समर्थन करता है जो इसका समर्थन करते हैं, जैसे कि AMD, Intel, Transmeta और VIA द्वारा बनाए गए आधुनिक 64-बिट प्रोसेसर। x86-64 सीपीयू पर 64-बिट मोड में इस सुविधा के लिए समर्थन 2004 में एंडी क्लेन द्वारा जोड़ा गया था, और बाद में उसी वर्ष, इंगो मोल्नार ने 64-बिट सीपीयू पर 32-बिट मोड में इसके लिए समर्थन जोड़ा। अगस्त 2004 में कर्नेल संस्करण 2.6.8 के रिलीज़ होने के बाद से ये सुविधाएँ लिनक्स कर्नेल मेनलाइन का हिस्सा रही हैं।[4] 32-बिट x86 कर्नेल पर NX बिट की उपलब्धता, जो 32-बिट x86 CPU और 64-बिट IA-32-संगत CPU दोनों पर चल सकती है, महत्वपूर्ण है क्योंकि 32-बिट x86 कर्नेल सामान्य रूप से NX बिट की अपेक्षा नहीं करेगा। वह x86-64 या IA-64 आपूर्ति करता है; एनएक्स एनेबलर पैच आश्वासन देता है कि ये कर्नेल मौजूद होने पर एनएक्स बिट का उपयोग करने का प्रयास करेंगे।

कुछ डेस्कटॉप लिनक्स वितरण, जैसे कि फेडोरा लिनक्स, उबंटू (ऑपरेटिंग सिस्टम) और ओपनएसयूएसई, अपने डिफ़ॉल्ट कर्नेल में डिफ़ॉल्ट रूप से HIGHMEM64 विकल्प को सक्षम नहीं करते हैं, जो 32-बिट मोड में एनएक्स बिट तक पहुंच प्राप्त करने के लिए आवश्यक है, क्योंकि भौतिक एनएक्स बिट का उपयोग करने के लिए भौतिक पता विस्तार मोड एनएक्स समर्थन के बिना प्री-पेंटियम प्रो (पेंटियम एमएमएक्स सहित) और सेलेरॉन एम और पेंटियम एम प्रोसेसर पर बूट विफलता का कारण बनता है। अन्य प्रोसेसर जो पीएई का समर्थन नहीं करते हैं वे हैं एएमडी K6 और इससे पहले के संस्करण, ट्रांसम्यूटेशनल क्रूसो , वीआईए सी3 और इससे पहले के संस्करण, और जियोड (प्रोसेसर) जीएक्स और एलएक्स। 4.0 से पुराने VMware कार्य केंद्र संस्करण, 4.0 से पुराने समानताएं कार्य केंद्र संस्करण, और माइक्रोसॉफ्ट वर्चुअल पीसी और माइक्रोसॉफ्ट वर्चुअल सर्वर अतिथि पर पीएई का समर्थन नहीं करते हैं। फेडोरा कोर 6 और उबंटू 9.10 और बाद में एक कर्नेल-पीएई पैकेज प्रदान करते हैं जो पीएई और एनएक्स का समर्थन करता है।

एनएक्स मेमोरी सुरक्षा हमेशा उबंटू में किसी भी सिस्टम के लिए उपलब्ध रही है जिसमें इसका समर्थन करने के लिए हार्डवेयर था और 64-बिट कर्नेल या 32-बिट सर्वर कर्नेल चलता था। Ubuntu 9.10 और बाद में 32-बिट PAE डेस्कटॉप कर्नेल (linux-image-generic-pae), NX CPU सुविधा के साथ हार्डवेयर के लिए आवश्यक PAE मोड भी प्रदान करता है। उन प्रणालियों के लिए जिनमें एनएक्स हार्डवेयर की कमी है, 32-बिट कर्नेल अब सॉफ्टवेयर इम्यूलेशन के माध्यम से एनएक्स सीपीयू सुविधा का एक अनुमान प्रदान करते हैं जो एक हमलावर द्वारा स्टैक या हीप मेमोरी से चलाए जा सकने वाले कई कारनामों को रोकने में मदद कर सकता है।

कई रिलीज़ के लिए इस कार्यक्षमता का समर्थन करने वाले अन्य गैर-x86 प्रोसेसर के लिए गैर-निष्पादित कार्यक्षमता भी मौजूद है।

कार्यकारी शील्ड

लाल टोपी कर्नेल डेवलपर इंगो मोल्नार ने 32-बिट x86 सीपीयू पर एनएक्स कार्यक्षमता का अनुमान लगाने और उपयोग करने के लिए एक्ज़ेक शील्ड नामक एक लिनक्स कर्नेल पैच जारी किया। एक्ज़ेक शील्ड पैच को 2 मई 2003 को लिनक्स कर्नेल मेलिंग सूची में जारी किया गया था, लेकिन बेस कर्नेल के साथ विलय के लिए इसे अस्वीकार कर दिया गया था क्योंकि इसमें इम्यूलेशन के जटिल हिस्सों को संभालने के लिए कोर कोड में कुछ घुसपैठ वाले बदलाव शामिल थे। Exec Shield का लीगेसी CPU समर्थन ऊपरी कोड खंड सीमा को ट्रैक करके NX अनुकरण का अनुमान लगाता है। यह संदर्भ स्विच के दौरान ओवरहेड के केवल कुछ चक्र लगाता है, जो सभी इरादों और उद्देश्यों के लिए अथाह है। एनएक्स बिट के बिना पुराने सीपीयू के लिए, एक्ज़ेक शील्ड कोड खंड सीमा से नीचे के पृष्ठों की सुरक्षा करने में विफल रहता है; उच्च मेमोरी, जैसे स्टैक, निष्पादन योग्य को चिह्नित करने के लिए एक mprotect() कॉल उस सीमा से नीचे की सभी मेमोरी को निष्पादन योग्य के रूप में भी चिह्नित करेगी। इस प्रकार, इन स्थितियों में, एक्ज़ेक शील्ड की योजनाएँ विफल हो जाती हैं। यह एक्ज़ेक शील्ड की कम ओवरहेड लागत है। एक्ज़ेक शील्ड दो निष्पादन योग्य और लिंक करने योग्य प्रारूप हेडर चिह्नों की जांच करता है, जो यह तय करता है कि स्टैक या हीप को निष्पादन योग्य होने की आवश्यकता है या नहीं। इन्हें क्रमशः PT_GNU_STACK और PT_GNU_HEAP कहा जाता है। एक्ज़ेक शील्ड इन नियंत्रणों को बाइनरी निष्पादनयोग्य और पुस्तकालयों दोनों के लिए सेट करने की अनुमति देता है; यदि कोई निष्पादन योग्य किसी लाइब्रेरी को लोड करता है जिसमें किसी दिए गए प्रतिबंध में छूट की आवश्यकता होती है, तो निष्पादन योग्य उस चिह्न को प्राप्त कर लेगा और उस प्रतिबंध को शिथिल कर देगा।

  • हार्डवेयर समर्थित प्रोसेसर: वे सभी लिनक्स एनएक्स का समर्थन करते हैं
  • अनुकरण: IA-32 (x86) और संगत पर कोड खंड सीमा का उपयोग करके NX सन्निकटन
  • अन्य समर्थित: कोई नहीं
  • मानक वितरण: फेडोरा कोर और रेड हैट एंटरप्राइज लिनक्स
  • रिलीज़ दिनांक: 2 मई 2003

PaX

PaX NX तकनीक NX कार्यक्षमता का अनुकरण कर सकती है, या हार्डवेयर NX बिट का उपयोग कर सकती है। PaX x86 सीपीयू पर काम करता है जिसमें NX बिट नहीं होता है, जैसे 32-बिट x86। लिनक्स कर्नेल (ऑपरेटिंग सिस्टम) अभी भी PaX के साथ शिप नहीं होता (मई, 2007 तक); पैच को मैन्युअल रूप से मर्ज किया जाना चाहिए.

PaX NX बिट अनुकरण के दो तरीके प्रदान करता है, जिन्हें SEGMEXEC और PAGEEXEC कहा जाता है। SEGMEXEC विधि एक मापने योग्य लेकिन कम ओवरहेड लगाती है, आमतौर पर 1% से कम, जो निष्पादन और डेटा एक्सेस के बीच अलगाव के लिए उपयोग की जाने वाली वर्चुअल मेमोरी मिररिंग के कारण होने वाला एक निरंतर स्केलर है।[5] SEGMEXEC में कार्य के वर्चुअल एड्रेस स्पेस को आधा करने का प्रभाव भी होता है, जिससे कार्य को सामान्य से कम मेमोरी तक पहुंचने की अनुमति मिलती है। यह तब तक कोई समस्या नहीं है जब तक कि कार्य के लिए सामान्य पता स्थान के आधे से अधिक तक पहुंच की आवश्यकता न हो, जो दुर्लभ है। SEGMEXEC प्रोग्रामों को अधिक सिस्टम मेमोरी (यानी रैम) का उपयोग करने का कारण नहीं बनता है, यह केवल यह प्रतिबंधित करता है कि वे कितनी पहुंच सकते हैं। 32-बिट सीपीयू पर, यह 3 जीबी के बजाय 1.5 जीबी हो जाता है।

PaX स्पीडअप के रूप में PAGEEXEC में Exec Shield के सन्निकटन के समान एक विधि प्रदान करता है; हालाँकि, जब उच्च मेमोरी को निष्पादन योग्य के रूप में चिह्नित किया जाता है, तो यह विधि अपनी सुरक्षा खो देती है। इन मामलों में, PaX CS सीमा से नीचे के पेजों की सुरक्षा के लिए PAGEEXEC द्वारा उपयोग की जाने वाली पुरानी, ​​वेरिएबल-ओवरहेड विधि पर वापस आ जाता है, जो कुछ मेमोरी एक्सेस पैटर्न में काफी उच्च-ओवरहेड ऑपरेशन बन सकता है। जब हार्डवेयर NX बिट की आपूर्ति करने वाले CPU पर PAGEEXEC विधि का उपयोग किया जाता है, तो हार्डवेयर NX बिट का उपयोग किया जाता है, इस प्रकार कोई महत्वपूर्ण ओवरहेड खर्च नहीं होता है।

PaX प्रोग्रामों को मेमोरी को इस तरह से चिह्नित करने से रोकने के लिए mprotect() प्रतिबंध प्रदान करता है जो संभावित एक्सप्लॉइट_(कंप्यूटर_सुरक्षा) के लिए उपयोगी मेमोरी उत्पन्न करता है। इस नीति के कारण कुछ एप्लिकेशन कार्य करना बंद कर देते हैं, लेकिन प्रभावित कार्यक्रमों के लिए इसे अक्षम किया जा सकता है।

PaX प्रत्येक बाइनरी निष्पादन योग्य के लिए प्रौद्योगिकी के निम्नलिखित कार्यों पर व्यक्तिगत नियंत्रण की अनुमति देता है:

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

  • हार्डवेयर समर्थित प्रोसेसर: DEC अल्फा, x86-64, IA-64, MIPS आर्किटेक्चर (32 और 64 बिट), PA-RISC, PowerPC, SPARC
  • अनुकरण: IA-32 (x86)
  • अन्य समर्थित: पावरपीसी (32 और 64 बिट), स्पार्क (32 और 64 बिट)
  • मानक वितरण: अल्पाइन लिनक्स
  • रिलीज़ दिनांक: 1 अक्टूबर, 2000

मैकओएस

Intel के लिए macOS Apple द्वारा समर्थित सभी CPU पर NX बिट का समर्थन करता है (Mac OS मैक ओएस एक्स 10.4 केवल एनएक्स स्टैक सुरक्षा का समर्थन करता है। Mac OS डब्ल्यू^एक्स सुरक्षा. इसमें PowerPC 970 Mac पर x86-64 (कोर 2 या बाद का) और 64-बिट PowerPC शामिल है।

नेटबीएसडी

नेटबीएसडी 2.0 और बाद के संस्करण (9 दिसंबर, 2004) के अनुसार, इसका समर्थन करने वाले आर्किटेक्चर में गैर-निष्पादन योग्य स्टैक और हीप हैं। [6] जिन आर्किटेक्चर में प्रति-पृष्ठ ग्रैन्युलैरिटी होती है उनमें शामिल हैं: DEC अल्फा, x86-64, PA-RISC, IA-32 (भौतिक पता एक्सटेंशन के साथ), PowerPC (ibm4xx), SuperH#SH-5, SPARC (Sun-4m, Sun- 4डी), स्पार्क64।

आर्किटेक्चर जो केवल क्षेत्रीय ग्रैन्युलैरिटी के साथ इनका समर्थन कर सकते हैं वे हैं: i386 (पीएई के बिना), अन्य पावरपीसी (जैसे मैकपीपीसी)।

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

OpenBSD

ओपनबीएसडी ऑपरेटिंग सिस्टम में एक तकनीक, जिसे डब्ल्यू^एक्स के नाम से जाना जाता है, डिफ़ॉल्ट रूप से लिखने योग्य पृष्ठों को उन प्रोसेसर पर गैर-निष्पादन योग्य के रूप में चिह्नित करती है जो इसका समर्थन करते हैं। 32-बिट x86 प्रोसेसर पर, कुछ स्तर की निष्पादन योग्य स्थान सुरक्षा प्रदान करने के लिए, कोड सेगमेंट को एड्रेस स्पेस के केवल एक हिस्से को शामिल करने के लिए सेट किया गया है।

ओपनबीएसडी 3.3 1 मई 2003 को भेजा गया और यह डब्ल्यू^एक्स को शामिल करने वाला पहला था।

  • हार्डवेयर समर्थित प्रोसेसर: DEC अल्फा, AMD64, PA-RISC, SPARC
  • अनुकरण: IA-32 (x86)
  • अन्य समर्थित: कोई नहीं
  • मानक वितरण: हाँ
  • रिलीज़ दिनांक: 1 मई 2003

सोलारिस

सोलारिस (ऑपरेटिंग सिस्टम) ने सोलारिस 2.6 (1997) के बाद से SPARC प्रोसेसर पर स्टैक निष्पादन को विश्व स्तर पर अक्षम करने का समर्थन किया है; सोलारिस 9 (2002) में, प्रति-निष्पादन योग्य आधार पर स्टैक निष्पादन को अक्षम करने के लिए समर्थन जोड़ा गया था।

विंडोज़

विंडोज़ (NT 4.0, 2000 और XP) के लिए गैर-निष्पादन योग्य स्टैक का पहला कार्यान्वयन PaX के काम के आधार पर, 2001 में अपने सिक्योरस्टैक उत्पाद के माध्यम से सिक्योरवेव द्वारा प्रकाशित किया गया था।[7][8] Windows XP सर्विस पैक 2 (2004) और Windows Server 2003 सर्विस पैक 1 (2005) से शुरू होकर, NX सुविधाएँ पहली बार x86 आर्किटेक्चर पर लागू की गईं। विंडोज़ पर निष्पादन योग्य स्थान सुरक्षा को डेटा निष्पादन रोकथाम (डीईपी) कहा जाता है।

Windows XP या सर्वर 2003 के अंतर्गत NX सुरक्षा का उपयोग विशेष रूप से डिफ़ॉल्ट रूप से महत्वपूर्ण Windows सेवाओं पर किया जाता था। यदि x86 प्रोसेसर हार्डवेयर में इस सुविधा का समर्थन करता है, तो NX सुविधाएँ डिफ़ॉल्ट रूप से Windows XP/Server 2003 में स्वचालित रूप से चालू हो जाती हैं। यदि सुविधा x86 प्रोसेसर द्वारा समर्थित नहीं थी, तो कोई सुरक्षा नहीं दी गई थी।

डीईपी के प्रारंभिक कार्यान्वयन में कोई पता स्थान लेआउट यादृच्छिकीकरण (एएसएलआर) प्रदान नहीं किया गया था, जिससे संभावित रिटर्न-टू-लिबसी हमलों की अनुमति मिलती थी जिनका उपयोग संभवतः किसी हमले के दौरान डीईपी को अक्षम करने के लिए किया जा सकता था।[9] PaX दस्तावेज़ इस बात पर विस्तार से बताता है कि ASLR क्यों आवश्यक है;[10] एक अवधारणा का प्रमाण तैयार किया गया था जिसमें एक ऐसी विधि का विवरण दिया गया था जिसके द्वारा एएसएलआर की अनुपस्थिति में डीईपी को दरकिनार किया जा सकता था।[11] एक सफल हमला विकसित करना संभव हो सकता है यदि तैयार किए गए डेटा जैसे दूषित छवियों या बिका हुआ 3 का पता हमलावर द्वारा जाना जा सकता है।

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

विंडोज़ माइक्रोसॉफ्ट के सेफ संरचित अपवाद हैंडलिंग (सेफएसईएच) के माध्यम से सॉफ्टवेयर डीईपी (एनएक्स बिट के उपयोग के बिना) लागू करता है। उचित रूप से संकलित अनुप्रयोगों के लिए, सेफएसईएच जांच करता है कि, जब प्रोग्राम निष्पादन के दौरान एक अपवाद उठाया जाता है, तो अपवाद का हैंडलर एप्लिकेशन द्वारा परिभाषित किया गया है क्योंकि यह मूल रूप से संकलित किया गया था। इस सुरक्षा का प्रभाव यह है कि एक हमलावर अपने स्वयं के अपवाद हैंडलर को जोड़ने में सक्षम नहीं है जिसे उसने अनियंत्रित प्रोग्राम इनपुट के माध्यम से डेटा पेज में संग्रहीत किया है।[12][13] जब NX समर्थित होता है, तो यह डिफ़ॉल्ट रूप से सक्षम होता है। विंडोज़ प्रोग्राम को यह नियंत्रित करने की अनुमति देता है कि कौन से पेज उसके एपीआई के साथ-साथ पोर्टेबल निष्पादन योग्य में सेक्शन हेडर के माध्यम से निष्पादन की अनुमति नहीं देते हैं। एपीआई में, NX बिट तक रनटाइम एक्सेस Win32 API कॉल के माध्यम से उजागर होता है VirtualAlloc[Ex] और VirtualProtect[Ex]. प्रत्येक पृष्ठ को व्यक्तिगत रूप से निष्पादन योग्य या गैर-निष्पादन योग्य के रूप में चिह्नित किया जा सकता है। पिछले x86 हार्डवेयर समर्थन की कमी के बावजूद, शुरुआत से ही निष्पादन योग्य और गैर-निष्पादन योग्य दोनों पेज सेटिंग्स प्रदान की गई हैं। प्री-एनएक्स सीपीयू पर, 'निष्पादन योग्य' विशेषता की उपस्थिति का कोई प्रभाव नहीं पड़ता है। इसे ऐसे प्रलेखित किया गया जैसे कि यह कार्य करता हो, और परिणामस्वरूप, अधिकांश प्रोग्रामर ने इसका उचित उपयोग किया। पीई फ़ाइल प्रारूप में, प्रत्येक अनुभाग अपनी निष्पादन क्षमता निर्दिष्ट कर सकता है। निष्पादन ध्वज प्रारूप की शुरुआत से ही अस्तित्व में है और मानक लिंकर (कंप्यूटिंग) ने हमेशा इस ध्वज का सही ढंग से उपयोग किया है, यहां तक ​​कि एनएक्स बिट से भी बहुत पहले। इस वजह से, विंडोज़ पुराने प्रोग्रामों पर NX बिट लागू करने में सक्षम है। यह मानते हुए कि प्रोग्रामर ने सर्वोत्तम प्रथाओं का अनुपालन किया है, अनुप्रयोगों को अब सही ढंग से काम करना चाहिए क्योंकि एनएक्स वास्तव में लागू है। केवल कुछ ही मामलों में समस्याएँ आई हैं; माइक्रोसॉफ्ट के अपने .NET रनटाइम में NX बिट के साथ समस्या थी और उसे अपडेट किया गया था।

  • हार्डवेयर समर्थित प्रोसेसर: x86-64 (AMD64 और Intel 64), IA-64, स्थानांतरण दक्षता, पेंटियम एम (बाद में संशोधन), सेमप्रोन (बाद में संशोधन)
  • अनुकरण: हाँ
  • अन्य समर्थित: कोई नहीं
  • मानक वितरण: विंडोज एक्सपी पोस्ट करें
  • रिलीज़ दिनांक: 6 अगस्त, 2004

एक्सबॉक्स

माइक्रोसॉफ्ट के एक्सबॉक्स (कंसोल) में, हालांकि सीपीयू में एनएक्स बिट नहीं है, एक्सबॉक्स डेवलपमेंट किट के नए संस्करण कोड सेगमेंट सीमा को कर्नेल के .डेटा अनुभाग की शुरुआत में सेट करते हैं (सामान्य परिस्थितियों में इस बिंदु के बाद कोई कोड नहीं होना चाहिए) . संस्करण 51xx से प्रारंभ, यह परिवर्तन नए Xboxes के कर्नेल में भी लागू किया गया था। इसने उन तकनीकों को तोड़ दिया जिनका उपयोग समाप्ति-और-निवासी कार्यक्रम के लिए किया जाता था। हालाँकि, इस नए कर्नेल संस्करण का समर्थन करते हुए नए कारनामे तुरंत जारी किए गए क्योंकि Xbox कर्नेल में मूलभूत भेद्यता अप्रभावित थी।

सीमाएँ

जहां रनटाइम पर कोड लिखा और निष्पादित किया जाता है - एक जेआईटी कंपाइलर एक प्रमुख उदाहरण है - कंपाइलर का उपयोग संभावित रूप से शोषण कोड (उदाहरण के लिए जेआईटी स्प्रे का उपयोग करके) का उत्पादन करने के लिए किया जा सकता है जिसे निष्पादन के लिए चिह्नित किया गया है और इसलिए फंस नहीं जाएगा।[14][15] रिटर्न-ओरिएंटेड प्रोग्रामिंग किसी हमलावर को निष्पादन योग्य स्थान सुरक्षा लागू होने पर भी मनमाना कोड निष्पादित करने की अनुमति दे सकती है।

यह भी देखें

संदर्भ

  1. "Memory Management Security Enhancements", Android Security Overview, retrieved 2012/07/29.
  2. "एंड्रॉइड कोड परिवर्तन डिफ़ॉल्ट रूप से एनएक्स को सक्षम करता है।". Android Source Repository Change. Retrieved 2019-08-27.
  3. "एनएक्स के लिए एंड्रॉइड संगतता आवश्यकताएँ". Android Code Review. Retrieved 2019-08-27.
  4. "Linux kernel 2.6.8". kernelnewbies.org. 2004-08-14. Retrieved 2015-08-01.
  5. "PaX SEGMEXEC documentation" (TXT). pax.grsecurity.net. September 10, 2004. Retrieved January 25, 2015.
  6. NetBSD, Non-executable stack and heap, retrieved 2011/07/14.
  7. "SecureWave | SecureNT". 2001-03-31. Archived from the original on 2001-03-31. Retrieved 2023-12-27.
  8. "Homepage of PaX - the PAGE_EXEC flag implementation for IA-32". 2001-03-31. Archived from the original on 2001-03-31. Retrieved 2023-12-27.
  9. "साइबरआतंक पर ब्लॉग". Archived from the original on 2012-02-09. Retrieved 2008-01-08.
  10. "पता स्थान लेआउट यादृच्छिकीकरण". PaX project.
  11. "Uninformed - vol 2 article 4". Archived from the original on 2016-03-12. Retrieved 2010-03-19.
  12. 12.0 12.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.
  13. 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.
  14. Dion Blazakis. "Interpreter Exploitation: Pointer Inference And JIT Spraying" (PDF).
  15. Alexey Sintsov (March 5, 2010). "मनोरंजन और लाभ के लिए जेआईटी-स्प्रे शेलकोड लिखना" (PDF). Archived from the original (PDF) on 2016-03-04.