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

Жизнь после BSOD

Крис Касперски и Жирный Хомяк

Хакер, номер #085, стр. 085-114-7


Объединив все компоненты воедино, мы получаем следующий папелац:

[средство против BSOD, перед употреблением встряхнуть]

.386

.model flat, stdcall

.code

DriverEntry proc

Mov eax, cr0 ; грузим управляющий регистр cr0 в регистр eax

mov ebx, eax ; сохраняем бит WP в регистре ebx

and eax, 0FFFEFFFFh ; сбрасываем бит WP, запрещающий запись

mov cr0, eax ; обновляем управляющий регистр cr0

mov dword ptr DS:[8042BF14h+1], 14C258h 14C258

; «закорачиваем» KeBugCheckEx

mov cr0, ebx ; восстанавливаем бит WP

mov eax, 0C0000182h ; STATUS_DEVICE_CONFIGURATION_ERROR

ret

DriverEntry endp

end DriverEntry

Вот такой маленький драйвер, а сколько данных он может спасти! Остается только откомпилировать его.

[ключи ассемблирования и линковки (используется пакет MASM из NT DDK)]

ml /nologo /c /coff nobsod.asm

link /driver /base:0x10000 /align:32 /out:nobsod.sys /subsystem:native nobsod.obj

Если все было сделано правильно, то на диске образуется файл nobsod.sys, который мы загрузим с помощью динамического загрузчика w2k_load. Загрузчик, конечно, заругается матом, что, мол, ERROR и драйвер вообще не грузятся, но так и должно быть. Все нормально! Мы же возвратили код STATUS_DEVICE_CONFIGURATION_ERROR!

Но, внимание! Под VM Ware такой трюк не срабатывает, поскольку она не полностью эмулирует регистр cr0 и таких шуток в упор не понимает, вызывая завис гостевой оси. В этом случае можно закомментировать все строки, относящиеся к регистру cr0 и отключить защиту через реестр, создав соответствующий ключ редактором. Кстати говоря, если на целевой машине установлен SoftICE, то такой ключ уже создан, и ничего делать не надо.

Загрузим драйвер-убийцу, чтобы проверить справиться ли с ним наше средство против BSOD или нет. SoftICE (если он установлен) несколько раз всплывает. Вот зануда! Гони его прочь, нажимая «x» или <Ctrl-D>. Все равно голубой экран уже не появляется! Система жутко тормозит, но работает. Плохо то, что теперь NT никак не может сигнализировать, что произошел системный сбой и что нужно побыстрее сматывать ласты, совершая shutdown. Кстати, почему это не может сигнализировать?! Самое простое - добавить в нашу заплатку на KeBugCheckEx несколько ассемблерных строк, которые «бибикнут» спикером или сыграют семь-сорок на динамике. В принципе, можно даже разделить BugCheck-коды на категории, каждой из которой будет соответствовать свое число гудков. За примерами далеко ходить не надо. Их можно выдрать из любого DOS-вируса. Техника программирования спикера на уровне ядра та же самая, и она ничуть не изменилась.

Да много что можно сделать! Главное - фантазию иметь!

[жизнь после BSOD]

Мы пережили самую страшную катастрофу - BSOD, после которой нам все по плечу! Конечно, неразумно практиковать такой подход на сервере, но для рабочих станций он вполне приемлем. Проверено на мыщъх'иной шкуре! Кстати говоря, некоторые вирусы, черви и rootkit'ы используют схожую технику для маскировки своего присутствия в системе. Некорректно написанный вирус может вызвать синий экран, и в системном журнале появится соответствующая запись, помогающая администратору разобраться с проблемой. Если же перемкнуть KeBugCheckEx, то компьютер будет просто беспричинно тормозить (или виснуть), но в журнале ничего не появится!

Назад на стр. 085-114-6  Содержание  Вперед на стр. 085-114-8