Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Данный способ не предусматривает явной передачи управления подготовленному коду, но предполагает, что передача происходит на основании оригинального алгоритма программы. Другими словами, подготовленный код запускается в ходе обычной, неискаженной последовательности исполнения программы.
Рассмотрим следующий фрагмент программы на языке С++.
foo (char * arg)
{
char * p = arg; // уязвимый указатель
char a [40]; // переполняемый буфер
gets (a);
gets (p); // искажение кода
}
В данном примере переполнение буфера a вызывает подмену указателя p и последующую запись строки по адресу искаженного указателя. Вводимая строка содержит код атакующего. Такая схема атаки часто используется для корректировки части кода программы или кода динамических и статических библиотек, располагающихся в памяти по фиксированным адресам. Например, корректировка-подмена системных функций выхода из программы или запуска процесса.
Другой пример атаки подобного рода – искажение указателя кадра стека локальных переменных (frame pointer overwrite attack). Эта атака основана на стандартных операциях пролога и эпилога подпрограмм, в результате чего подменяется указатель базы кадра локальных переменных.
Комбинация всех методов подготовки кода и целей переполнения буфера (типа искажаемых структур) определяет виды всех возможных атак по переполнению буфера, что позволяет их классифицировать (табл. 1.1).
Таблица 1.1
Дата публикования: 2015-04-06; Прочитано: 554 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!