Борьба с Ring0 троянами: оригинальный способ противодействия зловредному программному обеспечению на рабочих местах
ОДНОЙ ИЗ ЗАДАЧ ДЛЯ СПЕЦИАЛИСТА ПО IT-БЕЗОПАСНОСТИ ЯВЛЯЕТСЯ СВОЕВРЕМЕННЫЙ
ПОИСК И ВЫЯВЛЕНИЕ ТРОЯНСКИХ ПРОГРАММ НА КОМПЬЮТЕРАХ ПОЛЬЗОВАТЕЛЕЙ. В ЭТОЙ СТАТЬЕ
МЫ РАССМОТРИМ ОРИГИНАЛЬНЫЙ СПОСОБ ВЫЯВЛЕНИЯ И УДАЛЕНИЯ RING0 ТРОЯНОВ БЕЗ
ИСПОЛЬЗОВАНИЯ ДОРОГОСТОЯЩИХ ПРОГРАММНЫХ КОМПЛЕКСОВ И ПРИВЛЕЧЕНИЯ СТОРОННИХ
СПЕЦИАЛИСТОВ.
Теневая IT-коммерция
По данным экспертов, в 2006 году теневой доход, полученный в результате
незаконной деятельности в сфере IT, превысил аналогичные показатели в сфере
сбыта наркотиков. Основными подвигами этой отрасли является незаконная реклама в
виде рассылки спама и атака определенных сетевых ресурсов. Поскольку для решения
этих задач требуются большие вычислительные мощности, хакеры придумали, каким
образом можно нелегально брать в аренду чужие компьютеры. Для этого создаются
так называемые бот-сети (трудно представить, что всего 4-6 лет назад о них знали
только избранные). Эта сеть состоит из серверов и клиентов (впрочем, и те и
другие представляют собой пользовательские компьютеры, пораженные
соответствующими зловредами).
Технологическая» цепочка
- Заказчик платит деньги за аренду сети под рассылку спама или атаки на
сетевой ресурс;
- Хакер устанавливает на серверы задачу;
- Каждый клиент периодически соединяется с сервером, чтобы получить новую
работу или обновления трояна.
Обзор
Чтобы эффективно бороться со зловредным программным обеспечением, нужно
немного представлять основные принципы их работы.
Все зловреды делятся на две большие группы - это ring3 и ring0 трояны, в виде
программы или драйвера соответственно.
Про ring3 трояны мы говорить не будем, поскольку они уже давно побеждены
антивирусами, файрволами, проактивными защитами или просто умелыми руками.
Практический же интерес составляют трояны-драйверы (далее - просто трояны),
поскольку, работая на уровне ядра, они имеют самые высокие привилегии.
Антивирусы, файрволы и проактивные защиты тоже имеют свои драйверы, но хакер
заранее может найти слабые места этих программных продуктов и заложить
соответствующие алгоритмы поведения в своего зловреда.
В настоящее время мы являемся свидетелями постоянной борьбы между хакерами,
открывающими дырки, и производителями ОС или анти-троянского ПО.
Сейчас существует огромное количество анти-троянов (как платных, так и
бесплатных), но «воз и ныне там». Логично предположить, что рано или поздно
должен был найтись достаточно универсальный и надежный способ, и такой способ
нашелся!
Алгоритм действия
Попадая в систему, зловредный программный продукт прежде всего должен
обеспечить свою загрузку при рестарте системы. Для этого он создает запись в
специальном разделе реестра - [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services].
Каждая запись имеет следующий формат:
DisplayName
Экранное имя, отображаемое служебными приложениями на экране. Этот параметр
необязателен. При его отсутствии именем считается имя подраздела.
ErrorControl
Определяет, каким образом реагировать на ошибки.
ImagePath
Путь к исполняемому файлу драйвера или службы.
Для драйверов не обязательно указывать значение этого параметра, но тогда
файл драйвера должен находиться в каталоге \%SystemRoot%\System32\Drivers.
Start
Указывает, как нужно запускать драйвер.
Значение 2 - драйвер запускается автоматически на этапе загрузки системы.
Значение 3 - драйвер запускается по требованию.
Type
Определяет тип службы.
Значение 1 обозначает драйвер.
Разумеется, троян, так наследивший при установке, обязательно должен сокрыть
факт своего присутствия, спрятав запись реестра и файл драйвера на диске. Для
реализации этого он перехватывает функции ядра и при каждом вызове этих функций
эмулирует отсутствие скрываемых объектов. В современном представлении трояна,
технологии сокрытия имеют один из самых важных аспектов. Эти технологии носят
название rootkit. Обнаружив действие руткита, можно со 100% гарантией говорить и
о наличии в системе трояна. Стереотипом обнаружения руткитов в анти-троянском ПО
является проверка целостности кода ядра системы и легальности стека вызовов
функций. Мы же пойдем другим путем! Мы будем получать информацию раздела реестра
описания драйверов с помощью операционной системы и с помощью утилит, которые не
используют функции ОС для работы реестра, а потом будем сравнивать эту
информацию. Если она различается – мы нашли руткит!
Практика
Как мы уже говорили, самое слабое место трояна - это загрузка. Троян обязан
прописать себя в реестре в разделе драйверов, иначе он просто не загрузится при
следующем старте системы. Именно здесь мы и будем его ловить, сравнивая два
дампа реестра.
Первый дамп мы сделаем стандартными средствами ОС, а точнее, с помощью
встроенного в Windows редактора реестра regedit.
Второй дамп мы сделаем утилитой, которая читает реестр непосредственно из
файла, при этом не обращаясь к функциям ОС. Если какой-то драйвер скрывает свое
присутствие, при сравнении вылезут расхождения, а каждое расхождение - это
скрытый драйвер.
Технология состоит из следующих этапов:
1. С помощью встроенного в Windows редактора реестра regedit мы экспортируем
раздел реестра [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services]
2. Копируем файл реестра (%windir%\system32\config\system). Поскольку все
файлы реестра заблокированы и недоступны для каких бы то ни было действий, мы
будем использовать утилиту RegCopy.exe, которая считывает файл реестра по
кластерам, обращаясь к диску напрямую, минуя стандартные функции ОС.
3. С помощью утилиты RegView мы открываем этот файл и делаем еще один экспорт
этой ветки реестра.
4. Сравниваем два файла. Поскольку сравнивать эти файлы вручную очень сложно,
я написал утилиту для их сравнения - RegistryCompare.exe. Чтобы воспользоваться
ей, дампы п1 и п3 нужно назвать orig.reg и raw.reg соответственно, и лежать они
должны в папке с исполнимым файлом программы. Сравнивать эти файлы вручную
крайне сложно, я написал утилиту для их сравнения - RegistryCompare.exe
Практиковаться мы будем на рутките Unreal.a (многие трояны используют его
модификации для сокрытия в реестре и на диске).
Итак, запускаем руткит.
Далее копируем файл реестра, запустив RegCopy.exe. Теперь с помощью RegView
делаем экспорт нужной ветки, нажав F2 и не забыв назвать файл именем raw.reg.
Остается сделать то же самое с помощью regedit и запустить RegistryCompare.exe.
Поиск завершен
Вот так, произведя несколько несложных действий, мы можем свести на нет
могучие усилия высококвалифицированных rootkit-developer'ов. Весьма вероятно,
что со временем программисты могут многое придумать для обхода этого метода. Тем
не менее, и наши ответные действия не ограничены представленным алгоритмом –
например, пункты 2-4 можно выполнить на другой ОС (переставив HDD на другой ПК)
или загрузиться с параллельно установленной ОС, а 1 пункт выполнить на системе с
трояном. Проверяя реестр на другой ОС, нам теперь не надо копировать его с
помощью специальных утилит, поскольку файл не заблокирован - т.е. 2 пункт
выполняем вручную.
МНЕНИЕ РЕДАКЦИИ
Лозовский Александр, редактор рубрики «БЕЗОПАСНОСТЬ»
Читателю, знакомому с ситуацией на антивирусном рынке образца середины 90-х
годов этот способ наверняка напомнит в чем-то аналогичную ситуацию с принципом
работы антивирусного ревизора ADInf:
Так как стелс-вирусы перехватывают обращения к дисковой подсистеме компьютера
и скрывают присутствие вируса, ADinf считывает информацию с диска, минуя
операционную систему. Для чтения диска ADinf обращается непосредственно к
соответствующей функции BIOS, записанной в ПЗУ компьютера. В этом случае вирус
не может перехватить обращение к диску, и ADinf получает достоверную информацию.
Как видите, прошло уже более 10 лет, и зловредное программное обеспечение из
неких активно скрывающихся и противодействующих обнаружению «произведений
искусства», показывающих мастер-класс своего создателя, превратилось в мощное
орудие для незаконного заработка денег, а принципы их поиска остались в чем-то
похожими.
Мнение эксперта
Deeoni$, программист в сфере IT-безопасности
На данный момент нет средств, дающих 100% гарантию от проникновения руткитов
в систему. Метод, описанный в данной статье, конечно, позволяет обнаружить
большинство модулей, загружаемых в ядро ОС, но, прибегнув к небольшой хитрости,
загрузка драйвера уже не будет прописана в ключе HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services.
Например, можно прописать программу-загрузчик драйвера в ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,
которой будет создавать нужный ключ для подгрузки драйвера, загружать его, а
потом сразу же удалять этот ключ. Драйвер в свою очередь уже будет скрывать
параметр в ключе Run. Есть еще более радикальный метод – зашифровать файлы
реестра и расшифровывать их только при обращении к ним «доверенных» приложений.
Данный трюк исключает возможность доступа к реестру из другой ОС.
Помимо документированного способа загрузки модулей режима ядра (через
реестр), есть множество «хакерских» способов, доступных из-за ошибок в коде
Windows. Таким образом, предложенный в статье метод не панацея, и является лишь
одной из возможных частей комплекса по обнаружению и противодействию руткитам.
|
Обсуждение статьи
|
|
|
|
RE: Борьба с Ring0 троянами: оригинальный способ противодействия зловредному программному обеспечению на рабочих местах Rootkitrevealer от Sysinternals делает как раз то, чтьо описано в статье, только помимо реестар проверяет еще и фаловую систему. А так статья очень интересная, спасибо. |
|
RE: Борьба с Ring0 троянами: оригинальный способ противодействия зловредному программному обеспечению на рабочих местах Пожалуйста, выложите RegCopy.exe, RegView, RegistryCompare.exe - поисковик не помог. Спасибо! |
|
|
Keywords: zPOSTz zSECURITYz z10058z
Для Авторов: edit delete
Автор: N|M {INT3 TEAM} Дата: 26.01.2009 12:13:43©
|