Skip to main content

Программа RootkitRevealer (версия 1.71)

Авторы: Брайс Когсвелл (Bryce Cogswell)и Марк Руссинович (Mark Russinovich)

Опубликовано 1 ноября 2006 г.


Введение

Программа RootkitRevelader является программой с расширенными возможностями для обнаружения rootkit-программ. Она работает под управлением ОС Windows NT 4 и более поздних версий. Программа выводит список несоответствий результатов работы API-интерфейсов файловой системы и реестра реальным данным. Эти несоответствия могут означать наличие rootkit-программы, работающей в пользовательском режиме или в режиме ядра. Программа RootkitRevealer успешно обнаруживает все постоянные rootkit-программы, включая такие, как AFX, Vanquish и HackerDefenter. Обратите внимание, что RootkitRevealder не предназначена для определения вредоносных программ вроде программы Fu, которые не пытаются скрывать свои файлы и разделы реестра. Пожалуйста, сообщите нам, если вы используете эту программу для обнаружения присутствия rootkit-программ.

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


Что такое rootkit-программа

Термин “rootkit” обозначает механизмы и приемы, с помощью которых вредоносные программы, такие как вирусы, программы-шпионы и трояны, пытаются скрыть свое присутствие от приложений, блокирующих программы-шпионы, антивирусов и средств управления системой. Rootkit-программы подразделяются на несколько классов в зависимости от способности сохранять работоспособность после перезагрузки компьютера и типа запуска (в пользовательском режиме или в режиме ядра).

Постоянные rootkit-программы
Постоянные rootkit-программы запускаются после каждого запуска системы. Такие программы содержат код, который должен выполняться при каждом запуске системы или при каждом выполнении входа в систему пользователем, поэтому этот код должен располагаться в постоянном хранилище, таком как файловая система или реестр, и должен быть способ запуска этого кода без участия пользователя.

Rootkit-программы в оперативной памяти
Rootkit-программы в оперативной памяти не обладают хранимым кодом и потому после перезагрузки пропадают.

Rootkit-программы режима пользователя
Есть много способов, с помощью которых rootkit-программы пытаются избежать обнаружения. К примеру, rootkit-программы, работающие в пользовательском режиме, могут перехватывать все вызовы к функциям Windows FindFirstFile и FindNextFile. На этих вызовах основано перечисление содержимого папок файловой системы в приложениях для просмотра содержимого диска, включая проводник Windows и командную строку. Когда приложение осуществляет вывод содержимого папки, в результатах которого можно будет обнаружить файлы этой скрытой вредоносной программы, она перехватывает вызов и удаляет записи о своих файлах из результатов вывода содержимого папки.

Собственный API-интерфейс Windows служит промежуточным звеном между клиентскими приложениями, работающими в пользовательском режиме, и службами, работающими в режиме ядра. Более сложные rootkit-программы, работающие в пользовательском режиме, перехватывают вызовы перечисления содержимого файловой системы, реестра и списка процессов собственного API-интерфейса Windows. Это препятствует обнаружению таких программ сканерами, которые сравнивают результаты перечисления содержимого с помощью обычного API-интерфейса Windows с результатами перечисления с помощью собственного API-интерфейса Windows.

Rootkit-программы режима ядра
Rootkit-программы, работающие в режиме ядра, обладают еще более широкими возможностями. Помимо перехвата вызовов собственного API-интерфейса Windows в режиме ядра они также могут напрямую управлять структурами данных ядра. Распространенным способом сокрытия присутствия вредоносного процесса является удаление этого процесса из списка ядра, в котором перечислены активные процессы. В API-интерфейсах для управления процессами используется содержимое этого списка, поэтому такая вредоносная программа не будет отображаться в списке активных процессов в приложениях для управления процессами, таких как диспетчер задач Windows или Process Explorer.


Принцип работы программы RootkitRevealer

Так как постоянные rootkit-программы изменяют результаты работы вызовов прикладных программных интерфейсов, результат работы этих вызовов не соответствует реальному содержимому хранилищ. Программа RootkitRevealer сравнивает результаты сканирования системы высокоуровневыми и низкоуровневыми средствами. Самым высоким уровнем является интерфейс Windows API, самым низким — реальное содержимое тома файловой системы или куста реестра (файла куста реестра, хранящегося на диске). Таким образом программа RootkitRevealer без проблем обнаружит rootkit-программы, работающие как в пользовательском режиме, так и в режиме ядра, и перехватывающие вызовы интерфейсов Windows API для удаления себя из результатов работы этих вызовов. Присутствие этих программ проявится виде несоответствий между информацией, полученной с помощью интерфейсов Windows API, и результатами прямого анализа структур данных файловых систем FAT и NTFS.

Может ли rootkit-программа избежать обнаружения программой RootkitRevealer?
Теоретически сокрытие rootkit-программы от обнаружения программой RootkitRevealer возможно, но для этого потребуется перехватывать вызовы программы RootkitRevealer на чтение данных кустов реестра или данных файловой системы и модифицировать содержимое этих данных таким образом, чтобы скрыть информацию о вредоносной программе. На сегодняшний день вредоносные программы такой сложности не встречались. Для модификации данных необходимы глубокие знания о форматах структур данных файловых систем FAT и NTFS и о формате кустов реестра, а также необходима возможность модифицировать эти данные таким образом, что скрыть присутствие вредоносной программы, но сохранить при этом целостность структур данных, иначе эти несоответствия будут обнаружены программой RootkitRevealer.

Существуют ли гарантированные способы обнаружения rootkit-программ?
В общем случае невозможно гарантировать обнаружение этих программ во время работы системы. Rootkit-программы, работающие в режиме ядра, могут полностью контролировать поведение системы, поэтому они могут подменять информацию, получаемую с помощью прикладных программных интерфейсов, включая прямое чтение кустов реестра и данных файловой системы, осуществляемое программой RootkitRevealer. Сравнение результатов сканирования во время работы системы с результатами сканирования выключенной системы из безопасной среды, например с помощью загрузки операционной системы с компакт-диска, является более надежным способом обнаружения rootkit-программ. Тем не менее, они могут быть реализованы таким образом, чтобы скрывать свое присутствие даже от таких инструментов.

Универсального средства для обнаружения rootkit-программ нет и не будет, но наибольшими возможностями обладают и будут обладать сканеры, интегрированные с антивирусными системами, сравнивающие данные сканирования работающей системы с данным сканирования выключенной.


Использование программы RootkitRevealer

Для работы программы RootkitRevelaer требуется, чтобы учетной записи, с правами которой выполняется программа, были назначены привилегии резервного копирования файлов и папок, загрузки драйверов и выполнения задач обслуживания томов (в ОС Windows XP и более поздних версиях). По умолчанию члены группы “Администраторы” обладают этими привилегиями. Для уменьшения количества ошибочных результатов запускайте программу RootkitRevealer на простаивающей системе.

Для достижения наилучших результатов завершите работу всех приложений и сохраняйте систему в простаивающем состоянии во время выполнения сканирования.

При возникновении вопросов или проблем посетите форум компании Sysinternals, посвященный программе RootkitRevealer.


Ручное сканирование

Для выполнения сканирования запустите программу RootkitRevealer и нажмите кнопку “Начать сканирование”. Программа выполнит сканирование системы. Во время сканирования действия программы будут отображаться на панели состояния внизу окна программы, а обнаруженные несоответствия в списке результатов. Ниже приведен список доступных для настройки параметров:

Hide NTFS Metadata Files (скрывать файлы метаданных NTFS): программа не отобразит стандартные файлы метаданных NTFS, которые скрыты от интерфейса Windows API. Этот параметр по умолчанию активен;
Scan Registry (сканировать реестр): этот параметр по умолчанию активен. Если его деактивировать, программа не будет производить сканирование реестра.


Запуск автоматического сканирования

Программа RootkitRevealer позволяет настроить некоторые параметры автоматического сканирования.

Синтаксис: rootkitrevealer [-a [-c] [-m] [-r] файл_результатов]

-a

Выполнить автоматическое сканирование и выйти после завершения сканирования.

-c

Вывести данные в формате CSV.

-m

Показать файлы метаданных NTFS.

-r

Не выполнять сканирование реестра.

Примечание: файл с результатами сканирования должен располагаться на локальном томе.

Если указать параметр -c, программа не будет отображать состояние выполнения сканирования, а найденные несоответствия будут выведены в CSV-файл для упрощения последующего импортирования результатов сканирования в базу данных. Для выполнения сканирования на удаленных системах можно воспользоваться служебной программой Sysinternals PsExec. Ниже приведен пример команды для осуществления такого сканирования:

psexec \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log


Интерпретация выходных данных

Ниже приведен снимок экрана, на котором программой RootkitRevealer обнаружена распространенная rootkit-программа HackerDefender. В списке несоответствий разделов реестра видно, что разделы реестра, в которых хранится драйвер устройства и параметры службы программы HackerDefender, скрыты от вызовов интерфейса Windows API, но присутствуют в результатах непосредственного сканирования данных куста реестра. Подобным же образом файлы программы HackerDefender невидны вызовам интерфейса Windows API, выводящим содержимое папок, но присутствуют в результатах непосредственного сканирования данных файловой системы.

Снимок экрана программы RootkitRevealer

Необходимо изучить все несоответствия и определить вероятность того, что то или иное несоответствие является знаком присутствия rootkit-программы. К сожалению, не существует гарантированного способа указать на наличие или отсутствие таких программ, основываясь на данных результата сканирования. Поэтому все перечисленные несоответствия необходимо проанализировать, чтобы убедиться в объяснимости причин их наличия. Если вы определили, что у вас в системе присутствует rootkit-программа, необходимо осуществить поиск инструкций в Интернете по ее удалению. Если вы не знаете, как удалить эту программу, необходимо переформатировать жесткий диск и переустановить ОС Windows.

Ниже приведена информация о возможных несоответствиях, которые обнаруживает программа RootkitRevealer. Обнаруженные rootkit-программы и отдельные ложные обнаружения обсуждаются на форуме Sysinternals, посвященном программе RootkitRevealer.


Сокрытие от вызовов интерфейсов Windows API

Это наиболее распространенный способ сокрытия присутствия, используемый большинством rootkit-программ. Тем не менее, если не установить флажок “скрывать файлы метаданных NTFS”, в результатах сканирования будет присутствовать несколько подобных записей для каждого раздела NTFS, поскольку NTFS скрывает от вызовов интерфейса Windows API свои файлы метаданных, например $MFT и $Secure. Перечень файлов метаданных разделов NTFS зависит от версии файловой системы и различных дополнительных возможностей, активных на конкретном разделе. Также ряд антивирусных систем, например Антивирус Касперского, используют rootkit-технологии сокрытия своих данных, храня их в дополнительных потоках данных NTFS. Если вы используете подобное антивирусное приложение, в списке несоответствий будут записи о сокрытии от интерфейса Windows API дополнительных потоков данных для каждого файла NTFS. Программа RootkitRevealer не поддерживает фильтрацию результатов, потому что скрытые вредоносные программы могут воспользоваться ею. Также в списке несоответствий можно увидеть файлы, удаленные во время сканирования.

Ниже приведен перечень файлов метаданных NTFS, используемый ОС Windows Server 2003:

  • $AttrDef

  • $BadClus

  • $BadClus:$Bad

  • $BitMap

  • $Boot

  • $LogFile

  • $Mft

  • $MftMirr

  • $Secure

  • $UpCase

  • $Volume

  • $Extend

  • $Extend\$Reparse

  • $Extend\$UsnJrnl

  • $Extend\$UsnJrnl

  • $Extend\$UsnJrnl:$Max

  • $Extend\$Quota

Отказ в доступе.

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

Файл видим для интерфейса Windows API, присутствует в индексе папки, но отсутствует в таблице MFT.
Файл видим для интерфейса Windows API, но отсутствует в таблице MFT и в индексе папки.
Файл видим для интерфейса Windows API, присутствует в таблице MFT, но отсутствует в индексе папки.
Файл присутствует в индексе папки, но невидим для интерфейса Windows API и отсутствует в таблице MFT.

Сканирование файловой системы осуществляется с помощью трех модулей: модуль сканирования интерфейса Windows API, модуль сканирования таблицы NTFS MFT и модуль сканирования индексных структур папок NTFS. Перечисленные выше несоответствия показывают, что файл присутствует в результатах работы лишь одного или двух из трех перечисленных выше модулей. Наиболее распространенной причиной возникновения такого несоответствия является создание или удаление файла во время сканирования. Ниже приведен пример несоответствия, которое возникает при создании файла во время сканирования:

C:\newfile.txt
01.03.2005 17:26
8 байт
Файл видим для интерфейса Windows API, но отсутствует в таблице MFT и индексе папки.

Размер значения реестра, видимый из интерфейса Windows API, не соответствует реальному размеру в файле данных куста реестра.

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

Несоответствие типа значения, видимого из интерфейса Windows API, типу значения в файле данных куста реестра.

У значений реестра есть тип, например DWORD или REG_SZ. Несоответствие типа означает, что тип значения, который определяется интерфейсом Windows API, отличается от реального типа значения в файле данных куста реестра. Rootkit-программа может замаскировать свои данные, которые реально хранятся в значении типа REG_BINARY, вернув для интерфейса Windows API тип REG_SZ. Если в начале этих данных будет храниться 0, интерфейс Windows API не сможет получить доступ к остальным данным этого значения.

В названии раздела реестра содержатся нулевые символы.

Интерфейс Windows API представляет все имена разделов реестра как строки, оканчивающиеся нулевым символом, в то время как ядро представляет их как строки с заданной длиной. Благодаря этому можно создать такие разделы реестра, которые будут видны операционной системе, но таким средствам управления реестром, как Regedit, они будут видны лишь частично. В исходном коде программы Reghide продемонстрировано использование этого приема, который также используется вредоносными и rootkit-программами для сокрытия данных в реестре. Для удаления разделов реестра, имена которых содержат нулевые символы, можно воспользоваться программой Sysinternals Regdellnull.

Несоответствие содержимого значения реестра, видимого из интерфейса Windows API, содержимому значения в файле данных куста реестра.

Это несоответствие возникает, если содержимое значения реестра изменяется в процессе выполнения сканирования реестра. К часто изменяющимся значениям относятся такие значения, как различные временные метки, например время работы сервера Microsoft SQL Server (см. пример ниже), или время последнего сканирования антивируса. Каждое перечисленное значение реестра необходимо проверить, чтобы убедится, что оно относится к реальному приложению или операционной системе.

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc
01.03.2005 16:33
8 байт


Дополнительные источники

Ниже приведен перечень веб-узлов и книг, содержащих дополнительную информацию о rootkit-программах:

Общие сведения о вредоносных программах: вирусах, программах-шпионах и rootkit-программах
Веб-семинар Microsoft TechEd 2005 Марка Руссиновича на тему вирусов, программ-шпионов и rootkit-программ.

Компания Sony зашла слишком далеко со скрытыми программами и управлением цифровыми правами
В одной из записей своего блога Марк Руссинович приводит анализ обнаруженной им rootkit-программы компании Sony на одном из своих компьютеров.

Разоблачение rootkit-программ
В июньском выпуске журнала Windows IT Pro Magazine Марк Руссинович приводит обзор методов сокрытия, которые используются в rootkit-программах, и принцип работы программы RootkitRevealer.

Rootkit-программы: свержение ядра Windows
Эта книга от Грега Хогланда (Greg Hoglund) и Джэйми Батлера (Jamie Butler) является наиболее полным руководством по обращению и избавлению от rootkit-программ.

www.phrack.org
На этом веб-узле приводится архив журнала для взломщиков Phrack, где разработчики обсуждают уязвимости в приложениях, связанных с безопасностью, технологии сокрытия и другие приемы вредоносного ПО.

research.microsoft.com/rootkit/
Это домашняя страница центра исследований корпорации Майкрософт, посвященная rootkit-программам, где корпорацией Майкрософт публикуются документы и информация о борьбе с этими программами.

Искусство исследования и защиты от компьютерных вирусов Питера Зора (Peter Szor).

Вредоносные программы: борьба с кодом, написанным злоумышленниками, авторы Эд Скодис (Ed Skoudis) и Лени Зельцер (Lenny Zeltser).

Windows Internals, 4-е издание, авторы Марк Руссинович и Дэйв Соломон (Dave Solomon). В этой книге не обсуждаются rootkit-программы, но понимание архитектуры Windows помогает понять работу таких программ.