Atributul (bit) NX-Bit ( n o e x ecute bit it in terminologia AMD ) sau XD-Bit ( e x ecute d isable by it in terminology Intel ) este un bit de blocare a execuției adăugat la pagini (a se vedea tabelele .page ( engleză) ) pentru a implementa capacitatea de a preveni executarea datelor ca cod. Folosit pentru a preveni o vulnerabilitate de depășire a tamponului care permite executarea unui cod arbitrar local sau de la distanță pe sistemul atacat. Tehnologia necesită suport software (vezi DEP ) din nucleul sistemului de operare .
Tehnologia NX-bit poate funcționa numai în următoarele condiții:
Unele software nu sunt compatibile cu tehnologia NX-bit, așa că BIOS -ul oferă o opțiune pentru a dezactiva tehnologia.
NX ( XD ) este un atribut (bit) al unei pagini de memorie în arhitecturile x86 și x86-64, adăugat pentru a proteja sistemul de erori de program, precum și de viruși , cai troieni și alte programe rău intenționate care le folosesc.
AMD a numit bitul „NX” din engleză. n o e x ecute . Intel a numit același bit „XD” din engleză. e x ecuție d isable .
Deoarece sistemele computerizate moderne împart memoria în pagini care au anumite atribute, designerii de procesoare au adăugat încă una: interzicerea executării codului pe o pagină. Adică, o astfel de pagină poate fi folosită pentru a stoca date, dar nu și codul programului. Dacă încercați să transferați controlul pe o astfel de pagină , va apărea o întrerupere , sistemul de operare va prelua controlul și va termina programul. Atributul de protecție a execuției a fost de mult prezent în altele[ ce? ] arhitecturi de microprocesoare; totuși, în sistemele x86, o astfel de protecție a fost implementată doar la nivelul segmentelor de program, al căror mecanism nu a fost folosit de sistemele de operare moderne de mult timp. Acum este adăugat și la nivelul paginilor individuale.
Programele moderne sunt clar împărțite în segmente de cod ("text"), date ("date"), date neinițializate ("bss"), precum și o zonă de memorie alocată dinamic, care este împărțită într- un heap ("heap"). și o stivă de programe („stivă”). Dacă programul este scris fără erori, indicatorul instrucțiunii nu va depăși niciodată segmentele de cod; totuși, ca urmare a erorilor software, controlul poate fi transferat în alte zone de memorie. În acest caz, procesorul va opri efectuarea oricăror acțiuni programate, dar va efectua o secvență aleatorie de comenzi, pentru care va prelua datele stocate în aceste zone, până când va întâlni o secvență nevalidă, sau încearcă să efectueze o operațiune care încalcă integritatea sistemului, care declanșează sistemul de protecție. În ambele cazuri, programul se va bloca. De asemenea, procesorul poate întâlni o secvență interpretată ca instrucțiuni de salt la o adresă deja parcursă. În acest caz, procesorul va intra într-o buclă infinită, iar programul se va „bloca”, luând 100% din timpul procesorului. Pentru a preveni astfel de cazuri, a fost introdus acest atribut suplimentar: dacă o anumită zonă de memorie nu este destinată stocării codului programului, atunci toate paginile sale trebuie marcate cu un bit NX, iar în cazul încercării de a transfera controlul acolo, procesorul va generați o excepție și sistemul de operare va bloca imediat programul, semnalând segmentul în afara limitelor (SIGSEGV).
Motivul principal pentru introducerea acestui atribut nu a fost atât de a oferi un răspuns rapid la astfel de erori, cât de faptul că foarte des astfel de erori au fost folosite de atacatori pentru a obține acces neautorizat la computere, precum și pentru a scrie viruși. A apărut un număr mare de astfel de viruși și viermi care exploatează vulnerabilitățile din programele comune.
Unul dintre scenariile de atac este că, utilizând un buffer overflow într-un program (adesea un daemon care oferă un serviciu de rețea ), un program rău intenționat special scris ( exploatare ) poate scrie un cod în zona de date a programului vulnerabil într-un astfel de scenariu. o modalitate prin care, ca urmare a unei erori, acest cod va prelua controlul și va efectua acțiuni programate de atacator (adesea o solicitare de a executa un program de înveliș al sistemului de operare , cu care atacatorul va prelua controlul asupra sistemului vulnerabil cu drepturile proprietarul programului vulnerabil; foarte adesea acesta este root ).
O depășire a bufferului apare adesea atunci când un dezvoltator de program alocă o anumită zonă de date (buffer) de o lungime fixă, crezând că acest lucru va fi suficient, dar apoi, în timp ce manipulează datele, nu verifică dacă depășește limitele sale. Ca urmare, datele primite vor ocupa zone de memorie care nu le-au fost destinate, distrugând informațiile disponibile acolo. Foarte des, bufferele temporare sunt alocate în cadrul procedurilor (subrutine), a căror memorie este alocată pe stiva de programe, care stochează, de asemenea, adresele de retur la subrutinele apelante. După ce a examinat cu atenție codul programului, un atacator poate detecta o astfel de eroare , iar acum este suficient pentru el să transfere o astfel de secvență de date în program, după procesarea căreia programul va înlocui din greșeală adresa de retur de pe stivă cu adresa necesară de către atacator, care a transferat și un cod de program sub masca datelor. După finalizarea subrutinei, comanda de returnare (RET) din procedură va transfera controlul nu către procedura de apelare, ci către procedura atacatorului - se obține controlul asupra computerului.
Datorită atributului NX, acest lucru devine imposibil. Zona stivei este marcată cu bitul NX și orice execuție de cod în ea este interzisă. Acum, dacă transferați controlul în stivă, atunci protecția va funcționa. Deși programul poate fi forțat să se blocheze, devine foarte dificil să îl utilizați pentru a executa cod arbitrar (acest lucru ar necesita ca programul să elimine din greșeală protecția NX).
Cu toate acestea, unele programe folosesc execuția de cod pe stivă sau heap. O astfel de decizie se poate datora optimizării , compilării dinamice sau pur și simplu unei soluții tehnice originale. În mod normal, sistemele de operare oferă apeluri de sistem pentru a solicita memorie cu o funcție executabilă activată exact în acest scop, dar multe programe mai vechi consideră întotdeauna că toată memoria este executabilă. Pentru a rula astfel de programe sub Windows, trebuie să dezactivați funcția NX pentru întreaga sesiune și, pentru a o activa din nou, este necesară o repornire. Deși Windows are un mecanism de înscriere în lista albă a programelor pentru care DEP este dezactivat, totuși, această metodă nu funcționează întotdeauna corect. . Iris este un exemplu de astfel de program .
Bitul NX este cel mai semnificativ bit al unei intrări din tabelele de pagini pe 64 de biți utilizate de procesor pentru a aloca memorie într-un spațiu de adrese. Tabelele de pagini pe 64 de biți sunt utilizate de sistemele de operare care rulează în modul pe 64 de biți sau cu extensia de adrese fizice (PAE) activată. Dacă sistemul de operare folosește tabele pe 32 de biți, atunci nu există nicio modalitate de a utiliza protecția la execuția paginii.
Toate procesoarele PC moderne de la Intel și AMD acceptă această tehnologie. Pentru a instala Windows 10 - prezența acestuia este obligatorie, altfel programul de instalare nu vă va permite să instalați sistemul.