3 Классификация руткитов

По уровню привилегий

Уровня пользователя (user-mode)

Уровня ядра (kernel-mode)

По принципу действия

изменяющие алгоритмы выполнения системных функций (Modify execution path)

изменяющие системные структуры данных (Direct kernel object manupulation)

Рис. 1. Классификация руткитов

4 Методы перехвата API функций в режиме пользователя (user mode)

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

Перехват функций позволяет RootKit модифицировать результаты их работы – например, перехват функции поиска файла на диске позволяет исключить из результатов поиска маскируемые файлы, а перехват функций типа ntdll.ZwQuerySystemInformation позволяет замаскировать запущенные процессы и загруженные библиотеки.

4.1 Принцип вызова API функции

Перед рассмотрением принципов работы RootKit пользовательского режима необходимо кратко и упрощенно рассмотреть принцип вызова функций, размещенных в DLL.

Известно два базовых способа:

1.Раннее связывание (статически импортируемые функции).

Этот метод основан на том, компилятору известен перечень импортируемых программой функций. Опираясь на эту информацию, компилятор формирует так называемую таблицу импорта EXE файла. Таблица импорта – это особая структура (ее местоположение и размер описываются в заголовке EXE файла), которая содержит список используемых программой библиотек и список импортируемых из каждой библиотеки функций. Для каждой функции в таблице имеется поле для хранения адреса, но на стадии компиляции адрес не известен. В процессе загрузки EXE файла система анализирует его таблицу импорта, загружает все перечисленные в ней DLL и производит занесение в таблицу импорта реальных адресов функций этих DLL. У раннего связывания есть существенный плюс – на момент запуска программы все необходимые DLL оказываются загруженными, таблица импорта заполнена – и все это делается системой, без участия программы. Но отсутствие в процессе загрузки указанной в его таблице импорта DLL (или отсутствие в DLL требуемой функции) приведет к ошибке загрузки программы. Кроме того, очень часто нет необходимости загружать все используемые программой DLL в момент запуска программы. На рисунке показан процесс раннего связывания – в момент загрузки происходит заполнение адресов в таблице импорта (шаг 1), в момент вызова функции из таблицы импорта берется адрес функции (шаг 2) и происходит собственно вызов функции (шаг 3);

Рис.2 Раннее связывание

2.Позднее связывание.

Отличается от раннего связывания тем, что загрузка DLL производится динамически при помощи функции API LoadLibrary. Эта функция находится в kernel32.dll, поэтому если не прибегать к хакерским приемам, то kernel32.dll придется загружать статически. При помощи LoadLibrary программа может загрузить интересующую ее библиотеку в любой момент времени. Соответственно для получения адреса функции применяется функция kernel32.dll GetProcAddress. На рисунке шаг 4 соответствует загрузке библиотеки при помощи LoadLibrary и определению адресов при помощи GetProcAddress. Далее можно вызывать функции DLL (шаг 5), но естественно при этом таблица импорта не нужна. Чтобы не вызывать GetProcAddress перед каждым вызова функции из DLL программист может однократно определить адреса интересующих его функций и сохранить их в массиве или некоторых переменных.

Независимо от метода связывания системе необходимо знать, какие функции экспортирует DLL. Для этого у каждой DLL имеется таблица экспорта – таблица, в которой перечислены экспортируемые DLL функции, их номера (ординалы) и относительные адреса функций (RVA).

4.2 Модификация машинного кода прикладной программы.

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

Рис.3 Модификация машинного кода прикладной программы

4.3 Модификация таблицы импорта

Данная методика описана в книге Рихтера и является одной из классических. Идея метода проста – RootKit находит в памяти таблицу импорта программы и исправляет адреса интересующих его функций на адреса своих перехватчиков (естественно, он предварительно где-то у себя запоминает правильные адреса). В момент вызова API функции программа считывает ее адрес из таблицы импорта и передает по этому адресу управление. Методика универсальна, но у нее есть существенный недостаток (и его хорошо видно на схеме) - перехватываются только статически импортируемые функции. Но есть и плюс – методика очень проста в реализации и есть масса примеров, демонстрирующих ее реализацию. Поиск таблицы импорта в памяти не представляет особой сложности, поскольку для этого существуют специализированные API функции, позволяющие работать с образом программы в памяти. Исходный текст такого перехватчика на языке C занимает несколько листов печатного текста;

Рис. 4 Модификация таблицы импорта


Информация о работе «Руткиты»
Раздел: Информатика, программирование
Количество знаков с пробелами: 23201
Количество таблиц: 0
Количество изображений: 8

Похожие работы

Скачать
21396
0
0

... на работу компьютера, является вирусом. Существуют следующие основные виды вредоносного ПО: ·  Троянские кони, программные закладки и сетевые черви; ·  Вирусы; ·  Шпионское ПО; ·  Руткиты; ·  Прочие вредоносные программы. 2.1 Троянские кони, программные закладки и сетевые черви Троянский конь – это программа, содержащая в себе некоторую разрушающую функцию, которая активизируется при ...

Скачать
38028
0
0

... адресам вашей адресной книги. Именно поэтому при подозрении на заражение лучше всего сразу отключиться от интернета. Запустите полную проверку компьютера. 4. Методы защиты от вредоносных программ Стопроцентной защиты от всех вредоносных программ не существует: от эксплойтов наподобие Sasser или Conficker не застрахован никто. Чтобы снизить риск потерь от воздействия вредоносных программ, ...

Скачать
96484
2
43

... Pro 2008 по результатам тестирования брандмауэров в лаборатории Matousec показал наилучшие результаты даже при настройках по умолчанию. Глава 3. Разработка рекомендаций по составу программного комплекса для защиты информации в ЛВС Кунгурского сельскохозяйственного колледжа Прежде, чем рекомендовать состав программного комплекса по защите информации в ЛВС КСХК. Необходимо реализовать политику ...

Скачать
43281
0
1

... проберутся на ваш жесткий диск, вы можете лишиться данных, у вас могут быть украдены пароли; вероятны и многие другие неприятности. Windows, к сожалению, не располагает собственными средствами антивирусной защиты, если не брать в расчет антивирус от McAfee, включенный в пакет Microsoft Plus 98. Хорошо, что на свете существует множество независимых программ для отлова программной заразы... Самые ...

0 комментариев


Наверх