Atribut (bit) NX-Bit ( v terminologii AMD jej nelze spustit ) nebo XD-Bit ( v terminologii Intelu jej nelze spustit ) je bit zabraňující spuštění přidaný do stránek (viz tabulky .page ( anglicky ) ) k implementaci schopnosti zabránit spouštění dat jako kódu. Používá se k zabránění zranitelnosti přetečení vyrovnávací paměti , která umožňuje spuštění libovolného kódu lokálně nebo vzdáleně v napadeném systému. Tato technologie vyžaduje softwarovou podporu (viz DEP ) od jádra operačního systému .
Technologie NX-bit může fungovat pouze za následujících podmínek:
Některý software není kompatibilní s technologií NX-bit, takže BIOS nabízí možnost tuto technologii deaktivovat.
NX ( XD ) je atribut (bit) paměťové stránky v architektuře x86 a x86-64, přidaný za účelem ochrany systému před chybami programu a také před viry , trojskými koňmi a jinými škodlivými programy, které je používají.
AMD nazvalo bit "NX" z angličtiny. n o e x ecute . Intel tomu samému bitu říkal „XD“ z angličtiny. e x ekuce d isable .
Vzhledem k tomu, že moderní počítačové systémy rozdělují paměť na stránky, které mají určité atributy, návrháři procesorů přidali další: zakazují spuštění kódu na stránce. To znamená, že taková stránka může být použita k ukládání dat, ale ne programového kódu. Pokud se pokusíte přenést řízení na takovou stránku , dojde k přerušení , OS převezme kontrolu a ukončí program. Atribut ochrany před spuštěním je již dlouho přítomen v jiných[ co? ] architektury mikroprocesorů; v systémech x86 však byla taková ochrana implementována pouze na úrovni programových segmentů, jejichž mechanismus moderní operační systémy již dlouho nepoužívají. Nyní se přidává i na úrovni jednotlivých stránek.
Moderní programy jsou přehledně rozděleny do segmentů kódu („text“), dat („data“), neinicializovaných dat („bss“) a také dynamicky alokované oblasti paměti, která je rozdělena na haldu („hromadu“) . a programový zásobník („zásobník“). Pokud je program napsán bez chyb, ukazatel instrukce nikdy nepřekročí segmenty kódu; v důsledku softwarových chyb však může být řízení přeneseno do jiných oblastí paměti. V tomto případě procesor přestane provádět jakékoli naprogramované akce, ale bude provádět náhodnou sekvenci příkazů, pro které bude brát data uložená v těchto oblastech, dokud nenarazí na neplatnou sekvenci nebo se pokusí provést operaci, která porušuje integritu systému, která spustí ochranný systém. V obou případech se program zhroutí. Procesor se také může setkat se sekvencí interpretovanou jako instrukce skoku na již prošlou adresu. V tomto případě procesor vstoupí do nekonečné smyčky a program se „zasekne“, přičemž zabere 100 % času procesoru. Aby se takovým případům předešlo, byl zaveden tento přídavný atribut: pokud určitá paměťová oblast není určena pro ukládání programového kódu, pak musí být všechny její stránky označeny bitem NX a v případě pokusu o přenesení řízení tam procesor vygeneruje výjimku a operační systém okamžitě zhroutí program, což signalizuje, že segment je mimo hranice (SIGSEGV).
Hlavním motivem pro zavedení tohoto atributu nebyla ani tak rychlá reakce na takové chyby, jako skutečnost, že velmi často takové chyby útočníci využívali k získání neoprávněného přístupu k počítačům a také k zápisu virů. Objevilo se obrovské množství takových virů a červů, kteří zneužívají zranitelnosti běžných programů.
Jedním ze scénářů útoku je, že pomocí přetečení vyrovnávací paměti v programu (často démon , který poskytuje nějakou síťovou službu ), může speciálně napsaný škodlivý program ( exploit ) zapsat nějaký kód do datové oblasti zranitelného programu v takovém způsob, že v důsledku chyby tento kód převezme kontrolu a provede akce naprogramované útočníkem (často požadavek na spuštění programu wrapper OS , pomocí kterého útočník převezme kontrolu nad zranitelným systémem s právy vlastník zranitelného programu; velmi často je to root ).
K přetečení vyrovnávací paměti často dochází, když vývojář programu alokuje určitou datovou oblast (vyrovnávací paměť) pevné délky v domnění, že to bude stačit, ale pak při manipulaci s daty nekontroluje, zda nepřekračují její hranice. Výsledkem je, že příchozí data zaberou oblasti paměti, které pro ně nebyly určeny, a zničí tam dostupné informace. Velmi často jsou v rámci procedur (podprogramů) alokovány dočasné buffery, jejichž paměť je alokována na zásobníku programu, který také ukládá návratové adresy volajícímu podprogramu. Po pečlivém prozkoumání programového kódu může útočník takovou chybu odhalit a nyní stačí, aby takovou sekvenci dat přenesl do programu, po jehož zpracování program omylem nahradí návratovou adresu na zásobníku potřebnou adresou. útočníkem, který také přenesl nějaký programový kód pod rouškou dat. Po dokončení podprogramu návratový příkaz (RET) z procedury předá řízení nikoli volající proceduře, ale proceduře útočníka – získává se kontrola nad počítačem.
Díky atributu NX se to stává nemožné. Oblast zásobníku je označena bitem NX a jakékoli provádění kódu v ní je zakázáno. Pokud nyní přenesete řízení na zásobník, ochrana bude fungovat. Přestože lze program vynutit zhroucení, je velmi obtížné jej použít ke spuštění libovolného kódu (to by vyžadovalo, aby program omylem odstranil ochranu NX).
Některé programy však používají provádění kódu na zásobníku nebo hromadě. Důvodem takového rozhodnutí může být optimalizace , dynamická kompilace nebo jednoduše originální technické řešení. Operační systémy běžně poskytují systémová volání pro vyžádání paměti s povolenou spustitelnou funkcí přesně pro tento účel, ale mnoho starších programů vždy považuje veškerou paměť za spustitelnou. Chcete-li spustit takové programy pod Windows, musíte funkci NX zakázat po celou dobu relace a pro její opětovné zapnutí je vyžadován restart. Ačkoli systém Windows obsahuje mechanismus pro přidávání programů na seznam povolených , pro které je funkce DEP zakázána, tato metoda ne vždy funguje správně. . Iris je příkladem takového programu .
Bit NX je nejvýznamnější bit položky v 64bitových tabulkách stránek , které procesor používá k alokaci paměti v adresovém prostoru. 64bitové tabulky stránek používají operační systémy běžící v 64bitovém režimu nebo s povoleným rozšířením fyzické adresy (PAE). Pokud OS používá 32bitové tabulky, pak neexistuje způsob, jak použít ochranu spouštění stránek.
Tuto technologii podporují všechny moderní PC procesory Intel a AMD. Chcete-li nainstalovat Windows 10 - jeho přítomnost je povinná, jinak vám instalační program nedovolí nainstalovat systém.