Безопасность Руткиты и Антируткиты
Большая аналитическая статья про руткиты и антируткиты. Сравнивается целый ряд существующих утилит по борьбе с этим классом троянских программ.
1. Антируткиты
Сравнительное тестирование эффективности нахождения продвинутых руткитов некоторыми антируткитами. В тестировании принимали участие автоматические продукты следующих производителей АВПО:
AVG Antirootkit
Краткое описание:
Программа в основном ориентированна на поиск скрытых файлов на жестком диске и их удаление. Поиск основан на сравнении данных полученных от высокоуровневых WinAPI с данными полученными при низкоуровневом анализе структуры файловой системы. Программа умеет анализировать структуру реестра а так же имеет драйвер-монитор, способный находить скрытые процессы. Утилита работает полностью в автоматическом режиме, от пользователя требуется лишь нажать на кнопку “Search for rootkits”. Инсталляция программы не вызвала никаких затруднений.
Avira Antirootkit
Краткое описание:
Программа по функционалу аналогична предыдущей, однако для своей работы требует, что бы в системе был установлен один из продуктов Avira а так же run-time библиотеки Microsoft Visual Studio 2008. Работает автоматически при нажатии на кнопку “Start Scan”.
Sophos Antirookit
Краткое описание:
Функции программы такие же как и у предыдущих. Для работы не требуется никаких дополнительных компонентов установленных в системе, работает автоматически.
Так же использовалась следующая утилиты для анализа системы, не работающая в автоматическом режиме и требующая взаимодействия с пользователем:
Rootkit Unhooker

Краткое описание:
Имеет следующие важные функции:
• Просмотр/восстановление KiServiceTable, KiServiceTable Shadow
• Просмотр/завершение скрытых процессов
• Просмотр загруженных драйверов и обнаружение скрытых обработчиков IRP
• Обнаружение потоков ядра, не принадлежащих к адресному пространству какого-либо из загруженных драйверов
• Обнаружение страниц памяти, помеченных атрибутом Contains Executable Code
• Прямое чтение структуры файловой системы и сравнение результатов с результатами полученными с помощью WinAPI(детектор скрытых файлов)
• Проверка целостности кода ядра в памяти(детектирование сплайсинг-перехвата)
ОС на которой проводилось тестирование – Windows XP Pro SP2(build 2600) rus.
Тестирование проводил – Виталий Киктенко (Kick10).
2. Руткиты
В тестировании принимали участие руткиты, которые используют продвинутые методы скрытия своих тел на жестком диске и в системе. Каждый из руткитов имеет уникальную технологию скрытия, которая может служить основой для создания целого класса подобных вредоносных программ. Так же все руткиты, выбранные для этого тестирования в начале не определялись штатными средствами большинства антивирусов и для их детектирования и удаления требовались индивидуальные решения. Краткое описание всех руткитов приведено ниже:
Backdoor.Win32.TDSS.akv
Руткит создает свой исполняемый файл со следующим именем:
%System%\drivers\TDSSserv.sys
Основной функцией данного руткита является скрытие в файловой системе файлов с именами начинающимися на “TDSS”. Для скрытия файлов применяется перехват процедур диспетчеризации IRP пакетов, путем подмены обработчиков:
IopfCallDriver
IopfCompleteRequest
Данный метод позволяет фильтровать IRP пакеты, поступающие к любому загруженному драйверу в системе на обработку любого MajorFunction запроса. Этот метод является весьма эффективным как в пользовательском режиме так и в режиме ядра, и обеспечивает уровень скрытия вплоть до работы с драйвером файловой системы (теоретически возможно и больше, но функция перехвата этого не предусматривает). Покрытие функциональных уровней:

Так же руткит скрывает свой ключ автозапуска системного реестра при помощи перехвата NtEnumerateKey реализованного сплайсингом.
Rootkit.Win32.Agent.hki
Данный руткит устанавливается в систему при помощи вредоносной программы-дроппера. Исполняемый файл руткита находится в папке %Windows%\Drivers и имеет случайное имя, состоящее из прописных букв латинского алфавита и расширение “.sys”. Основной функционал руткита – скрывать собственное тело а так же связанные с ним системные объекты, такие как ключи реестра и модули ядра, а так же инжектинг вредоносного кода в процессы пользовательского режима. Особенностью данного руткита является то, что при инсталляции он заражает один из файлов системных драйверов, выбранный произвольным способом. Для скрытия себя, руткит использует оригинальный алгоритм перехвата Native API функций – руткит изменяет номера Native API функций в коде функций-оберток системной библиотеки ntdll.dll,

на некорректные и генерирующие ошибку выхода за пределы диапазона. Так же руткит перехватывает обработчик ошибки вызова функции за пределами диапазона KiServiceLimit, изменяя адрес перехода в первой команде call в теле функции KiBBTUnexpectedRange:

Таким образом, руткит получает возможность перехвата любой Native API функции в системе. Кроме этого руткит подменяет указатель на таблицу функций KiServiceTable для каждого потока в системе изменяя, значение поля ServiceTable в структуре-описателе объекта потока KTHREAD. Новый указатель указывает на специально сформированную руткитом таблицу, которая переопределяет вызов любой функции в специальный обработчик внутри руткита, который рушит систему при его вызове, таким образом затрудняя процесс лечения активного заражения. Данный метод, несмотря на свою изощренность имеет невысокую эффективность, потому что не имеет возможности перехвата вызовов Native API напрямую в режиме ядра, и обеспечивает уровень скрытия только частично на уровне Native API, но не на уровне запросов к драйверам.
Покрытие функциональных уровней:

Стоит отметить, что этот сампл является модификацией семейства Rootkit.Win32.Rustock.
Trojan.Win32.DNSChanger.imv
Данный руткит устанавливается в систему при помощи дроппера. Исполняемый файл руткита располагается в папке %System%\Drivers и имеет имя msliksurserv.sys. Основной функцией данного руткита является скрытие в файловой системе файлов с именами, начинающимися на “msliksur”. Данный руткит интересен тем, что для скрытия своих файлов использует легальную технологию перехвата – присоединение драйвера-фильтра к устройству файловой системы:
данный метод не оставляет лишних следов в системе, при этом обеспечивая практически полный контроль над всеми файловыми операциями. Суть метода заключается в перехвате и фильтрации IRP пакетов поступающих к драйверам файловых систем. Этот метод является эффективным как в пользовательском режиме, так и в режиме ядра и обеспечивает хороший уровень скрытия. Покрытие функциональных уровней следующее:

Так же руткит скрывает свой ключ автозапуска системного реестра при помощи перехвата NtEnumerateKey реализованного сплайсингом. По функционалу данный руткит схож с Backdoor.Win32.TDSS.akv.
Backdoor.Win32.Sinowal.c
Самый интересный и один из наиболее продвинутых руткитов на сегодня. Из-за особенностей их загрузки такие руткиты также называют буткитами. Руткит не имеет файлов в файловой системе а вместо этого хранит свое тело в физических секторах жесткого диска, за пределами дискового пространства адресуемого операционной системой. Для запуска своего тела данный руткит записывает в MBR(Master Boot Record) специальный загрузчик, который запускается на раннем этапе загрузки компьютера до операционной системы. Данный загрузчик считывает в память содержимое 4 секторов в конце диска, которые содержат загрузочный код руткита и передает им управление. Загрузчик второго уровня считывает в память и располагает в ней основное тело руткита а так же файлы начальной загрузки операционной системы и передает им управление.
Так же до передачи управления операционной системе руткит устанавливает перехватчик на прерывание доступа к жесткому диску, при помощи которого контролирует процесс загрузки ОС и вносит в код ОС необходимые изменения для запуска основного кода руткита на поздних этапах загрузки.
Основными функциями данного руткита является скрытие своего присутствия в системе, закачка из Интернет другого вредоносного ПО и запуск его на целевой системе. Для скрытия своего присутствия в системе руткит перехватывает операции чтения/записи на диск, подменяя обработчик IRP_MJ_INTERNAL_DEVICE_CONTROL в драйвере ATA-интерфейса atapi.sys:

таким образом, руткит осуществляя фильтрацию IRP пакетов, посылаемых наиболее низкоуровневому драйверу для работы с диском, ниже которого идет только прямая работа с портами ввода/вывода ATA контроллера и уровень электрических сигналов.
Подмененный обработчик анализирует содержимое читаемых и записываемых секторов и подменяет его или отменяет операцию в случае если идет попытка считать или перезаписать тело руткита. Например, если какая-нибудь программа попытается открыть и прочитать содержимое зараженного MBR, руткит подсунет ей содержимое оригинального MBR, сохраненного в другом месте перед заражением.
Такой метод скрытия является наиболее эффективным на сегодняшний день и обеспечивает скрытие вредоносного кода на всех функциональных уровнях:
Тестирование
AVG Antirootkit
Смог обнаружить в системе следующие руткиты:
• Backdoor.Win32.TDSS.akv
• Rootkit.Win32.Agent.hki
• Trojan.Win32.DNSChanger.imv
Не смог обнаружить Backdoor.Win32.Sinowal.c, поскольку не имеет средств для нахождения подмен обработчиков MajorFunction в системных структурах-описателях драйверов, а так же не имеет собственного достаточно самостоятельного низкоуровневого драйвера для доступа к жесткому диску, на который смог бы опереться при чтении физических секторов и MBR в частности.
Так же возникли затруднения при удалении файлов Trojan.Win32.DNSChanger.imv, т.к. этот руткит не только скрывает свои файлы но и защищает их от удаления на достаточно низком уровне.
Остальные руткиты были успешно удалены из системы и программа показала довольно хороший результат. Так же из положительных сторон этой программы стоит отметить то, что ее использование не требует от пользователя специальных знаний и навыков и для ее работы не требуется никакого дополнительного ПО и библиотек.
Avira Antirootkit
Смог обнаружить в системе следующие руткиты:
• Backdoor.Win32.TDSS.akv
• Rootkit.Win32.Agent.hki
• Trojan.Win32.DNSChanger.imv

Данная программа так же справилась с обнаружением большинства руткитов, не осилив лишь Backdoor.Win32.Sinowal.c по тем же причинам что и предыдущая.
Кроме того возникли затруднения все с тем же Trojan.Win32.DNSChanger.imv при удалении его файлов. Данная программа пытается удалять файлы после перезагрузки системы, устанавливая свой специальный драйвер, запускающийся на ранних этапах загрузки системы и удаляющий файлы руткитов, до того, как они запустятся. Однако данный руткит запускается по такой же схеме и успевает запуститься раньше драйвера антируткита и защитить себя.
С остальными руткитами данная программа справилась. Среди недостатков стоит отметить сложности с инсталляцией – требуется предварительно скачать и установить любой антивирус от Avira а так же Visual Studio 2005 Redistributable Package, после чего скопировать исполняемый файл программы в папку с установленным антивирусом и лишь тогда ее можно будет использовать. В целом программа достаточно неплохая.
Sophos Antirookit
Не смог обнаружить ни одного из тестируемых руткитов, при этом следующим руткитам
Trojan.Win32.DNSChanger.imv
Backdoor.Win32.TDSS.akv
удалось вывести программу из строя и вызвать ошибки в ее работе:
Из достоинств данной программы стоит выделить легкость установки и использования, а из недостатков - ее полную неспособность противостоять современным руткит-технологиям.
Далее рассмотрим как реагировала на руткиты утилита анализа системы, предназначенная для более опытных пользователей.
Rootkit Unhooker
• Trojan.Win32.DNSChanger.imv
Обнаружил сплайс-перехваты Native API функций, установленные руткитом:
Однако анализ файловой системы и поиск скрытых файлов привел к ошибке программы:
Так же утилита обнаруживает драйвер вредоносной программы и дает возможность его удалить. Вывод - опытный пользователь может обнаружить и удалить этот руткит при помощи данной утилиты.
• Rootkit.Win32.Agent.hki
Не обнаружил модификаций кода ядра, сделанных данным руткитом, однако анализ файловой системы позволил выявить и удалить скрытый файл:
Вывод: опытный пользователь может обнаружить и удалить этот руткит при помощи данной утилиты.
• Backdoor.Win32.TDSS.akv
Обнаружил сплайс-перехваты Native API функций и подмену обработчиков диспетчеризации IRP пакетов между драйверами:
Обнаружить скрытый файл на диске программе не удалось, однако если воспользоваться в контекстном меню данной вкладки функцией “Unhook selected” для IofCallDriver и IofCompleteRequest то файл вредоносной программы появится и его можно будет удалить штатными средствами или обычной антивирусный проверкой.
Вывод: опытный пользователь может обнаружить и удалить этот руткит при помощи данной утилиты.
• Backdoor.Win32.Sinowal.c
Единственная утилита, которая дает возможность определить присутствие данного руткита хотя-бы по косвенным признакам. Ей удалось обнаружить скрытые потоки режима ядра, в которых руткит запускает свое самовосстановление, а так же загрузку вредоносного кода из интернет:

Удалить данный руткит из системы при помощи данной утилиты нельзя, однако обнаружив такие подозрительные изменения можно сделать вывод о заражении компьютера. При появлении признаков заражения, необходимо отключить жесткий диск от компьютера и проверить его на вирусы или произвести анализ системы на другом компьютере, загрузившись с него.
Выводы
Наиболее эффективной автоматической программой по поиску и удалению руткитов по результатам тестирования является AVG Antirootkit, она рекомендована большинству обычных пользователей. Из утилит, предназначенных для опытных пользователей, а так же для инженеров, занимающихся антивирусными исследованиями очень полезной утилитой может быть Rootkit Unhooker, которая имеет богатый функционал по низкоуровневому анализу системы а так же предоставляет возможность делать дампы памяти ядра.
Стоит отметить, что встроенный в Антивирус Касперского 2009/2010 антируткит модуль успешно обнаружил все, описанные выше руткиты, а также произвел лечение активного заражения.
Наиболее скрытыми и трудноудаляемыми руткитами является семейство Backdoor.Win32.Sinowal, успех которого основан на очень низкоуровневом перехвате операций с диском и отказе от хранения кода в скрытых файлах, на обнаружение которых нацелены большинство антируткитов. Одно из возможных направлений развития этого семейства вредоносных программ в будущем, по моему мнению, может стать добавление сквозного шифрования информации при доступе к жесткому диске, что может сделать восстановление системы после заражения весьма нелегкой задачей.
Комментарии