Бреславец
А.С.
Национальный
горный университет
Возможности
rootkit-технологий и их обнаружение
Одной из самых больших проблем для авторов
вредоносных программ всегда была невозможность длительного сохранения
присутствия стороннего кода в системе незаметным для пользователя, а в идеале —
и для антивирусных средств. В последнее время, когда написание вредоносного
программного обеспечения превратилось из занятия «для души» в прибыльный, хотя
и криминальный бизнес, задача «сокрытия следов» становится особенно актуальной
для хакеров-бизнесменов. Каким же образом можно скрыть программу, ворующую
банковские реквизиты, или нелегальный прокси-сервер, предназначенный для
рассылки спама, от хозяина компьютера?
Современные киберпреступники решают эту проблему
точно так же, как ее решали «киберхулиганы» 10-15 лет назад. Одним из первых
известных вирусов для PC был Virus.Boot.Brain.a — загрузочный вирус, который
перехватывал системные функции доступа к диску и при чтении загрузочного
сектора (например, антивирусной программой) подставлял на место зараженных оригинальные
данные. Со временем те же самые stealth-механизмы (перехват системных функций и
подмена возвращаемых ими данных) стали использоваться в Windows-вирусах
(Virus.Win32.Cabanas.a).
В мире UNIX вредоносные программы пока не получили
такого распространения, как в DOS и Windows, однако именно оттуда пришел термин
rootkit, который сейчас часто используется для обозначения stealth-технологий,
применяемых авторами троянских программ под Windows.
Изначально термин rootkit — это набор программ,
позволяющих хакеру закрепиться на взломанной машине и предотвратить свое
обнаружение. Для этого подменяются системные исполняемые файлы (login, ps, ls,
netstat и т.п.) или системные библиотеки (libproc.a), либо устанавливается модуль
ядра — все с той же целью: перехватить попытки пользователя получить истинную
информацию о том, что происходит на его компьютере.
Rootkit-технологии для Windows
Сокрытие присутствия
в системе
В настоящее время используемые rootkit методы
сокрытия присутствия в системе можно разделить на две группы:
·
модификация пути
выполнения обработчиков;
·
модификация
системных структур.
Данные методы используются для сокрытия сетевой
активности, ключей реестра, процессов, т.е. всех тех особенностей, который в
той или иной мере позволяют пользователю обнаружить у себя на компьютере
вредоносную программу.
Первый метод сокрытия информации может быть
реализован как для режима пользователя, так и для режима ядра. Чаще других для
модификации пути выполнения обработчиков здесь используется способ, основанный
на перехвате вызов API-функций
Данный способ основан на использовании особенности
вызовов системных API-функций, которые производятся приложениями либо через
специальные области данных (таблицы импорта/экспорта), либо обращением через
полученный с помощью API-функции GetProcAddress адрес. Программный код реализуется
в DLL-модулях, которые затем внедряются в адресные пространства существующих в
системе процессов, что дает злоумышленнику возможность контролировать все
пользовательские приложения. Рассмотренный процесс модификации пути выполнения
обработчиков хорошо документирован и прост в реализации, что облегчает его
использование в rootkit.
Но вместе с этим преимуществом подобная
реализация, как и другие реализации rootkit пользовательского режима, обладает
существенным недостатком — низким качеством сокрытия информации. Это означает,
что присутствие в системе rootkit пользовательского режима без труда можно
обнаружить с помощью специализированных утилит. Именно этой причиной обусловлен
отмеченный в последнее время рост интереса к rootkit-технологиям режима ядра,
несмотря на более высокую сложность их разработки.
Методы, используемые rootkit режима ядра, обладают
несравнимо более высоким качеством сокрытия информации. Подавляющее большинство
rootkit режима ядра используют недокументированные структуры операционной системы.
Например, широко используется перехват обработчиков из таблицы
KeServiceDescriptorTable, количество сервисов в которой может изменяться от
версии к версии операционной системы, что заставляет разработчиков rootkit
прибегать к проведению дополнительного анализа системного кода для определения
указателей на обработчики в вышеупомянутой таблице. По принципу реализации
данный подход очень напоминает перехват API-функций.
Обнаружение rootkit
В противостоянии rootkit и средств их обнаружения
первые всегда будут впереди. Подобная ситуация обусловлена постоянным
появлением новых rootkit-технологий и неминуемой необходимостью их анализа
разработчиками антивирусного ПО для создания средств обнаружения.
К сожалению, нельзя дать универсальных
рекомендаций по обнаружению rootkit, но приведенные ниже
действия позволят обнаружить большинство современных rootkit:
1. Исследование аномального поведения файлов,
использования сети, запуска задач по расписанию и в момент загрузки,
регистрационных записей пользователей.
2. Использование специальных утилит, которые
помогают выявить присутствие rootkit в системе, например,
таких, как DiamondCS ProcessGuard, InfoProcess AntiHook, Sysinternals RootkitRevaler, F-Secure BlackLight Beta.
Литература:
1.
Касперски К.
Компьютерные вирусы изнутри и снаружи. – СПб.: Питер, 2006. -507 с.: ил.
2.
Касперски К. Записки
исследователя компьютерных вирусов. – СПб.: Питер, 2005. -507 с.: ил.