Переполнение буфера
ОГЛАВЛЕНИЕ
Введение
Переполнение буфера (buffer overflow) - наверное одна из самых интересных и широко распространённых уязвимостей программного обеспечения. Вроде бы небольшая ошибка программиста может (при особых обстоятельствах) позволить злобно настроенному хакеру сделать практически что угодно на компьютере невинного пользователя программы. Ошибка заключается в том, что в каком-либо месте программы происходит копирование данных из одного участка памяти в другой без проверки того, достаточно ли для них места там, куда их копируют. Область памяти, куда копируются данные, принято называть буфером. Таким образом, если данных слишком много, то часть их попадает за границы буфера - происходит "переполнение буфера". Умелое использование того, куда попадают "лишние данные" может позволить злоумышленнику выполнить любой код на компьютере, где произошло переполнение. Существуют различные варианты данной уязвимости. В этой работе рассматривается самая распространённая из них, связанная с искажением адреса возврата функции (т.н. "переполнение стека" - stack overflow или "срыв стека" - smashing the stack). Несмотря на то, что принципы использования переполнения буфера одни и те же на всех платформах, конкретные примеры зависят от используемого процессора и операционной системы. Здесь мы ограничимся переполнением стека под Windows 9x для процессора семейства Intel x86.
Прежде чем перейти к существу дела, приведём вкратце те сведения, которые понадобятся для понимания дальнейшего изложения. Осведомлённые могут этот раздел пропустить.