Переповнення буфера
Майже кожна програма працює з зовнішніми даними, отримуваними з запам'ятовуючих пристроїв, з мережі Інтернет чи інших джерел. Для використання цих даних програми копіюють їх в буфери - блоки віртуальної пам'яті комп'ютера, які виділяються для їх роботи. Переповнення відбувається, коли в буфер записуються дані, обсяг яких перевищує його розміри. Це можливо, якщо розробник програми в якомусь її місці не передбачив перевірку відповідності обсягу копійованих даних розміру буфера. В результаті переповнення "зайві" дані потрапляють в пам'ять комп'ютера і розташовуються за межами конкретного буфера, "несанкціоновано" замінюючи частину даних, що знаходяться в пам'яті. Системна пам'ять використовується не тільки для зберігання даних, що обробляються. Вона також може містити виконуваний код, з якого складаються програми. Знаючи про існування бага в конкретній програмі, зловмисник може "підставити" їй потрібним чином скомпонований програмний код, який через механізм переповнення буферу замінить частину виконуваного коду, що міститься в пам'яті. Процесор виконає цей код і здійснить, таким чином, необхідні зловмиснику дії.
Гострота проблеми
Вперше механіз переповнення буферу був використаний при створенні комп'ютерного вірусу, що одержав назву "черв Морріса". Це був саморозповсюджуваний черв, який "розповзся" в 1988 році по всьому Інтернету (який тоді ще тільки починав розвиватися). З вказаного часу масові зараження комп'ютерів шкідливим кодом, заснованим на цій вразливості, неодноразово мали місце. Зі зростанням Інтернету збільшувалися й їх масштаби. У 2001 році черв Code Red інфікував понад 350 тис. комп'ютерів по всьому світу, в 2003 році черв SQL Slammer поширився не менше ніж на 75 тисяч комп'ютерів і т. д. Сьогодні серед комп'ютерних вразливостей переповнення буферу займає одне з перших місць. Кількість шкідливих програм, які його використовують, обчислюється тисячами. При цьому, під небезпеку підпадають як комп'ютери на базі Windows, так і машини, що використовують Linux. Крім того, в 2015 році була виявлена потенційна можливість переповнення буферу в Linux-драйвері, яка підставляє під удар крім комп'ютерів ще й мільйони маршрутизаторів по всьому світу.
Механізм роботи NX і EVP
Технології NX і EVP використовуються в процесорах з 2004 року й ґрунтуються на "ізоляції" блоків віртуальної пам'яті комп'ютера, призначених для зберігання виконуваного коду, від блоків, в які записуються оброблювані дані. За таких умов навіть якщо зловмиснику вдасться впровадити свій код в пам'ять комп'ютера, він не буде виконаний процесором. Щоб цей захист повноцінно функціонував, комп'ютер повинен використовувати відповідну операційну систему. У Windows підтримка NX/EVP з'явилася у версії Windows XP SP2. А Windows 8, 10 і зовсім не працюють на комп'ютерах, процесори яких не підтримують зазначені технології. NX/EVP не забезпечують повний захист від загроз переповнення буферу, однак, дуже знижують вірогідність злому системи.