Кіріспе

Компьютерлік қауіпсіздіктегі ұғым. Компьютерлік қауіпсіздікте орындалатын кеңістікті қорғау жад аймақтарын орындалмайтын деп белгілейді, сондықтан осы аймақтардағы машиналық кодты орындау әрекеті қателікке (exception) әкеледі. Ол NX биті (орындау биті жоқ) сияқты аппараттық мүмкіндіктерді немесе кейбір жағдайларда осы мүмкіндіктердің бағдарламалық эмуляциясын пайдаланады. Дегенмен, NX битін эмуляциялайтын немесе ұсынатын технологиялар көбінесе өлшенетін қосымша шығындарды тудырады, ал аппараттық құралмен қамтамасыз етілген NX битін пайдалану өлшенетін қосымша шығындарды тудырмайды. Burroughs 5000 1961 жылы енгізілген кезде орындалатын кеңістікті қорғауға аппараттық қолдау ұсынды; бұл мүмкіндік кем дегенде 2006 жылға дейін оның ізбасарларында сақталды. Белгіленген архитектурасын іске асыру кезінде жадтың әрбір сөзіне код немесе дерек екенін көрсететін жасырын белгі біті қосады. Осылайша, пайдаланушы бағдарламалары бағдарлама сөзін жаза алмайды немесе оқи алмайды, ал дерек сөздерін орындау мүмкін емес. Егер операциялық жүйе жадтың кейбір немесе барлық жазуға болатын аймақтарын орындалмайтын деп белгілей алса, ол стек пен үйінді жад аймақтарының орындалуын болдырмауы мүмкін. Бұл кейбір буферлік асығу шабуылдарының алдын алуға көмектеседі, әсіресе Sasser және Blaster сияқты кодты енгізіп, орындайтын шабуылдар. Бұл шабуылдар жадтың бір бөлігіне, әдетте стекке, жазуға және орындауға мүмкіндікке тәуелді; егер мұндай мүмкіндік болмаса, шабуыл сәтсіз аяқталады.

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 арқылы) жасауға болады, ол орындалуға таңбаланғандықтан, қауіпсіздік жүйесіне ілінбейді. Қайта бағытталған бағдарламалау шабуылшыға орындалатын кеңістік қорғау күшімен жұмыс істеген кезде де кез келген кодты орындауға мүмкіндік береді.