NX bit (anglicky Non eXecute bit) je technologie pro CPU sloužící k oddělení paměti pro instrukce procesoru (strojového kódu) a paměti pro data. Podobná vlastnost se nachází u Harvardské architektury procesoru (tam je ale řešena fyzickým oddělení paměti programu a dat). Avšak NX bit se stále více používá v tradiční Von Neumannově architektuře procesorů z bezpečnostních důvodů. Operační systém s podporou NX bitu může označit určité oblasti paměti jako nespustitelné. Procesor poté odmítne spouštět jakýkoli kód umístěný v těchto částí paměti. Všeobecné techniky, známé jako executable space protection, jsou používány k zabránění určitým typům škodlivého softwaru k převzetí vlády nad počítačem vložením jejich kódu do úložiště dat jiného programu a spuštěním jejich vlastního kódu v této oblasti. Toto je známo jako přetečení na zásobníku nebo přetečení bufferu. Intel označil tuto funkci jako XD bit (anglicky eXecute Disable). AMD používá název Enhanced Virus Protection (vylepšená ochrana proti virům). Pro ARM architekturu se používá funkce XN (anglicky eXecute Never). Tato funkce byla představena v ARM v6."APX a XN (execute never) bity byly přidány do VMSAv6 [Virtual Memory System Architecture]", Referenční manuál k ARM architektuře, citováno 1. 12 2009.

Historie Procesory řady x86 od 80286 mají podobnou vlastnost implementovanou na úrovni segmentace paměti. Avšak současné operační systémy, které mají implementovaný Flat memory model, nemohou tuto vlastnost používat. V 80386 a novějších procesorech x86 nebyl žádný příznak spuštění v záznamu tabulky stránek (stránkový popisovač) dokud. AMD nepřidalo „not executable” neboli NX bit do záznamů stránkovací tabulky v procesorech s architekturou AMD64, zprostředkovávající mechanismus, který řídí spouštění po stránkách než po celých segmentech, aby tato schopnost byla k dispozici pro operační systémy, které používají flat memory model. Page-level mechanismus je po celá používán v ostatních architekturách procesorů, jako jsou DEC (nyní HP) Alpha, SPARC, and IBM System/370-XA, System/390, z/Architecture a PowerPC. Intel implementoval podobnou vlastnost do svého procesoru Itanium (Merced) s architekturou IA-64 v roce 2001, ale nezakomponoval vlastnost do oblíbenějších řad procesorů (Pentium, Celeron, Xeon, etc.). V architekturách x86 byl NX bit implementován firmou AMD pro použití v řadách AMD64 jako jsou Athlon64 a Opteron. Pojem NX bit se ujal a je obecně používán u podobných technologií v procesorech. poté co se AMD rozhodla začlenit tuto funkci do AMD64 instrukční sady, Intel implementoval podobnou funkci do x86 procesorů počínaje Pentiem 4, které využívaly jádra Prescott. NX bit odkazuje na bit číslo 63 (tj. nejvýznamnější bit) 64bitového záznamu ve stránkovací tabulce. Pokud je tento bit nastaven na 0, tak může být kód spuštěn z této stránky; pokud nastaven na 1, kód nemůže být spuštěn a je považován za data. Nutno poznamenat, že se používá pouze s Physical Address Extension (PAE) formátem stránkovací tabulky, protože x86 s původním 32bitovým formátem stránkovací tabulky nemá žádný bit 63 a tím pádem zde není bit k zakázání/povolení spuštění.

Softwarová emulace NX bitu Před nástupem této funkce v hardwaru, různé operační systémy se pokoušely imitovat tuto funkci softwarově jako například W^X nebo Exec Shield. Budou popsány v článku později. Operační systém se schopností emulovat a / nebo využít NX bit může zabránit oblastem v zásobníku nebo haldě ve spuštění a může zabránit spustitelné části paměti v zapisování. To pomáhá chránit před exploity způsobujícími přetečení na zásobníku, zejména před takovými, které vnášejí a spouštějí vlastní kód, jako jsou červi Sasser a Blaster. Tyto útoky se spoléhají na některé části paměti, obvykle na zásobník, aby byly zapisovatelné a spustitelné, pokud tomu tak není, útok se nezdaří.

Implementace v OS Mnoho operačních systémů implementuje nebo má politiku ochrany spustitelné oblasti. Zde je seznam takových to systémů v abecedním pořádku, každá technologie je seřazena od nejnovější po nejstarší. Pro některé technologie je tu přehled hlavních vlastností, které tyto technologie podporují. Přehled je uspořádaný takto:

Podporované procesory: (Čárkou oddělený seznam CPU architektur) Emulace: (Ne) nebo (Nezávislé na architektuře) nebo (Čárkou oddělený seznam CPU architektur) Ostatní podporované: (Žádné) nebo (Čárkou oddělený seznam CPU architektur) Standardní distribuce: (Ne) nebo (Ano) nebo (Čárkou oddělený seznam distribucí nebo verzí, které podporují danou technologii) Datum vydání: (Datum kdy byla poprvé vydána)

Na všech procesorech, které nejsou hardwarově podporovány, bude fungovat technologie, která dodává emulaci nezávislou na architektuře. „Ostatní podporované” jsou procesory, u kterých se využívá šedého místa k vytvoření explicitního NX bitu pomocí nějaké emulace.

FreeBSD Počáteční podpora pro NX bit na procesorech x86-64 a x86, které NX bit podporují. Poprvé se objevil v FreeBSD – CURRENT 8 června 2004. Je součástí FreeBSD od verze 5.3.

Linux Jádro Linuxu v současnosti podporuje NX bit na procesorech x86-64 a x86 kde je implementován, tak i současné 64bitové procesory AMD, Intel, Transmeta a VIA. Podpora této funkce v 64bitovém módu u x86-64 procesorů byla přidána v roce 2004 Andim Kleenem, a později téhož roku Ingo Molnár přidal podporu pro 32bitový mód na 64bitových procesorech. Tyto funkce jsou ve stabilním vydání jádra Linuxu 2.6.8 od srpna 2004. Dostupnost v 32bitovém x86 jádře, které může běžet jak na 32bitovém x86 procesoru, tak i na 64bitových x86 kompatibilních procesorech, je významná, protože 32bitové x86 jádro by normálně neočekávalo NX bit, který poskytuje AMD64 nebo IA-64. Záplata NX enabler zajišťuje, že se jádra pokusí použít NX bit pokud je přítomen. Některé desktopové Linuxové distribuce jako je Fedora Core 6, Ubuntu a openSUSE nemají ve výchozím nastavení zapnutou volbu HIGHMEM64, která je potřebná k přístupu k NX bitu v 32bitovém režimu, v jejich výchozí verzi jádra. Důvodem je, že režim PAE, který je potřeba pro NX bit, způsobuje u procesorů před Pentium Pro (včetně Pentium MMX), Celeron M a Pentium M bez podpory NX selhání při bootování. Další procesory, které nepodporují PAE, jsou AMD K6 a starší, Transmeta Crusoe, VIA C3 a starší a Geode GX a LX. VMware Workstation verze starší jak 4.0, Parallels Workstation verze starší jak 4.0, Microsoft Virtual PC a Virtual Server nepodporují PAE na hostovaných operačních systémech. Fedora Core 6 a Ubuntu 9.10 a novější poskytují kernel-PAE balíček, který podporuje PAE a NX. Podpora ochrany paměti (NX) byla vždy dostupná v Ubuntu pro jakýkoli systém, který hardwarově podporuje 64bitové jádro nebo 32bitové serverové jádro. 32bitové desktopové PAE jádro (linux-image-generic-pae) v Ubuntu 9.10 a novější, také poskytuje PAE režim potřebný pro hardware s NX CPU funkcí. Pro systémy, které postrádají NX hardware, 32bitová jádra poskytují přiblížení k NX CPU funkci skrze softwarovou emulaci, která pomáhá blokovat spoustu exploitů, které může útočník spustit ze zásobníku nebo haldy. NX funkce byla také představena pro ostatní ne-x86 procesory, které podporují tuto funkci, v mnoha vydání.

EXEC Shield Vývojář Red Hatu Ingo Molnár vydal opravu linuxového jádra nazvanou Exec Shield, která se přibližuje a uplatňuje NX funkci na 32bitových x86 procesorech. Oprava Exec Shield byla vydána a zařazena do seznamu oprav jádra (Linux kernel mailing list) druhého května 2003. Byla odmítnuta, protože zahrnovala rušivé změny kódu jádra, aby jádro zvládlo složité části emulace.

Podporované procesory: Všechny, na kterých Linux podporuje NX Emulace: NX aproximace používající limitovaný segment kódu na IA-32 (x86) a kompatibilní Ostatní podporované: Žádné Standardní distribuce: Fedora Core a Red Hat Enterprise Linux Datum vydání: 2. květen 2003

PaX PaX NX technologie může emulovat NX bit NX funkci, nebo použít hardwarový NX bit. PaX pracuje na x86 procesorech, které nemají NX bit, jako je 32bitový x86. Ačkoli Pax poskytuje úplnější implementaci NX funkce než jeho blízký konkurent Exec Shield, vyžaduje mnohem více změn v jádru Linuxu a může být náchylný k znemožnění běhu zastaralých aplikací. Project PaX byl založen 1. října 2000. Později přidáno do verze 2.6 a stále se vyvíjí. Linuxové jádro stále není distribuováno s PaX (k lednu 2012). Oprava musí být aplikována samostatně.

Podporované procesory: Alpha, AMD64, IA-64, MIPS (32 a 64 bit), PA-RISC, PowerPC, SPARC Emulace: IA-32 (x86) Ostatní podporované: PowerPC (32 a 64 bit), SPARC (32 a 64 bit) Standardní distribuce: Adamantix, Hardened Gentoo, Hardened Linux Datum vydání: 1. října 2000

macOS macOS pro procesory Intel podporuje NX bit na všech procesorech podporovanými společností Apple (od verze 10.4.4 – první vydání pro procesory Intel – do dnes). macOS 10.4 podporoval pouze NX ochranu zásobníku. v macOS 10.5 vše 64bitové má ochranu NX zásobníku a haldy – W^X protection, včetně i386 (Core 2 nebo novější) a PowerPC (pouze G5).

Microsoft Windows Poprvé na platformě x86 se funkce NX objevila ve Windows XP Service Pack 2 a Windows Server 2003 Service Pack 1. Microsoft Windows používá výlučně NX ochranu pro kritické služby Windows. ve Windows XP nebo Server 2003 je tato funkce nazývána Data Execution Prevention (zkráceně DEP) a může být aktivována na záložce „Upřesnit” ve vlastnostech systému. Když procesor x86 podporuje tuto funkci hardwarově, tak NX funkce jsou ve Windows XP/Server 2003 zapnuty automaticky. Pokud NX funkce nejsou podporovány procesory x86, tak není ochrana poskytnuta. „Software DEP” nesouvisí s NX bitem, podle Microsoftu se jedná o bezpečné strukturované zacházení s výjimkami (Safe Structured Exception Handling – SafeSEH). Software DEP/SafeSEH kontroluje, když dojde k výjimce, zda je tato výjimka registrovaná ve funkční tabulce pro danou aplikaci a vyžaduje, aby byla zabudována do programu. První implementace DEP neposkytovaly Address space layout randomization (ASLR), což umožňovalo útoky typu return-to-libc, které by mohly vést k  vypnutí DEB během útoku. Dokumentace k PaX uvádí, proč je ASLR nezbytný. Proof-of-concept detailně popisuje jakým způsobem by mohla být DEP vypnuta při nepřítomnosti ASLR. Je možné objevit způsob, jak provést úspěšný útok, pokud jsou útočníkům známy adresy připravených dat, jako jsou poškozené obrázky nebo MP3 soubory. Microsoft přidal ASLR funkci ve Windows Vista and Windows Server 2008, aby se vypořádali s tímto způsobem útoků. Mimo procesory x86 také existuje verze NX bitu pro Intel IA-64, která je implementovaná ve Windows na této architektuře.

Podporované procesory: x86-64 (AMD64 and Intel 64), IA-64, Efficeon, Pentium M (a novější), AMD Sempron (a novější) Emulace: Ne Ostatní podporované: Žádné Standardní distribuce: Windows XP ServicePack 2, Windows Server 2003 Service Pack 1, Windows XP Professional x64 Edition, Windows Vista a Windows 7 Datum vydání: 6. srpna 2004

NetBSD Architektury, které podporují NetBSD 2.0 a novější (9. prosinec 2004), mají nespustitelný zásobník a haldu. Procesory co mohou rozlišit ochranu pro každou stránku jsou: alpha, amd64, hppa, i386 (s PAE), powerpc (ibm4xx), sh5, sparc (sun4m, sun4d), sparc64. Procesory co mohou podporovat pouze s těmito regiony rozlišení: i386 (bez PAE), PowerPC (např. macppc). Ostatní architektury nevyužívají nespustitelný zásobník a haldu. NetBSD ve výchozím stavu nepoužívá softwarovou emulaci, aby nabídl tyto funkce na těchto architekturách.

OpenBSD

W ^ X Technologie v operačním systému OpenBSD, známá jako W ^ X, označuje zapisovatelné stránky ve výchozím stavu jako nespustitelné u procesorů, které toto podporují. Na 32bitových procesorech x86, je kódový segment nastaven, aby zahrnoval pouze část adresového prostoru a zajistil určitou úroveň ochrany spustitelných prostoru.