Кіріспе
Компьютерлік қауіпсіздіктегі ұғым. Компьютерлік қауіпсіздікте орындалатын кеңістікті қорғау жад аймақтарын орындалмайтын деп белгілейді, сондықтан осы аймақтардағы машиналық кодты орындау әрекеті қателікке (exception) әкеледі. Ол NX биті (орындау биті жоқ) сияқты аппараттық мүмкіндіктерді немесе кейбір жағдайларда осы мүмкіндіктердің бағдарламалық эмуляциясын пайдаланады. Дегенмен, NX битін эмуляциялайтын немесе ұсынатын технологиялар көбінесе өлшенетін қосымша шығындарды тудырады, ал аппараттық құралмен қамтамасыз етілген NX битін пайдалану өлшенетін қосымша шығындарды тудырмайды. Burroughs 5000 1961 жылы енгізілген кезде орындалатын кеңістікті қорғауға аппараттық қолдау ұсынды; бұл мүмкіндік кем дегенде 2006 жылға дейін оның ізбасарларында сақталды. Белгіленген архитектурасын іске асыру кезінде жадтың әрбір сөзіне код немесе дерек екенін көрсететін жасырын белгі біті қосады. Осылайша, пайдаланушы бағдарламалары бағдарлама сөзін жаза алмайды немесе оқи алмайды, ал дерек сөздерін орындау мүмкін емес. Егер операциялық жүйе жадтың кейбір немесе барлық жазуға болатын аймақтарын орындалмайтын деп белгілей алса, ол стек пен үйінді жад аймақтарының орындалуын болдырмауы мүмкін. Бұл кейбір буферлік асығу шабуылдарының алдын алуға көмектеседі, әсіресе Sasser және Blaster сияқты кодты енгізіп, орындайтын шабуылдар. Бұл шабуылдар жадтың бір бөлігіне, әдетте стекке, жазуға және орындауға мүмкіндікке тәуелді; егер мұндай мүмкіндік болмаса, шабуыл сәтсіз аяқталады.
In computer security, executable space protection marks memory regions as non executable, such that an attempt to execute machine code in these regions will cause an exception. It makes use of hardware features such as the NX bit (no execute bit), or in some cases software emulation of those features. However, technologies that emulate or supply an NX bit will usually impose a measurable overhead while using a hardware supplied NX bit imposes no measurable overhead. The Burroughs 5000 offered hardware support for executable space protection on its introduction in 1961; that capability remained in its successors until at least 2006. In its implementation of tagged architecture, each word of memory had an associated, hidden tag bit designating it code or data. Thus user programs cannot write or even read a program word, and data words cannot be executed. If an operating system can mark some or all writable regions of memory as non executable, it may be able to prevent the stack and heap memory areas from being executable. This helps to prevent certain buffer overflow exploits from succeeding, particularly those that inject and execute code, such as the Sasser and Blaster worms. These attacks rely on some part of memory, usually the stack, being both writable and executable; if it is not, the attack fails.
Android құрылғысы
Android 2.3 және одан кейінгі нұсқаларында, оны қолдайтын архитектураларда, стек пен үйірмесін қоса, әдепкі бойынша орындалмайтын беттер болады.
FreeBSD-нің нұсқасы
NX битіне бастапқы қолдау, оны қолдайтын x86-64 және IA-32 процессорларында, алғаш рет FreeBSD CURRENT жүйесінде 2004 жылдың 8 маусымында пайда болды. Ол FreeBSD-ның 5.3 нұсқасынан бастап қолданыста.
Linux жүйесі
Linux ядросы NX битін x86 64 және IA 32 процессорларында қолдайды, мысалы, AMD, Intel, Transmeta және VIA компаниялары жасаған қазіргі 64 биттік процессорлар. Бұл мүмкіндікті x86 64 биттік процессорларда 64 биттік режимде қолдауды 2004 жылы Анди Клин қосты, ал сол жылы Инго Молнар 64 биттік процессорларда 32 биттік режимде қолдауды қосты. Бұл мүмкіндіктер 2004 жылдың тамызында 2.6.8 ядро нұсқасының шығуынан бері Linux ядросының негізгі бөлігі болып табылады. 32 биттік x86 ядроларында NX битінің болуы маңызды, себебі 32 биттік x86 CPU және 64 биттік IA 32 үйлесімді CPU-да жұмыс істей алатын 32 биттік x86 ядросы әдетте AMD64 немесе IA 64 ұсынатын NX битін күтпейді; NX мүмкіндігін қосатын жаңарту осы ядролардың NX биті бар болса, оны пайдалануын қамтамасыз етеді. Fedora, Ubuntu және openSUSE сияқты кейбір Linux дистрибутивтері әдепкі ядроларында HIGHMEM64 опциясын әдепкі бойынша қоспайды, ол 32 биттік режимде NX битіне қол жеткізу үшін қажет, себебі NX битін пайдалануға қажетті PAE режимі Pentium Pro (Pentium MMX қоса), Celeron M және Pentium M процессорларында NX қолдауы жоқ болғандықтан жүктеу қателіктерін тудырады. PAE-ді қолдамайтын басқа процессорлар – AMD K6 және одан ертерек, Transmeta Crusoe, VIA C3 және одан ертерек, Geode GX және LX. VMware Workstation 4.0-тан бұрынғы нұсқалары, Parallels Workstation 4.0-тан бұрынғы нұсқалары және Microsoft Virtual PC және Virtual Server қонақта PAE-ді қолдамайды. Fedora Core 6 және Ubuntu 9.10 және одан кейінгі нұсқалары PAE және NX-ті қолдайтын PAE ядролық пакетін ұсынады. NX жадты қорғау Ubuntu-да әрқашан аппараттық қолдауы бар және 64 биттік ядроны немесе 32 биттік серверлік ядроны іске қосатын кез келген жүйе үшін қолжетімді болды. Ubuntu 9.10 және одан кейінгі нұсқаларындағы 32 биттік PAE жұмыс үстелі ядросы (linux image generic pae) NX CPU мүмкіндігі бар аппараттық құралдар үшін қажетті PAE режимін де қамтамасыз етеді. NX аппараттық құралы жоқ жүйелер үшін 32 биттік ядролар қазір бағдарламалық эмуляция арқылы NX CPU мүмкіндігінің шамасын қамтамасыз етеді, бұл шабуылдаушының стек немесе үйірме жадынан іске қоса алатын көптеген қауіпті кодтарды тоқтатуға көмектеседі. Орындалмау функционалдығы басқа x86 емес процессорларда да, осы функционалдықты қолдайтын көптеген шығарылымдарда болды.
macOS
Intel процессорларына арналған macOS, Apple қолдайтын барлық процессорларда NX битін қолдайды (Mac OS X 10.4.4 – Intel-дің алғашқы нұсқасынан бастап). Mac OS X 10.4 жүйесі тек NX стегін қорғауды қолдады. Mac OS X 10.5 жүйесінде барлық 64 биттік атқарылатын файлдарда NX стегі және үйіндісі бар; W^X қорғанысы қолданылады. Бұл x86 64 (Core 2 немесе одан кейінгі) және G5 Mac компьютерлеріндегі 64 биттік PowerPC процессорларын қамтиды.
NetBSD-нің
NetBSD 2.0 және одан кейінгі нұсқаларынан бастап (2004 жылдың 9 желтоқсаны), оны қолдайтын архитектураларда орындалмайтын стек пен үйінді (heap) бар. Беттік дәлдігі бар архитектуралар: alpha, amd64, hppa, i386 (PAE-мен), powerpc (ibm4xx), sh5, sparc (sun4m, sun4d), sparc64. Бұл мүмкіндікті тек аймақтық дәлдікпен қолдай алатын архитектуралар: i386 (PAEсіз), басқа powerpc (мысалы, macppc). Басқа архитектуралар орындалмайтын стек немесе үйінді мүмкіндігінен пайда көре алмайды; NetBSD әдепкі бойынша осы архитектураларда осы мүмкіндіктерді қамтамасыз ету үшін бағдарламалық эмуляцияны қолданбайды.
Соларис
Solaris 2.6 (1997) жылдан бері SPARC процессорларында стекте кодты орындауды толығымен өшіру мүмкіндігін ұсынады; ал Solaris 9 (2002) нұсқасында әрбір орындалатын файл үшін стекте кодты орындауды өшіруге қолдау қосылды.
Xbox-тың
Microsoft-тың Xbox-та, CPU-да NX биті болмаса да, XDK-ның жаңа нұсқалары код сегментінің шегін ядроның дерек бөлімінің басына орнатады (қалыпты жағдайда осы нүктеден кейін код болмауы тиіс). 51xx нұсқасынан бастап бұл өзгеріс жаңа Xbox ядросына да енгізілді. Бұл ескі эксплойттардың "аяқталып, жүйеде қалу" бағдарламасына айналуына қолданылған тәсілдерді бұзды. Дегенмен, жаңа ядролық нұсқаны қолдайтын жаңа эксплойттар тез шығарылды, себебі Xbox ядросындағы түбірлік осалдық өзгеріссіз қалды.
Шектеулер
Код орындалу барысында жазылып, орындалатын жерде – JIT компиляторы осыған жарқын мысал – компиляторды пайдаланып, қауіпті кодты (мысалы, JIT Spray арқылы) жасауға болады, ол орындалуға таңбаланғандықтан, қауіпсіздік жүйесіне ілінбейді. Қайта бағытталған бағдарламалау шабуылшыға орындалатын кеңістік қорғау күшімен жұмыс істеген кезде де кез келген кодты орындауға мүмкіндік береді.