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

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

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

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


Microsoft предоставляет множество утилит для разбора аварийных дампов, но мы, как настоящие хакеры, будем пользоваться консольным отладчиком i386kd, который рулит, а все остальные графические поделки отдыхают. Командная строка для запуска выглядит приблизительно так:

i386kd -z L:\dumps\crash2\memory.dmp -logo my_out

здесь «L:\dumps\crash2\memory2.dmp» — путь к дампу, «my_out» – имя файла, в который будет записываться лог (если, конечно, он нам нужен). Еще можно указать ключ «y SRV*D:\sym*http://msdl.microsoft.com/download/symbols», чтобы отладчик динамически подгружал необходимую символьную информацию из сети, однако в нашем случае она будет излишней, так что без нее вполне можно обойтись.

Поехали! Отладчик заглатывает дамп, сообщая, что он был отрыгнут операционной системой Windows XP Kernel Version 2600 (Service Pack 2) и что причиной аварии стал BugCheck-код D1h со следующими параметрами: 6e3c2081, 2, 0, f7433678. Вероятным виновникам вызова явился драйвер w22n51.sys, управляющий (по нашим данным) беспроводной сетевой картой Intel Centrino. Далее следует совет «use !analyze -v to get detailed debugging information» (набери «!analyze -v» для получения детальной отладочной информации) и приглашение к вводу, отмеченное лениво мерцающим курсором с «kd>».

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

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

kd> !analyze -v

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

Arguments:

Arg1: 6e3c2081, memory referenced

Arg2: 00000002, IRQL

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

Arg4: f7433678, address which referenced memory

Debugging Details:

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

READ_ADDRESS: 6e3c2081

CURRENT_IRQL: 2

FAULTING_IP:

w22n51+24678

f7433678 8a11 mov dl,[ecx] ds:0023:6e3c2081=??

STACK_TEXT:

8054e9e0 65537365 2f3c746e 656d616e 200a0d3e w22n51+0x24678

7479426c 00000000 00000000 00000000 00000000 0x65537365

IMAGE_NAME: w22n51.sys

Вместо бессловесного hex-значения BugCheck кода мы получили его наименование — DRIVER_IRQL_NOT_LESS_OR_EQUAL, означающее, что драйвер осуществил попытку выполнить операцию, недозволенную на данном уровне IRQL ( в данном случае равном 2), что соответствует DISPATCH_LEVEL, на котором выполняются отложенные процедуры, о проблемах синхронизации которых мы уже говорили. Драйвер пытается прочесть ячейку 6E3C2081h, находящуюся в странице памяти, вытесненной на диск (на уровне DISPATCH_LEVEL подкачка не работает). Это очевидная ошибка драйвера, указывающая на серьезное разрушение структур, обрабатываемых им данных (в данном случае — фреймов пакетов). Тем не менее, EIP находится в пределах драйвера w22n51.sys, и в стеке нет никаких следов присутствия CCh-байт, которыми «заряжены» атакующие пакеты. Так что все, что мы имеем, — это тривиальный отказ в обслуживании.

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