Ця стаття не містить . (січень 2019) |
Цю статтю треба для відповідності Вікіпедії. (січень 2016) |
Атрибут (біт) NX-Bit (англ. No execute bit в термінології фірми AMD) або XD-Bit (англ. Execute disable bit в термінології фірми Intel) — біт заборони виконання, доданий до атрибутів сторінок пам'яті для реалізації можливості запобігання виконання даних як коду. Використовується для запобігання уразливості типу «переповнення буфера», що дозволяє виконувати довільний код на вразливій системі. Використання NX-біту вимагає програмної підтримки (див. [en]) зі сторони ядра операційної системи.
Підтримка у процесорних архітектурах
x86
NX (XD) — атрибут (біт) сторінки пам'яті в архітектурах x86 і x86-64, доданий для захисту системи від помилок програм, а також використовують їх вірусів, троянських коней та інших шкідливих програм.
Фірма AMD назвала біт «NX» від англ. no execute. Фірма Intel назвала той же біт «XD» від англ. execution disable.
Оскільки в сучасних комп'ютерних системах пам'ять розділяється на сторінки, що мають певні атрибути, розробники процесорів додали ще один: заборона виконання коду на сторінці. Тобто, така сторінка може бути використана для зберігання даних, але не програмного коду. При спробі передати управління на таку сторінку виникне переривання, ОС отримає управління і завершить програму. Атрибут захисту від виконання давно присутній в інших [яких?] Мікропроцесорних архітектурах; однак, в x86-системах такий захист реалізовувалася тільки на рівні програмних сегментів, механізм яких давно не використовується сучасними ОС. Тепер вона додана ще і на рівні окремих сторінок.
Сучасні програми чітко розділяють на сегмент коду («text»), сегмент для даних («data»), та сегмент для неініціалізованих даних («bss»), а також область пам'яті, що динамічно виділяється (поділяється на купу («heap») і програмний стек). Якщо програма написана без помилок, покажчик команд ніколи не вийде за межі сегментів коду; однак, внаслідок програмних помилок може бути виконаний перехід в інші області пам'яті. При цьому процесор перестане виконувати якісь запрограмовані дії, а буде виконувати випадкову послідовність команд, за які він буде приймати дані, до тих пір, поки не зустріне неприпустиму послідовність, або спробує виконати операцію, що порушує цілісність системи, яка викличе спрацьовування системи захисту. В обох випадках програма завершиться аварійно. Також процесор може зустріти послідовність команд, що спричиняє нескінченний цикл, і програма «зависне», забравши 100 % процесорного часу. Для запобігання подібним випадкам і був введений цей додатковий атрибут: якщо деяка область пам'яті не призначена для зберігання програмного коду, то всі її сторінки повинні позначатися NX-бітом, і у разі спроби переходу на таку ділянку пам'яті процесор сформує виняткову ситуацію і операційна система негайно аварійно завершить програму, сигналізуючи вихід за межі сегмента (SIGSEGV).
Основним мотивом введення цього атрибута була не стільки забезпечення швидкої реакції на подібні помилки, скільки те, що дуже часто такі помилки використовувались зловмисниками для несанкціонованого доступу до комп'ютерів, а також написання вірусів. З'явилася величезна[] кількість таких вірусів і черв'яків, що використовують уразливості в поширених програмах.
Один із сценаріїв атак полягає в тому, що скориставшись переповненням буфера в програмі (найчастіше це демон, що надає деякий мережевий сервіс), спеціально написана шкідлива програма (експлойт) може записати деякий код в область даних вразливою програми таким чином, що внаслідок помилки цей код отримає управління і виконає дії, запрограмовані зловмисником (найчастіше це запит виконати програму-оболонку ОС, за допомогою якої зловмисник отримає контроль над вразливою системою з правами власника вразливою програми; дуже часто це root).
Технічні деталі
Переповнення буфера часто виникає, коли розробник програми виділяє певну область даних (буфер) фіксованої довжини, вважаючи, що цього буде достатньо, але потім, маніпулюючи даними, ніяк не перевіряє вихід за її межі. У результаті надходять дані займуть області пам'яті, їм не призначені, знищивши наявну там інформацію. Дуже часто тимчасові буфери виділяються всередині процедур (підпрограм), пам'ять для яких виділяється в програмному стеку, в якому також зберігаються адреси повернень в підпрограму що її викликала. Ретельно дослідивши код програми, зловмисник може виявити таку помилку, і тепер йому достатньо передати в програму таку послідовність даних, обробивши яку програма помилково замінить адресу повернення в стеку на адресу, потрібну зловмисникові, який також передав під виглядом даних деякий програмний код. Після завершення підпрограми виконується команда повернення з процедури (RET), таким чином запускається процедура зловмисника, — контроль над комп'ютером отриманий.
Завдяки атрибуту NX, таке стає неможливим. Область стека позначається NX-бітом і будь-яке виконання коду в ньому заборонено. Тепер же, якщо передати керування стеку, то спрацює захист. Хоч програму і можна змусити аварійно завершитися, але використовувати її для виконання довільного коду стає дуже складно (для цього буде потрібно помилкове зняття програмою NX-захисту).
Однак, деякі програми використовують виконання коду в стеці або купі. Таке рішення може бути пов'язано з оптимізацією, динамічної компіляцією або просто оригінальним технічним рішенням. Зазвичай, операційні системи надають системні виклики для запиту пам'яті з дозволеною функцією виконання якраз для таких цілей, проте багато старих програм завжди вважають всю пам'ять придатною для зберігання коду. Для запуску таких програм під Windows доводиться відключати функцію NX на весь сеанс роботи, і щоб увімкнути її знову, потрібне перезавантаження. Хоча в Windows і передбачений механізм білого списку програм, для яких відключений DEP[], проте даний метод не завжди працює коректно.[] Прикладом такої програми може служити Iris.
NX-біт є найстаршим розрядом елемента 64-бітових таблиць сторінок, використовуваних процесором для розподілу пам'яті в адресному просторі. 64-розрядні таблиці сторінок використовуються операційними системами, що працюють в 64-бітному режимі, або з увімкненим розширенням фізичних адрес (PAE). Якщо ОС використовує 32-розрядні таблиці, то можливості використовувати захист сторінок від виконання немає.
ARM
Цей розділ потребує доповнення. (грудень 2019) |
SPARC
Цей розділ потребує доповнення. (грудень 2019) |
PA-RISC
Цей розділ потребує доповнення. (грудень 2019) |
Джерела
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno sichen 2019 Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti sichen 2016 Atribut bit NX Bit angl No execute bit v terminologiyi firmi AMD abo XD Bit angl Execute disable bit v terminologiyi firmi Intel bit zaboroni vikonannya dodanij do atributiv storinok pam yati dlya realizaciyi mozhlivosti zapobigannya vikonannya danih yak kodu Vikoristovuyetsya dlya zapobigannya urazlivosti tipu perepovnennya bufera sho dozvolyaye vikonuvati dovilnij kod na vrazlivij sistemi Vikoristannya NX bitu vimagaye programnoyi pidtrimki div en zi storoni yadra operacijnoyi sistemi Pidtrimka u procesornih arhitekturahx86 NX XD atribut bit storinki pam yati v arhitekturah x86 i x86 64 dodanij dlya zahistu sistemi vid pomilok program a takozh vikoristovuyut yih virusiv troyanskih konej ta inshih shkidlivih program Firma AMD nazvala bit NX vid angl no execute Firma Intel nazvala toj zhe bit XD vid angl execution disable Oskilki v suchasnih komp yuternih sistemah pam yat rozdilyayetsya na storinki sho mayut pevni atributi rozrobniki procesoriv dodali she odin zaborona vikonannya kodu na storinci Tobto taka storinka mozhe buti vikoristana dlya zberigannya danih ale ne programnogo kodu Pri sprobi peredati upravlinnya na taku storinku vinikne pererivannya OS otrimaye upravlinnya i zavershit programu Atribut zahistu vid vikonannya davno prisutnij v inshih yakih Mikroprocesornih arhitekturah odnak v x86 sistemah takij zahist realizovuvalasya tilki na rivni programnih segmentiv mehanizm yakih davno ne vikoristovuyetsya suchasnimi OS Teper vona dodana she i na rivni okremih storinok Suchasni programi chitko rozdilyayut na segment kodu text segment dlya danih data ta segment dlya neinicializovanih danih bss a takozh oblast pam yati sho dinamichno vidilyayetsya podilyayetsya na kupu heap i programnij stek Yaksho programa napisana bez pomilok pokazhchik komand nikoli ne vijde za mezhi segmentiv kodu odnak vnaslidok programnih pomilok mozhe buti vikonanij perehid v inshi oblasti pam yati Pri comu procesor perestane vikonuvati yakis zaprogramovani diyi a bude vikonuvati vipadkovu poslidovnist komand za yaki vin bude prijmati dani do tih pir poki ne zustrine nepripustimu poslidovnist abo sprobuye vikonati operaciyu sho porushuye cilisnist sistemi yaka vikliche spracovuvannya sistemi zahistu V oboh vipadkah programa zavershitsya avarijno Takozh procesor mozhe zustriti poslidovnist komand sho sprichinyaye neskinchennij cikl i programa zavisne zabravshi 100 procesornogo chasu Dlya zapobigannya podibnim vipadkam i buv vvedenij cej dodatkovij atribut yaksho deyaka oblast pam yati ne priznachena dlya zberigannya programnogo kodu to vsi yiyi storinki povinni poznachatisya NX bitom i u razi sprobi perehodu na taku dilyanku pam yati procesor sformuye vinyatkovu situaciyu i operacijna sistema negajno avarijno zavershit programu signalizuyuchi vihid za mezhi segmenta SIGSEGV Osnovnim motivom vvedennya cogo atributa bula ne stilki zabezpechennya shvidkoyi reakciyi na podibni pomilki skilki te sho duzhe chasto taki pomilki vikoristovuvalis zlovmisnikami dlya nesankcionovanogo dostupu do komp yuteriv a takozh napisannya virusiv Z yavilasya velichezna utochniti kilkist takih virusiv i cherv yakiv sho vikoristovuyut urazlivosti v poshirenih programah Odin iz scenariyiv atak polyagaye v tomu sho skoristavshis perepovnennyam bufera v programi najchastishe ce demon sho nadaye deyakij merezhevij servis specialno napisana shkidliva programa eksplojt mozhe zapisati deyakij kod v oblast danih vrazlivoyu programi takim chinom sho vnaslidok pomilki cej kod otrimaye upravlinnya i vikonaye diyi zaprogramovani zlovmisnikom najchastishe ce zapit vikonati programu obolonku OS za dopomogoyu yakoyi zlovmisnik otrimaye kontrol nad vrazlivoyu sistemoyu z pravami vlasnika vrazlivoyu programi duzhe chasto ce root Tehnichni detali Perepovnennya bufera chasto vinikaye koli rozrobnik programi vidilyaye pevnu oblast danih bufer fiksovanoyi dovzhini vvazhayuchi sho cogo bude dostatno ale potim manipulyuyuchi danimi niyak ne pereviryaye vihid za yiyi mezhi U rezultati nadhodyat dani zajmut oblasti pam yati yim ne priznacheni znishivshi nayavnu tam informaciyu Duzhe chasto timchasovi buferi vidilyayutsya vseredini procedur pidprogram pam yat dlya yakih vidilyayetsya v programnomu steku v yakomu takozh zberigayutsya adresi povernen v pidprogramu sho yiyi viklikala Retelno doslidivshi kod programi zlovmisnik mozhe viyaviti taku pomilku i teper jomu dostatno peredati v programu taku poslidovnist danih obrobivshi yaku programa pomilkovo zaminit adresu povernennya v steku na adresu potribnu zlovmisnikovi yakij takozh peredav pid viglyadom danih deyakij programnij kod Pislya zavershennya pidprogrami vikonuyetsya komanda povernennya z proceduri RET takim chinom zapuskayetsya procedura zlovmisnika kontrol nad komp yuterom otrimanij Zavdyaki atributu NX take staye nemozhlivim Oblast steka poznachayetsya NX bitom i bud yake vikonannya kodu v nomu zaboroneno Teper zhe yaksho peredati keruvannya steku to spracyuye zahist Hoch programu i mozhna zmusiti avarijno zavershitisya ale vikoristovuvati yiyi dlya vikonannya dovilnogo kodu staye duzhe skladno dlya cogo bude potribno pomilkove znyattya programoyu NX zahistu Odnak deyaki programi vikoristovuyut vikonannya kodu v steci abo kupi Take rishennya mozhe buti pov yazano z optimizaciyeyu dinamichnoyi kompilyaciyeyu abo prosto originalnim tehnichnim rishennyam Zazvichaj operacijni sistemi nadayut sistemni vikliki dlya zapitu pam yati z dozvolenoyu funkciyeyu vikonannya yakraz dlya takih cilej prote bagato starih program zavzhdi vvazhayut vsyu pam yat pridatnoyu dlya zberigannya kodu Dlya zapusku takih program pid Windows dovoditsya vidklyuchati funkciyu NX na ves seans roboti i shob uvimknuti yiyi znovu potribne perezavantazhennya Hocha v Windows i peredbachenij mehanizm bilogo spisku program dlya yakih vidklyuchenij DEP utochniti prote danij metod ne zavzhdi pracyuye korektno dzherelo Prikladom takoyi programi mozhe sluzhiti Iris NX bit ye najstarshim rozryadom elementa 64 bitovih tablic storinok vikoristovuvanih procesorom dlya rozpodilu pam yati v adresnomu prostori 64 rozryadni tablici storinok vikoristovuyutsya operacijnimi sistemami sho pracyuyut v 64 bitnomu rezhimi abo z uvimknenim rozshirennyam fizichnih adres PAE Yaksho OS vikoristovuye 32 rozryadni tablici to mozhlivosti vikoristovuvati zahist storinok vid vikonannya nemaye ARM Cej rozdil potrebuye dopovnennya gruden 2019 SPARC Cej rozdil potrebuye dopovnennya gruden 2019 PA RISC Cej rozdil potrebuye dopovnennya gruden 2019 Dzherela