Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

SEH на службе у контрреволюции

Крис Касперски aka мыщъх

Спецвыпуск Xakep, номер #045, стр. 045-048-5


ЛИСТИНГ

Регистрация собственных обработчиков структурных исключений

PUSH handler ;заносим адрес нашего SEH-обработчика

PUSH FS:[00000000h] ; заносим адрес на предыдущий SEH-фрейм

MOV FS,[00000000h], ESP ; регистрируем новый SEH-фрейм

Теперь, если shell-код нечаянно дотронется до запрещенной ячейки или совершит другую ошибку подобного типа, атакуемое приложение уже не будет захлопнуто операционной системой. Управление вновь возвратится к shell-коду, давая ему понять, что туда ходить не надо и следует немедленно сменить тактику поведения, используя резервные алгоритмы жизнеобеспечения.

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

Что почитать?

Будучи вполне легальным механизмом взаимодействия с операционной системой, структурная обработка исключений неплохо документирована. Было бы очень полезно почитать "F.A.Q: Exception Handling" из MSDN. Там же ты найдешь замечательную статью Мэтта Питерека "A Crash Course on the Depths of Win32 Structured Exception Handling". Из русскоязычных авторов лучше всего о структурных исключениях рассказывает Volodya – читай его статью "Об Упаковщиках В Последний Раз” на wasm.ru. Много интересного содержит также заголовочный файл EXCPT.H, входящий в состав SDK.

Заключение

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

Глобальное развертывание цепочки структурных исключений

1 – возникла исключительная ситуация;

2 – операционная система анализирует TIB (Thread Information Bock – Информационный Блок Потока) для поиска первого SEH-фрейма в цепочке;

3 – операционная система передает управление первому SEH-обработчику;

4 – обработчик прикидывается шлагом и уходит в отказ;

5 – операционная система переходит к следующему фрейму в цепочке;

6 – операционная система передает управление SEH-обработчику;

7 – этот обработчик не знает, что делать с исключением;

8 – операционная система переходит к следующему фрейму;

9 – операционная система передает управление SEH-обработчику;

10 – этот обработчик обрабатывает исключение (не обработать его он не может, так как это первичный обработчик, просто прихлопывающий приложение от безысходности).

SEH в шутку расшифровывают как Sexual Exception Handling.

Защита от переполнения буфера, встроенная в Windows 2003 Server, функционирует именно на основе SEH.

С помощью ключевых слов try и except разработчик может назначить свой обработчик исключений.

Указатель на текущий SEH-обработчик всегда содержится в первом двойном слове TIB'а, лежащего по адресу fs:[00000000h].

Назад на стр. 045-048-4  Содержание  Вперед на стр. 045-048-6