Чтение онлайн

на главную - закладки

Жанры

Защита от хакеров корпоративных сетей

авторов Коллектив

Шрифт:

Программа с жестко запрограммированными адресами функций работает быстро и безошибочно, но, как правило, непереносима с одной платформы на другую. Для Windows NT это означает ограничение работоспособности программы переполнения буфера рамками единственного служебного пакета service pack и составом операционной системы OS combo. В зависимости от используемой платформы и библиотек в UNIX она может вообще не заработать.

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

непригодности способа. Для поиска адреса функции в управляющем коде должны быть предусмотрены возможности поиска. Лучше найти уже загруженную в память функцию определения адреса функции и использовать ее. Конечно, этот способ предполагает, что функция загружена в память. Часто так и бывает, но вообще это дело случая. Для успешного применения способа необходимо ясно представлять используемый в операционной системе механизм редактирования связей. Для Windows NT он реализован в виде переносимого выполнимого формата PE (portable executable format). Для большинства систем UNIX это выполнимый формат редактирования связей ELF (executable and linking format).

Эти форматы настолько интересны, что наверняка захочется познакомиться с ними подробнее. В них содержатся лаконичные сведения о загруженных процессом компонентах во время редактирования связей. Они позволяют понять, что может выполнимая или совместно используемая библиотека.

Вложенный программный код полезной нагрузки

Один из самых интересных типов программного кода полезной нагрузки известен под названием вложенного программного кода полезной нагрузки (eggshellpayload). Под вложенностью понимается использование одного кода полезной нагрузки внутри другого. Цель подобных манипуляций заключается в использовании программы с незначительными правами и внедренным кодом полезной нагрузки для атаки на привилегированную программу.

Этот способ позволяет с помощью простой программы переполнения буфера сначала переступить одной ногой через порог, а затем с бандой вломиться в дом. Благодаря нему результат достигается с меньшими усилиями и за меньшее время, поскольку нападение комплексное: удаленная атака на непривилегированный процесс объединяется с локальным нападением на привилегированный процесс, образуя разрушительную комбинацию.

Вложенный программный код полезной нагрузки использован в программе IISHACK1.5, которая компрометирует Windows NT Server с установленным информационным сервером Интернет IIS 4. Подробный анализ программы и ее код можно найти в документе www.eeye.com/html/Research/Advisories/AD20001003.html. Для внедрения программой asp-файла на сервер был использован непривилегированный код, реализующий атаку «Unicode». Атака «Unicode» выполняется в пространстве процесса IUSR_MACHINE, который обычно является непривилегированным процессом.

Атака «Unicode» была объединена с атакой переполнения буфера на неназванный синтаксический анализатор. ASP, который выполнялся в контексте LOCAL_SYSTEM. Их комбинация позволила добиться полной компрометации системы.

Резюме

Переполнение буфера – реальная опасность современных программ. На нем основаны многие из наиболее опасных уязвимостей, которые когда-либо были обнаружены. В главе рассказано о стеке и показано, каким образом его используют современные компиляторы и программы при вызове функций. Далее были исследованы способы построения программ переполнения буфера и выделены их составные части. И наконец, были освещены некоторые современные способы реализации переполнения буфера, позволяющие адаптировать программный код к конкретной ситуации и сделать его более переносимым и работоспособным.

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

и выходных параметров. Регистр ESP указывает на вершину локального стека, а регистр EBP – на базовый регистр стека. При вызове функции содержимое регистров EIP и EBP сохраняется в стеке для того, чтобы в конце работы функции обеспечить дальнейшую работу программы.

Атаки переполнения буфера обыгрывают идею подмены сохраненного в стеке содержимого регистра EIP и передачи управления на нужный программный код. Успешная реализация идеи позволит выполнить на машине любую программу. Для успешного использования уязвимости необходимо иметь загрузчик, точку перехода, программный код полезной нагрузки и программу переполнения буфера. Загрузчик размещает в нужное место программный код полезной нагрузки, точка перехода позволяет передать управления на нужную программу – программный код полезной нагрузки, а программа переполнения буфера управляет их работой.

Известны многочисленные способы улучшения программы переполнения буфера. В главе рассмотрены способы фильтрации входных данных и вопросы частичного переполнения буфера. Показаны способы переполнения динамически распределяемой памяти («кучи») и варианты использования ее уязвимостей. Наконец, было исследовано несколько способов улучшения управляющего кода: использование уже существующего программного кода и загрузка кода, недоступного во время выполнения программы переполнения буфера.

Конспект

Стек

· Область стека предназначена для хранения локальных переменных функции. Обычно она настраивается для работы в прологе функции – части программного кода, расположенного в начале функции, и очищается в эпилоге – части программного кода, расположенного в ее конце.

· Нередко отдельные части области стека используются как буферы данных функции. Из-за особенностей принципов работы стека размер буфера данных не изменяется на протяжении всей жизни функции.

· Некоторые компиляторы при генерации выполнимого кода могут использовать ряд хитроумных способов работы со стеком для оптимизации размера функции и времени ее выполнения. Имеются также разнообразные способы вызова функции и передачи ей параметров, которые влияют на использование стека в пределах функции.

Стековый фрейм функции

· Стековый фрейм функции – область памяти, выделяемая всякий раз, когда вызывается функция. Она предназначается для временного хранения параметров, локальных переменных функции, оставшегося от предыдущего вызова функции содержимого регистра EBP и содержимого регистра EIP, указывающего на точку возврата.

· Содержимое регистра ESP указывает на вершину стека, содержимое регистра EBP – на дно. Значение регистра ESP меняется по мере выталкивания и проталкивания данных в стек. Регистр EBP обычно является базовым регистром для ссылки на локальные стековые переменные.

· Команды процессора Intel call и ret позволяют вызывать и завершать функцию. По команде call в стеке сохраняется содержимое регистра EIP, которое указывает на точку возврата. По команде ret из стека восстанавливается значение регистра EIP и управление передается в точку возврата из функции.

Основы переполнения буфера

· Копирование чрезмерно большого количества данных в буфер ведет к повреждению части стека.

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

Пример программы, уязвимой к переполнению буфера

Поделиться:
Популярные книги

Приручитель женщин-монстров. Том 7

Дорничев Дмитрий
7. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 7

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя

Неудержимый. Книга VI

Боярский Андрей
6. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга VI

Сыночек в награду. Подари мне любовь

Лесневская Вероника
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь

Неудержимый. Книга XVII

Боярский Андрей
17. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVII

Гром над Империей. Часть 1

Машуков Тимур
5. Гром над миром
Фантастика:
фэнтези
5.20
рейтинг книги
Гром над Империей. Часть 1

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Сломанная кукла

Рам Янка
5. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сломанная кукла

Отмороженный 3.0

Гарцевич Евгений Александрович
3. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 3.0

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие