Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

IE: все по-старому

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

Хакер, номер #090, стр. 090-055-3


Начинаем копать

Свой лог доктор Ватсон хранит в папке Documents&Settings/All Users/Документы/DrWatson, туда же попадает дамп памяти упавшего приложения. Дамп перезаписывается каждый раз, а лог по умолчанию сохраняет данные о 10 последних ошибках, в которые входят и сбои, вызванные нашими exploit'ами.

Открывем drwtsn32.log в FAR'е по <F4> и ищем строки, относящиеся к сбою в IE, произошедшему в заданное время (мы ведь не забыли посмотреть на часы, верно?)

Исключение в приложении:

При регистрации ошибки доктор Ватсон запоминает время ее возникновения

Прил.: iexplore.exe (pid=884)

Время: 09.05.2006 @ 16:41:36.734

Пропуская бесполезную информацию о запущенных процессах и загруженных динамических библиотеках, мы добираемся до дизассемблерного кода, расположенного в окрестностях сбоя exploit'а iedie2-2:

Фрагмент дизассемблерного листинга доктора Ватсона, описывающего сбой IEdie2-2

eax=0000001a ebx=0000001a ecx=01460610 edx=75b2c198 esi=01460610 edi=00000000

eip=75ad7e2e esp=0006da58 ebp=00000000 iopl=0 nv up ei pl nz na pe nc

75ad7e23 e81b000000 call DllGetClassObject+0x1f573 (75ad7e43)

75ad7e28 8bd8 mov ebx,eax

75ad7e2a 3bdd cmp ebx,ebp

75ad7e2c 740e jz DllGetClassObject+0x2806c (75ae093c)

СБОЙ -> 75ad7e2e 8b7b34 mov edi,[ebx+0x34] ds:00a7d5f0=????????

75ad7e31 c1ef02 shr edi,0x2

75ad7e34 3bfd cmp edi,ebp

75ad7e36 0f8fcf431300 jnle 75c0c20b

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name

00000000 00000000 00000000 00000000 00000000 00000000 mshtml!DllGetClassObject

Давайте, как историки, попробуем восстановить хронологию событий и выяснить, что же здесь проиcходило. Нам известно, что инструкция MOV EDI, [EBX+0X34], расположенная по адресу 75AD7E2Eh и лежащая глубоко в недрах MSHTML.DLL, вызвала исключение типа нарушение доступа, поскольку регистр EBX содержал 1Ah, то есть указывал на первый 64 Кб региона памяти, доступ к которому строго запрещен как раз для отлова таких некорректных указателей. Но откуда в EBX взялся этот непонятный 1Ah? Поднимаясь по дизассемблерному листингу вверх, мы находим инструкцию MOV EBX, EAX, копирующую содержимое EAX в EBX. Значение самого же EAX возвращается функцией DllGetClassObject+0x1f573, расположенной по адресу 75AD7E43h. Важно понять, что к самой DllGetClassObject никакого отношения она не имеет! Просто, не найдя символьной информации, доктор Ватсон взял адрес ближайшей известной ему функции и назначил его в качестве базового.

Кое-что начинает проясняться. Функция 75AD7E43h должна возвращать указатель на структуру данных, по смещению 34h от начала которой лежит еще один указатель, но, накурившись exploit'а, она возвратила какую-то фигню. Напоминаю, что сбой произошел при закрытии IE, то есть когда обработка HTML-кода уже была завершена. Следовательно, сама функция 75AD7E43h тут ни при чем (ее можно даже не дизассемблировать), и причину следует искать в разрушении структур данных, с которыми эта функция работает.

Назад на стр. 090-055-2  Содержание  Вперед на стр. 090-055-4
Hosted by uCoz