Борьба с Ring0 троянами: оригинальный способ противодействия зловредному программному обеспечению на рабочих местахИсточник: itspecial
Одной из задач для специалиста по IT-безопасности является своевременный поиск и выявление троянских программ на компьютерах пользователей. В этой статье мы рассмотрим оригинальный способ выявления и удаления RING0 троянов без использования дорогостоящих программных комплексов и привлечения сторонних специалистов. Теневая IT-коммерцияПо данным экспертов, в 2006 году теневой доход, полученный в результате незаконной деятельности в сфере IT, превысил аналогичные показатели в сфере сбыта наркотиков. Основными подвигами этой отрасли является незаконная реклама в виде рассылки спама и атака определенных сетевых ресурсов. Поскольку для решения этих задач требуются большие вычислительные мощности, хакеры придумали, каким образом можно нелегально брать в аренду чужие компьютеры. Для этого создаются так называемые бот-сети (трудно представить, что всего 4-6 лет назад о них знали только избранные). Эта сеть состоит из серверов и клиентов (впрочем, и те и другие представляют собой пользовательские компьютеры, пораженные соответствующими зловредами). Технологическая" цепочка
ОбзорЧтобы эффективно бороться со зловредным программным обеспечением, нужно немного представлять основные принципы их работы. Все зловреды делятся на две большие группы - это ring3 и ring0 трояны, в виде программы или драйвера соответственно. Про ring3 трояны мы говорить не будем, поскольку они уже давно побеждены антивирусами, файрволами, проактивными защитами или просто умелыми руками. Практический же интерес составляют трояны-драйверы (далее - просто трояны), поскольку, работая на уровне ядра, они имеют самые высокие привилегии. Антивирусы, файрволы и проактивные защиты тоже имеют свои драйверы, но хакер заранее может найти слабые места этих программных продуктов и заложить соответствующие алгоритмы поведения в своего зловреда. В настоящее время мы являемся свидетелями постоянной борьбы между хакерами, открывающими дырки, и производителями ОС или анти-троянского ПО. Сейчас существует огромное количество анти-троянов (как платных, так и бесплатных), но "воз и ныне там". Логично предположить, что рано или поздно должен был найтись достаточно универсальный и надежный способ, и такой способ нашелся! Алгоритм действияПопадая в систему, зловредный программный продукт прежде всего должен обеспечить свою загрузку при рестарте системы. Для этого он создает запись в специальном разделе реестра - [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services]. Каждая запись имеет следующий формат: DisplayName ErrorControl ImagePath Для драйверов не обязательно указывать значение этого параметра, но тогда файл драйвера должен находиться в каталоге \%SystemRoot%\System32\Drivers. Start Type Разумеется, троян, так наследивший при установке, обязательно должен сокрыть факт своего присутствия, спрятав запись реестра и файл драйвера на диске. Для реализации этого он перехватывает функции ядра и при каждом вызове этих функций эмулирует отсутствие скрываемых объектов. В современном представлении трояна, технологии сокрытия имеют один из самых важных аспектов. Эти технологии носят название 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. Таким образом, предложенный в статье метод не панацея, и является лишь одной из возможных частей комплекса по обнаружению и противодействию руткитам. |