Обзор эксплойтов Крис Касперски Хакер, номер #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-байт, которыми «заряжены» атакующие пакеты. Так что все, что мы имеем, — это тривиальный отказ в обслуживании. |