| ASHKENSO | Дата: Воскресенье, 27.02.2011, 18:31 | Сообщение # 1 |
|
Полковник
Группа: Администраторы
Сообщений: 331
Статус: Offline
| Hacker Defender относится к первому типу (модификация пути исполнения). Также по этому принципу работают Vanquish и AFX Rootkit. Руткиты уровня ядра менее распространены. Самыми известными руткитами этой группы являются FU и PHIDE. Одним из популярных методов, используемых руткитами, является перехват API-вызовов. Самое интересное, что этот метод очень хорошо документирован самой же корпорацией Microsoft. Ясно, что первоначально он разрабатывался не для создания руткитов, но авторы руткитов с удовольствием его использовали. Рассмотрим перехват API-вызовов на примере Hacker Defender. Перехват - это замена первых байтов кода API-функции инструкцией безусловного перехода к коду другой функции, находящейся в адресном пространстве программы. Для этого вычисляется адрес нужной функции, потом в памяти отводится место для кода нового варианта функции и ее исходного кода, который также сохраняется - для последующего использования. Когда программа пользователя вызывает API-функцию (пусть ту же NtQuerySystemlnformation), вызов передается функции предварительной обработки данных, которая может вызвать исходную функцию, а та, в свою очередь, вызовет функцию обработки результатов и передаст ей все результаты (информацию обо всех запущенных процессах). Функция обработки результатов может удалить некоторые записи, например, запись, содержащую сведения о самом исполняемом файле руткита. Получается, что пользователь видит не реальный список процессов, а модифицированный руткитом список. Перехват API-функций можно реализовать и на уровне ядра. При переходе на нулевое кольцо защиты API-функции пользовательского уровня вызывают прерывание 0х2Е. В качестве параметра этому прерыванию передается индекс необходимой функции - в нашем случае функции ZwQuerySystemlnf ormation. По индексу функции, используя таблицу SSDT (System Services Dispatch Table), можно узнать адрес любой низкоуровневой функции. Таблица SSDT загружается программой ntoskrnl.exe. По сути, программа ntoskrnl.exe является микроядром NT Некоторые руткиты (но не Hacker Defender) модифицируют адрес в таблице SSDT так, чтобы он указывал на функцию, которая создана самим руткитом. Этого можно добиться, написав отдельный модуль руткита, который функционирует как драйвер устройства. Можно, конечно, из обычного пользовательского приложения при наличии соответствующих полномочий управлять устройством \dev\physicalmemory, позволяющим напрямую работать с памятью ядра. Далее принцип такой же, как и в случае с обычной API-функцией: сначала запускается функция предварительной обработки, которая выполняет определенные действия, а затем запускает код исходной функции. После этого вызывается функция обработки результатов, которая приводит результат к виду, необходимому руткиту. Данную технику, кстати, используют не только руткиты, но и программы, защищающие компьютер от руткитов. Некоторые руткиты, например FU, работают иначе. Зачем изменять функции, если мы уже добрались до нулевого кольца защиты? Ведь гораздо проще модифицировать сразу системную таблицу. Руткит FU модифицирует список PsActiveProcessList, просматриваемый функцией ZwQuerySystemlnformation, удаляя оттуда сведения о себе и о процессах, которые он должен скрыть. Удаление процесса из списка не приводит к завершению этого процесса, поскольку распределение процессорного времени в Windows основано не на процессах, а на потоках. Список PsActiveProcessList - двусвязный, то есть он содержит указатели на предыдущий и последующий процессы в списке. Точно так же, изменяя системные таблицы, руткит может скрывать файлы и порты, повышать приоритеты процессов и многое другое.
|
| |
|
|