Attribut (bit) NX-Bit ( ingen ecute bit it i AMD-terminologi) eller XD-Bit (e x ecute isable b it in Intel terminology ) är en exekveringsspärrbit som lagts till på sidor ( se .page - tabeller ( engelska ) ) för att implementera möjligheten att förhindra exekvering av data som kod. Används för att förhindra en sårbarhet för buffertspill som gör att godtycklig kod kan exekveras lokalt eller på distans på det attackerade systemet. Tekniken kräver mjukvarustöd (se DEP ) från operativsystemets kärna .
NX-bit-teknik kan endast fungera under följande förhållanden:
Vissa program är inte kompatibla med NX-bit-teknik, så BIOS erbjuder ett alternativ för att inaktivera tekniken.
NX ( XD ) är ett attribut (bit) för en minnessida i x86- och x86-64-arkitekturerna, som lagts till för att skydda systemet från programfel, såväl som virus , trojanska hästar och andra skadliga program som använder dem.
AMD kallade biten "NX" från engelskan. n o e x ecute . Intel kallade samma bit "XD" från engelska. e x ecution d isable .
Eftersom moderna datorsystem delar upp minnet i sidor som har vissa attribut, har processordesigners lagt till ytterligare en: att förbjuda kod från att exekvera på en sida. Det vill säga att en sådan sida kan användas för att lagra data, men inte programmera kod. Om du försöker överföra kontrollen till en sådan sida kommer ett avbrott att inträffa , operativsystemet tar kontrollen och avslutar programmet. Utförandeskyddsattributet har länge funnits i andra[ vad? ] mikroprocessorarkitekturer; Men i x86-system implementerades sådant skydd endast på programsegmentnivån, vars mekanism inte har använts av moderna operativsystem på länge. Nu läggs det även till på nivån för enskilda sidor.
Moderna program är tydligt uppdelade i kodsegment ("text"), data ("data"), oinitierad data ("bss"), såväl som ett dynamiskt allokerat minnesområde, som är uppdelat i en hög ("hög"). och en programstack ("stack"). Om programmet är skrivet utan fel kommer instruktionspekaren aldrig att gå längre än kodsegment; Men som ett resultat av programvarufel kan kontrollen överföras till andra minnesområden. I det här fallet kommer processorn att sluta utföra alla programmerade åtgärder, men kommer att utföra en slumpmässig sekvens av kommandon, för vilka den kommer att ta data som lagras i dessa områden, tills den stöter på en ogiltig sekvens, eller försöker utföra en operation som bryter mot systemets integritet, vilket utlöser skyddssystemet. I båda fallen kommer programmet att krascha. Dessutom kan processorn stöta på en sekvens som tolkas som hoppinstruktioner till en redan genomkörd adress. I det här fallet kommer processorn att gå in i en oändlig slinga, och programmet kommer att "hänga" och tar 100% av processortiden. För att förhindra sådana fall infördes detta ytterligare attribut: om ett visst minnesområde inte är avsett för att lagra programkod, måste alla dess sidor markeras med en NX-bit, och i händelse av ett försök att överföra kontroll dit, kommer processorn att generera ett undantag och operativsystemet kommer omedelbart att krascha programmet, vilket signalerar segment utanför gränserna (SIGSEGV).
Huvudmotivet för att införa detta attribut var inte så mycket att ge ett snabbt svar på sådana fel som det faktum att sådana fel mycket ofta användes av angripare för att få obehörig åtkomst till datorer, såväl som för att skriva virus. Ett stort antal sådana virus och maskar har dykt upp som utnyttjar sårbarheter i vanliga program.
Ett av attackscenarierna är att, med hjälp av ett buffertspill i ett program (ofta en demon som tillhandahåller någon nätverkstjänst ), kan ett speciellt skrivet skadligt program ( exploatering ) skriva en del kod till dataområdet för det sårbara programmet i sådana ett sätt att, som ett resultat av ett fel, kommer denna kod att ta kontroll och utföra åtgärder som programmerats av angriparen (ofta en begäran om att köra ett OS-omslagsprogram , med vilket angriparen kommer att ta kontroll över det sårbara systemet med rättigheterna från ägare av det sårbara programmet; mycket ofta är detta root ).
Ett buffertspill uppstår ofta när en programutvecklare allokerar ett visst dataområde (buffert) med en fast längd, i tron att detta kommer att räcka, men då, medan han manipulerar data, inte kontrollerar att det går utanför dess gränser. Som ett resultat kommer inkommande data att uppta minnesområden som inte var avsedda för dem, vilket förstör informationen som är tillgänglig där. Mycket ofta tilldelas temporära buffertar inom procedurer (subrutiner), vars minne tilldelas på programstacken, som också lagrar returadresserna till den anropande subrutinen. Efter att noggrant ha undersökt programkoden kan en angripare upptäcka en sådan bugg , och nu räcker det för honom att överföra en sådan datasekvens till programmet, efter bearbetning kommer programmet av misstag att ersätta returadressen på stacken med den adress som behövs av angriparen, som också överförde en del programkod under täckmantel av data. Efter att subrutinen har slutförts kommer returkommandot (RET) från proceduren att överföra kontrollen inte till anropsproceduren, utan till angriparens procedur - kontroll över datorn erhålls.
Tack vare NX-attributet blir detta omöjligt. Stackområdet är markerat med NX-biten och all kodexekvering i den är förbjuden. Nu, om du överför kontrollen till stacken, kommer skyddet att fungera. Även om programmet kan tvingas krascha, blir det väldigt svårt att använda det för att exekvera godtycklig kod (detta skulle kräva att programmet av misstag tar bort NX-skyddet).
Vissa program använder dock exekvering av kod på stacken eller högen. Ett sådant beslut kan bero på optimering , dynamisk kompilering eller helt enkelt en original teknisk lösning. Normalt tillhandahåller operativsystem systemanrop för att begära minne med en aktiverad körbar funktion för just detta ändamål, men många äldre program anser alltid att allt minne är körbart. För att köra sådana program under Windows måste du inaktivera NX-funktionen under hela sessionen och för att aktivera den igen krävs en omstart. Även om Windows har en mekanism för att vitlista program för vilka DEP är inaktiverat, fungerar den här metoden inte alltid korrekt. . Iris är ett exempel på ett sådant program .
NX-biten är den mest signifikanta biten av en post i de 64-bitars sidtabeller som används av processorn för att allokera minne i ett adressutrymme. 64-bitars sidtabeller används av operativsystem som körs i 64-bitarsläge eller med Physical Address Extension (PAE) aktiverat. Om operativsystemet använder 32-bitars tabeller finns det inget sätt att använda sidexekveringsskydd.
Alla moderna PC-processorer från Intel och AMD stödjer denna teknik. För att installera Windows 10 - dess närvaro är obligatorisk, annars tillåter inte installationsprogrammet dig att installera systemet.