Переполнение буфера
Почти каждая программа работает с внешними данными, получаемыми с запоминающих устройств, из сети Интернет или других источников. Для использования этих данных программы копируют их в буферы - блоки виртуальной памяти компьютера, выделяемые для их работы. Переполнение происходит, когда в буфер записываются данные, объем которых превышает его размер. Это возможно, если разработчик программы в каком-либо ее месте не предусмотрел проверку соответствия объема копируемых данных размеру буфера. В результате переполнения "лишние" данные попадают в память компьютера и располагаются за пределами конкретного буфера, "несанкционировано" заменяя часть находящихся в памяти данных. Системная память используется не только для хранения обрабатываемых данных. Она также может содержать исполняемый код, из которого состоят выполняемые программы. Зная о существовании бага в конкретной программе, злоумышленник может "подставить" ей нужным образом скомпонованный программный код, который через механизм переполнения буфера заменит часть исполняемого кода, находящегося в памяти. Процессор выполнит этот код и совершит, таким образом, необходимые злоумышленнику действия.
Острота проблемы
Впервые механиз переполнение буфера был использован при создании компьютерного вируса, получившего название "червь Морриса". Это был самораспространяющийся червь, "расползшийся" в 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 не обеспечивают полную защиту от угроз переполнения буфера, однако, сильно снижают вероятность взлома системы.