Некоторые современные методы, которые используются для защиты от атак с переполнением стека:
- Корректировка кода программы. 1 Необходимо устранить уязвимости, например, заменить функции, которые не проверяют длину переменных, на аналогичные, которые проверяют длину строки. 1 Также можно использовать средства, имитирующие переполнение буфера при отладке программы, чтобы выявить слабые места и устранить их. 1
- Использование неисполнимого буфера. 1 В стеке и сегментах данных запрещается исполнение кода, происходит только запись и чтение. 1 Этот метод помогает защититься только от атак с внедрением кода. 1
- Проверка выхода за границы. 1 При каждом обращении к переменной происходит проверка её длины (превышения допустимых границ). 1 Однако у этого метода есть минус — снижение производительности программы в несколько раз. 1
- Использование защитных утилит. 1 Например, PointGuard, StackGuard, StackShield. 1
- Рандомизация адресного пространства (ASLR). 24 Технология защищает систему от атак путём рандомизации позиции ключевых компонентов программы в виртуальной памяти. 2 Защите подлежат адреса сегментов данных и кода, стека, кучи, а также используемых библиотек. 2