Враг неведом Зайцев Олег Спецвыпуск: Хакер, номер #070, стр. 070-034-1 Руткиты и антируткиты – кто как программирует и кто как воюет Руткиты в настоящее время являются достаточно модной и популярной технологией. Руткит-маскировку применяют всевозможные зловреды и шпионские программы. В этой статье мы рассмотрим их виды, поковыряемся в их исходном коде и оценим программы, призванные с ними бороться. [история возникновения руткитов] Бытует мнение, что руткиты появились в последние несколько лет. Это, естественно, не так: идея руткита известна уже более десяти лет. Все началось еще во времена MS DOS – тогда большинство компьютерщиков были достаточно опытными и могли на глаз обнаружить появление вируса в системе по модификации размеров файлов. Следовательно, вирусописателям пришлось применять активные меры для маскировки своих детищ — и на свет появились так называемые стелс-вирусы (от англ. Stealth – невидимка). Таким образом, возникает вопрос: какая связь между вирусом (тем более древним) и руткитом? Ответ прост: они применяют совершенно идентичные методики. Во времена MS DOS аналогом API-функций были прерывания — следовательно, возникало два пути маскировки: 1. Перехват прерывания стандартным методом, путем модификации адреса в таблице прерываний; 2. Модификация машинного кода прерывания. Для борьбы с такими «руткитами» существовали специальные средства, работа которых сводилась к поиску и снятию перехватчиков прерываний, а также к прямому чтению диска. Последний метод активно применялся в ревизорах. [user-Mode руткиты] Работающие в UserMode руткиты, по моей статистике, наиболее распространены и многочисленны. На то есть несколько причин, основные из которых – возможность работы под Win9x и NT, простота разработки и отладки. Подобные руткиты можно писать практически на любом языке (даже на встроенном в офис бейсике). По принципу действия, руткиты UserMode можно разделить на несколько типов: * Руткиты, модифицирующие машинный код поражаемой программы. Это довольно экзотический вид, работа которого основана на анализе машинного кода программы и внесении в него модификаций. * Модификация таблицы импорта. * Модификация машинного кода API-функций. [руткиты, модифицирующие машинный код поражаемой программы] Руткиты данного типа не получили широкого распространения. Их принцип действия основан на том, что вместо перехвата API-функций модифицируется машинный код поражаемой программы. Естественно, что для реализации данного метода разработчик руткита должен предварительно изучить поражаемую программу, выбрать места для модификации и внедрения кода и подготовить сигнатуры, которые впоследствии позволят руткиту найти нужные фрагменты машинного кода и модифицировать их. Данный метод неприменим для глобального перехвата, но с успехом может применяться для внедрения перехватчиков в некую заранее известную программу. [руткиты, основанные на модификации таблицы импорта] По статистике, это одна из самых распространенных разновидностей. Теорию и практический пример установки подобного перехвата был в свое время подробно описан в книге Рихтера. Суть метода сводится к тому, что у PE имеется таблица импорта, содержащая адреса статически импортируемых функций. Следовательно, руткит может найти эту таблицу в памяти, просмотреть ее и подменить адреса интересующих его функций адресами собственных перехватчиков. |