убийство часового КРИС КАСПЕРСКИ, АКА МЫЩЪХ Спецвыпуск: Хакер, номер #072, стр. 072-072-2 Рабочие станции – другое дело. Новое железо появляется чуть ли не ежедневно, и по сложившейся традиции вместе с ним идет драйвер, разработанный производителем, нанявшим двух голодных китайских студентов, которые ваяют его параллельно с изучением DDK. Вот так и появляются драйвера, запускающиеся лишь на машинах их создателей и вместо использования документированных интерфейсов за каким-то хреном лезущие в глубь ядра. Последствия такого подхода известны — нестабильность, плохая совместимость с различными версиями NT, бесконечные голубые экраны смерти... Но не стоит валить в одну кучу «пионерство» и системное программирование. Ядро экспортирует множество функций (как документированных, так и нет), но самые интересные оставляет внутри себя, не представляя к ним никаких рычагов управления. Вот и приходится вламываться в ядро, нарушая все запреты. Отдельного разговора заслуживают rootkit'ы, модифицирующие ядро в целях своей маскировки. Для этого они перехватывают функции, работающие с файлами, процессами, сетевыми соединениями, и «вычищают» всякое упоминание о себе. Какому пользователю понравится, что на его машине работает нечто, о чем он даже не подозревает, и делает вещи, в которых он не нуждается? Например, устанавливает backdoor или ворует конфиденциальную информацию. Попытки защитить ядро предпринимались задолго до выхода Висты. Начиная с W2K, Microsoft предприняла первый радикальный шаг для защиты ядра от зловредных драйверов, так и норовящих модифицировать кое-что. Однако для сохранения обратной совместимости с уже написанными программами была предусмотрена лазейка, отключающая защиту, а точнее целых пять: 1 УСТАНОВКА ПАРАМЕТРА ENFORCEWRITEPROTECTION ТИПА DWORD-ВЕТКИ СИСТЕМНОГО РЕЕСТРА HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\SESSIONMANAGER\MEMORYMANAGEMENT В «0» (ИЗМЕНЕНИЯ ВСТУПЯТ В СИЛУ ТОЛЬКО ПОСЛЕ ПЕРЕЗАГРУЗКИ). 2 СБРОС ФЛАГА WP (WRITEPROTECT) В УПРАВЛЯЮЩЕМ РЕГИСТРЕ CR0 (СМ. ЛИСТИНГ 1, 2), — НЕ ТРЕБУЕТ ПЕРЕЗАГРУЗКИ, НО ДОСТУПНО ТОЛЬКО ИЗ РЕЖИМА ЯДРА. 3 РЕПАМИНГ СТРАНИЦ — ОТОБРАЖАЕМ ФИЗИЧЕСКИЙ АДРЕС СТРАНИЦЫ, КОТОРУЮ МЫ ХОТИМ МОДИФИЦИРОВАТЬ, НА ВИРТУАЛЬНОЕ АДРЕСНОЕ ПРОСТРАНСТВО «СВОЕГО» ПРОЦЕССА ПОСРЕДСТВОМ ВЫЗОВА ФУНКЦИИ NTMAPVIEWOFSECTION. НАЗНАЧАЕМ ВСЕ НЕОБХОДИМЫЕ ПРАВА И АТРИБУТЫ, ПОСЛЕ ЧЕГО ДЕЛАЕМ С НЕЙ ВСЕ, ЧТО ХОТИМ! ТАКИМ ОБРАЗОМ, МОЖНО ОТКРЫТЬ ДОСТУП К ЯДРУ ДАЖЕ С ПРИКЛАДНОГО УРОВНЯ, ПРИЧЕМ БЕЗ ПЕРЕЗАГРУЗКИ! 4 ЗАПИСЬ В ПСЕВДОУСТРОЙСТВО PHYSICALMEMORY, ПРЕДСТАВЛЯЮЩЕЕ СОБОЙ ОБРАЗ ФИЗИЧЕСКОЙ ПАМЯТИ ДО ТРАНСЛЯЦИИ ВИРТУАЛЬНЫХ АДРЕСОВ И ПОЗВОЛЯЮЩЕЕ МОДИФИЦИРОВАТЬ ПАМЯТЬ ЯДРА ДАЖЕ С ПРИКЛАДНОГО УРОВНЯ, ОБЛАДАЯ ВСЕГО ЛИШЬ ПРАВАМИ АДМИНИСТРАТОРА И БЕЗ ПЕРЕЗАГРУЗКИ (СМ. ЛИСТИНГ 3). 5 МОДИФИКАЦИЯ ФАЙЛА NTOSKNRL.EXE НА ДИСКЕ — САМЫЙ УРОДЛИВЫЙ СПОСОБ ИЗ ВСЕХ, ТРЕБУЮЩИЙ ОБХОДА SFC, КОРРЕКЦИИ КОНТРОЛЬНОЙ СУММЫ EXE-ФАЙЛА, ПЕРЕЗАГРУЗКИ, И К ТОМУ ЖЕ ВЫЗЫВАЮЩИЙ СЕРЬЕЗНЫЕ КОНФЛИКТЫ ПРИ УСТАНОВКЕ SERVICE PACK'ОВ. Листинг 1. Код, отключающий защиту ядра от записи. Соответственно, чтобы включить защиту, бит WP нужно установить, что и делают следующие машинные команды. |