Методы модификации ядра
Перехват системных функций, взлом защитных механизмов, перезапись логотипа— все эти действия требуют модификации ядра, сосредоточенного в файле ntoskrnl.exe. Модифицировать ядро можно как на диске (off-line patch), так и в памяти (on-line patch). Каждый способ имеет свои достоинства и недостатки, поэтому опытный хакер должен в равной мере владеть и тем, и другим.
On-line patch возможен только из драйвера или из прикладного режима через псевдоустройство \Device\PhysicalMemory, которое вплоть до Windows 2003 Server SP1 было доступно администратору, а после — закрыто даже для пользователя типа "system" (см. www.microsoft.com/technet/prodtechnol/windowsserver2003/library/BookofSP1/e0f862a3-cf16-4a48-bea5-f2004d12ce35.mspx, там будет заметка под именем "Changes to Functionality in Microsoft Windows Server 2003 Service Pack 1 Device\PhysicalMemory Object"). Драйвера (и тем более прикладные программы!) грузятся после ядра и грузятся самим ядром, которое их может вообще не грузить, если отсутствует цифровая подпись или ядру что-то "не нравится". Кроме того, любой успешно загруженный драйвер может заблокировать загрузку всех последующих или помешать им осуществить перехват системных функций, равно как и любую другую намеченную ими операцию. В борьбе с малварью и антивирусными сторожами очередность загрузки становится очень актуальной, но ни у одной из сторон нет 100% гарантии того, что ее драйвер загрузиться первым. К тому же, если ядро сообщает о завершении испытательного строка или отправляет систему в reboot еще до загрузки любых драйверов (что практиковалось в ранних версиях NT), то никакой on-line patch тут не поможет! Кстати говоря, факт вмешательства в ядро легко обнаруживается тривиальным сравнением образа ntoskrnl.exe с дисковым файлом. Дезактивация перехвата осуществляется восстановлением "испорченных" байт, позаимствованных из оригинала. И хотя перехватчик, желающий остаться незамеченным, может (и должен!) отслеживать все обращения к ntoskrnl.exe – многие разработчики об этом забывают...
Off-line patch правит ядро (и, при необходимости, другие файлы) еще до его загрузки в память, что придает исправлениям этого типа наивысшей приоритет. Полномочия off-line патчера практически ничем не ограничены и для модификации ядра всего лишь требуется иметь права администратора на локальной машине. Доступ к файлу системой _не_ блокируется (!), а изменения вступают в силу сразу же после перезагрузки, которую с администраторскими правами устроить очень легко, хоть и не всегда удобно. В тех случаях, когда перезагрузка неуместна или нежелательна прибегают к on-line patch'у с динамической загрузкой драйвера. Естественно, правка ntoskrnl.exe встречает сопротивление со стороны SFC, но эту проблему можно решить даже не отключая SFC (и чуть позже мы покажем как). Хуже другое — если несколько программ начинают править ядро, то образуется такая мешанина, что система впадает в синий экран или начинает вести себя совершенно неадекватно. Так же необходимо позаботиться о том, чтобы установка новых пакетов обновления (т. е. Service Pack'ов) не конфликтовала с хакнутым ядром. В общем, здесь есть о чем поговорить!