Лекция: Классификация атак переполнения буфера
Цель переполнения | Внедрение кода | Внедрение параметров | Внедрение кода не требуется |
Искажение адреса возврата из функции | Атака «срыв стека» | Атака «срыв стека» с параметризацией | Атака «срыв стека» с передачей управления |
Искажение указателей функций | Атака на указатели функций | Атака на указатели функций с параметризацией | Атака на указатели функций с передачей управления |
Искажение таблиц переходов | Атака на таблицы переходов | Атака на таблицы переходов с параметризацией | Атака на таблицы переходов с передачей управления |
Искажение указателей данных | Атака с искажением указателей данных | Атака с искажением указателей данных с параметризацией | Атака с искажением указателей данных с оригинальным кодом |
При построении атаки переполнения буфера возникают следующие трудности:
1) строковые переполняющиеся буферы не позволяют внедрять символы «0», которые очень часто используются при формировании машинного кода;
2) размер переполняющихся буферов обычно очень мал;
3) абсолютный адрес буфера обычно не известен, поэтому приходится оперировать относительными адресами;
4) базовые адреса системных функций изменяются от одной версии операционной системы к другой (в ОС Windows Vista / Seven базовый адрес системной библиотеки всегда разный);
5) адреса уязвимых мест программ часто не постоянны;
6) требуются глубокие знания спецификаций процессоров, особенностей функционирования ОС, компиляторов различных производителей.