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

Ядерные шалости

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

Хакер, номер #091, стр. 091-082-2


Off-line patch правит ядро (и при необходимости другие файлы) еще до его загрузки в память, что придает исправлениям этого типа наивысший приоритет. Полномочия off-line патчера практически ничем не ограничены, и для модификации ядра всего лишь требуется иметь права администратора на локальной машине. Доступ к файлу системой _не_ блокируется (!), а изменения вступают в силу сразу же после перезагрузки, которую с администраторскими правами устроить очень легко, хоть и не всегда удобно. В тех случаях, когда перезагрузка неуместна или нежелательна, прибегают к on-line patch'у с динамической загрузкой драйвера. Естественно, правка ntoskrnl.exe встречает сопротивление со стороны SFC, но эту проблему можно решить, даже не отключая SFC (и чуть позже мы покажем как). Хуже другое: если несколько программ начинают править ядро, то образуется такая мешанина, что система впадает в голубой экран или начинает вести себя совершенно неадекватно. Также необходимо позаботиться о том, чтобы установка новых пакетов обновления (то есть Service Pack'ов) не конфликтовала с хакнутым ядром. В общем, здесь есть о чем поговорить!

On-line patch

Даже находясь в нулевом кольце, непосредственно модифицировать память, принадлежащую ядру, нельзя. Дело в том, что все драйвера выполняются в едином адресном пространстве, общим с ядром, и без защиты от непредумышленной записи, система постоянно страдала бы от некорректно работающих драйверов, спроектированных непонятно кем.

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

Статическое отключение защиты сводится к созданию параметра EnforceWriteProtection типа REG_DWORD со значением 0h в следующем разделе системного реестра HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\ (cм. рис. 1), после чего ядро может модифицировать любой драйвер (но не прикладная программа!).

Основной недостаток этого способа в том, что некоторые сторожа следят за этой веткой, и стоит только тронуть ее, как они поднимают дикий визг, а то и просто молчаливо удаляют EnforceWriteProtection, возвращая защиту назад. С другой стороны, некоторые честные программы, например тот же soft-ice, именно так и работают, поэтому слишком ретивые сторожа рискуют отправиться в мусорную корзину, где им самое место. Правда, подавляющее большинство нормальных людей с soft-ice не работают, и статическое отключение защиты им ни к чему.

Динамическое отключение защиты осуществляется сбросом WP-бита в управляющем регистре CR0, который так и расшифровывается — Write Protection. Соответственно, повторная установка бита обратно включает защиту.

Назад на стр. 091-082-1  Содержание  Вперед на стр. 091-082-3