Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Искажение указателей данных



Данный способ не предусматривает явной передачи управления подготовленному коду, но предполагает, что передача происходит на основании оригинального алгоритма программы. Другими словами, подготовленный код запускается в ходе обычной, неискаженной последовательности исполнения программы.

Рассмотрим следующий фрагмент программы на языке С++.

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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...