Переполнение буфера - Напутственные речи

ОГЛАВЛЕНИЕ

 

Напутственные речи

Была рассмотрена атака на переполнение стека в одной конкретной программе собственного производства. Но точно также осуществляются атаки на переполнение буфера и в других уязвимых программах. И таких программ немало! Основная причина уязвимости - использование некоторых функций языка Си, работающих со строками и не проверяющих размеры своих аргументов (например strcpy, strcat, gets или sprintf). Поэтому подавляющее большинство (если не все) уязвимых программ написаны на Си. Возможно представить уязвимую программу и на другом императивном языке (вот несколько искусственный пример: цикл while, копирующий массив и в условии окончания полагающийся на корректность данных). Наконец совсем невозможно [теоретически] создать уязвимую программу на языке очень высокого уровня с очень строгой проверкой соответствия типов (сюда относятся в частности функциональные и логические языки программирования).

Особую опасность переполнение стека представляет в многопользовательских системах вроде Windows NT и Unix, где оно может дать возможность простому пользователю выполнить код в правах администратора (если уязвимой окажется какая-либо системная - типа setuid-root - программа). Также опасны уязвимости в программах, работающих через сеть (браузеры, чаты, мессенжеры и проч.). Они могут дать удалённому пользователю доступ к компьютеру.

Для защиты от возможности написания уязвимых программ существуют различные методы - использование специальных "безопасных" аналогов опасных функций (strncpy, strncat, ...), запрет на исполнение кода в области стека, проверка границ переменных при каждом доступе к ним и др. Но всё же самый надёжный (хоть и непростой) способ - качественное программирование, чего вам и желаю.