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

убийство часового

КРИС КАСПЕРСКИ, АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #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 нужно установить, что и делают следующие машинные команды.

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