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

Обзор эксплойтов

Крис Касперски

Хакер, номер #094, стр. 094-054-6


Идем дальше и загружаем в отладчик memory3.dmp, который, по утверждению johnny cache, оказал убийственное воздействие на регистр EIP. Что ж, посмотрим-посмотрим:

i386kd -z L:\dumps\crash2\memory2.dmp -logo out3

После команды «!analyze -v» отладчик выдает следующий результат, приводимый здесь с традиционными сокращениями:

Анализ дампа памяти, оказавшего воздействие на регистр EIP

kd> !analyze -v

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

Arguments:

Arg1: 5c01abf7, memory referenced

Arg2: 00000002, IRQL

Arg3: 00000001, value 0 = read operation, 1 = write operation

Arg4: cccccccf, address which referenced memory

Debugging Details:

------------------

WRITE_ADDRESS: 5c01abf7

CURRENT_IRQL: 2

FAULTING_IP:

+ffffffffcccccccf

cccccccf 01963b10ffd6 add [esi+0xd6ff103b],edx

LAST_CONTROL_TRANSFER: from ff103b96 to cccccccf

STACK_TEXT:

cccccccc ff103b96 01c486d6 00000000 00000000 0xcccccccf

01c486d6 00000000 00000000 00000000 00000000 0xff103b96

На первый взгляд ничего не изменилось — все тот же противный DRIVER_IRQL_NOT_LESS_OR_EQUAL, возникающий на уровне DISPATCH_LEVEL, но присмотрись к значению регистра EIP, вылетевшему далеко за пределы драйвера и указывающего на инструкцию «add [esi+0xd6ff103b], edx», случайно очутившуюся по адресу CCCCCCCFh, который очень сильно смахивает на начинку атакующего пакета. Но почему же тогда EIP равен не CCCCCCCCh, а CCCCCCCFh, которого в пакете не было?!

Все просто! Страница с адресом CCCCCCCCh случайно оказалась в оперативной памяти и не была вытеснена на диск. Поэтому, как только пакет-камикадзе передвинул регистр EIP на адрес CCCCCCCCh, процессор начал выполнение кода, каждый раз увеличивая EIP на размер успешно выполненной команды. Он споткнулся лишь тогда, когда встретил инструкцию «add [esi+0xd6ff103b], edx», обратившуюся к ячейке 5C01ABF7h, которой не было в оперативной памяти, а подкачка на уровне DISPATCH_LEVEL, как уже говорилось, не работает, вот операционная система и сказала «мяу».

Чтобы подкрепить наше предположение фактами, травой и грибами, находясь в отладчике, дадим команду «u CCCCCCCC», чтобы дизассемблировать код по данному адресу:

Дизассемблерный листинг окрестностей аварии

kb>u cccccccc

cccccccc d6 ??? ; setalc Set AL to Carry Flag

cccccccd 86c4 xchg ah,al

cccccccf 01963b10ffd6 add [esi+0xd6ff103b],edx

ccccccd5 86c4 xchg ah,al

ccccccd7 0100 add [eax],eax

ccccccd9 0000 add [eax],al

ccccccdb 0000 add [eax],al

ccccccdd 0000 add [eax],al

Первой идет неизвестная отладчику i386kd недокументированная команда SETALC (Set Al to Carry Flag), а за ней — XCHG AH,AL. Обе эти команды выполняются успешно. Но как только процессор доходит до команды «ADD [ESI+0XD6FF103B],EDX», расположенной по адресу CCCCCCCFh и обращающейся к недоступной ячейке 5C01ABF7h, возникает исключение, и операционная система показывает голубой экран.

Назад на стр. 094-054-5  Содержание  Вперед на стр. 094-054-7