Анализ руткита TDSS
Алиса Шевченко, eSage Labalisa@esagelab.ru
Вступление
Обзор семейства Характерные особенности Внутривидовое разнообразие Анализ кода
Инсталляция руткита и обход защиты
Удаление TDSS вручную Драйвер Rootkit-функционал Портал в пространство ядра Устойчивость в системе Блокирование антивирусов Выводы и заключение Ссылки Приложения ВступлениеРуткит TDSS также известен под именами Tidserv, TDSServ и Alureon. Отдельные его компоненты детектируются антивирусами под другими именами, такими как Trojan.Win32.DNSChanger и Trojan.FakeAlert.Причины, по которым данный руткит удостоен детального исследования, таковы.
Обзор семействаТDSS известен своей выдающейся способностью обходить активную защиту (антивирус, HIPS, фаервол), сложноудаляемостью и rootkit-функционалом. Его типичные наблюдаемые признаки в системе - всплывающие окна (pop-up), а также проблемы с запуском и обновлением антивирусных продуктов. На практике может иметь место любой функционал, что обеспечивается динамической подгрузкой дополнительных модулей.Первые прецеденты заражения руткитом зафиксированы в середине 2008 года. Уже тогда TDSS эффективно обходил защиты в процессе инсталляции. Учитывая, что разработчикам руткита удается поддерживать работоспособность этой функции уже почти год, вопреки обновлениям антивирусов, а также учитывая грамотность реализации и архитектуры кода - TDSS создан и развивается силами команды профессиональных разработчиков и в рамках ясной стратегии. Сам по себе TDSS - не более чем мощный загрузчик (downloader) с модульной архитектурой. Его основная задача - проникнуть на машину пользователя в обход защиты, хорошо закрепиться в системе, и в дальнейшем обеспечивать удаленное управление ресурсами зараженной машины, включая загрузку дополнительных функциональных модулей. Схема распространения TDSS не менее продуманна, чем его архитектура. Используется несколько каналов доставки вредоносного кода. Известные вектора атаки включают загрузку кода через web-эксплойт (iframe attack)[3], инсталляцию его под видом видео-кодека [4] для просмотра порнографии, а также распространение в связке с легитимными [5] и пиратскими программами, генераторами ключей и crack'ами. [6] Характерные особенности
Внутривидовое разнообразиеПервые версии руткита в 2008 г. создавали в системе драйвер tdsserv.sys, от которого и произошло официальное имя TDSS. Впоследствии имя основного драйвера несколько раз менялось на clbdriver.sys, seneka*.sys, UACd*.sys, gaopdx*.sys, tdlserv.sys и другие.Первые версии руткита использовали патчинг библиотеки advapi32.dll, подгружаемой сервисом Microsoft Installer, в ходе инсталляции. Более новые версии используют патчинг библиотеки msi.dll. Возможно, это изменение – реакция на новые поведенческие сигнатуры систем защиты. Защита кода руткита от анализа выполнена в виде распаковщика, замаскированный под системный файл. При этом исполняемый файл визуально выглядит как большой кусок легитимного кода (отличающегося низкой энтропией в пределах байтового массива) с прицепленным в конце файла массивом данных (с высоким уровнем энтропии и без исполняемых инструкций). Исполняемый код украшен бессмысленными строками текста, призванными вызвать у поспешного аналитика ассоциации с системной утилитой. Не считая описанного «социального» трюка, защита кода не представляет интереса – это тривиально снимаемый «конверт», внутри которого спрятан оригинальный код троянца. Новейшие образцы эволюции TDSS содержат функционал червя. В частности, руткит пытается – и, судя по отзывам жертв, вполне успешно – размножаться через съемные накопители. С этой целью копия руткита размещается в директории RECYCLER в виде скрытого файла с именем <многобукв>.com, и создается ссылка на него в файле autorun.inf. Это приводит к автоматической загрузке руткита при подключении зараженного накопителя к системе (за исключением случаев, когда функция Autorun для внешних дисков запрещена в настройках системы), а также при попытке открытия зараженного накопителя из «Проводника». Анализ кодаДля анализа был использован экземпляр, обнаруженный примерно в Марте 2009 (MD5: 1DE66FC07C7B5893F5F83B397AC38F3D). [8] Разновидность TDSS, представленная этим экземпляром, отмечена Российским филиалом лаборатории Symantec как один из наиболее упоминаемых вредоносных программ в марте 2009 г. [9]Общий алгоритм функционирования TDSS, характерный для семейства в целом, уже описан[10], также как и основные механизмы компонентов руткита в ring3. Суммарный высокоуровневый обзор функционала конкретного файла можно найти поиском по MD5 в архиве любой публичной песочницы (например, ThreatExpert). Поэтому я опишу только самые важные механизмы и функционал уровня ядра. Инсталляция руткита и обход защитыПроцедура инсталляция руткита достойна упоминания, поскольку обеспечивает эффективный обход поведенческих защит и фаерволов. Ключевая идея алгоритма обхода – исполнение вредоносного кода в составе модифицированной системной библиотеки, автоматически подгружаемой легитимным системным сервисом. В результате такой манипуляции фаервол пропускает сетевую активность вредоносного кода в силу того, что его процесс-источник – системный сервис Windows – по умолчанию внесен в «белый список» и, как следствие, обладает всеми возможными привилегиями для загрузки и инсталляции файлов. Большинство проактивных защит также пропускают поведенческую активность руткита, поскольку она не вписывается в типичные паттерны нежелательного поведения.Технически этот алгоритм реализован следующим образом. Модификация системной библиотеки – advapi32.dll или, в более поздних версиях руткита, msi.dll – осуществляется в копии библиотеки на диске, которая затем загружается в директорию \KnownDLLs в памяти. После этого стандартными средствами запускается Microsoft Installer, который автоматически подгружает модифицированную библиотеку из \KnownDLLs. [11] // новая секция для кода инсталляции руткита NtCreateSection(..”\knowndlls\dll.dll”..) // подготовка системной DLL к патчингу CopyFile(..”msi.dll”,В этой схеме модификация кода msi.dll минимальна, и обеспечивает только выполнение кода из секции \knowndlls\dll.dll, содержащей процедуры инсталляции руткита. Сам патч - <malicious_code_injection> - элегантен: ; адрес 7c906cbc - указатель на строку ‘dll.dll’ ; на самом деле, это часть строки имени легитимного модуля ntdll.dll push 7c906cbc ; в стек помещается адрес следующей за call инструкции call $+5 ; после выполнения следующей инструкции первый dword на стеке ; будет указывать на первую инструкцию патча. Таким образом, ; вызов LoadLibrary вернется туда, где к тому времени будет ; восстановлен оригинальный код sub dword ptr [esp], 0a mov eax, LoadLibrary jmp eax ; вызов LoadLibrary (‘dll.dll’)Функционал секции dll.dll отображен на Рис.1. ![]() Рис. 1. Основная задача этой библиотеки – загрузка и инсталляция драйвера руткита. ДрайверTDSS не имеет собственного процесса в пользовательском пространстве. Базовые функции обеспечиваются драйвером, который автоматически загружается на старте. Дополнительные высокоуровневые функции обеспечиваются отдельными DLL-модулями, внедряемыми в заданные процессы.Функционал драйвера включает в себя:
Rootkit-функционалРуткит перехватывает методом сплайсинга следующие функции в пространстве ядра:IofCallDriver IofCompleteRequest NtFlushInstructionCache NtQueryVlaueKey NtEnumerateKey Перехват NtEnumerateKey используется для сокрытия ключей реестра, отвечающих за загрузку и конфигурацию руткита (в данном случае это все ключи, начинающиеся со строки “gaopdx*”). Перехват NtQueryValueKey используется для подмены адресов DNS-серверов (значения ‘DhcpNameServer’ и ‘NameServer’ [12]) в реальном времени, без модификации реестра. Перехват IofCallDriver обеспечивает глобальную фильтрацию всех IRP в системе, что позволяет руткиту прятать свои файлы (начинающиеся со строки “gaopdx*”) всякий раз, когда он перехватывает IRP к драйверу файловой системы: If ( FsRtlIsNameInExpression (..”*\\gaopdx*” or “*\\TEMP\\gaopdx*”..) ) then return (STATUS_TOO_MANY_SECRETS)Перехват IofCompleteRequest обеспечивает схожий функционал. Портал в пространство ядраПерехват NtFlushInstructionCache несколько более любопытен, поскольку он служит порталом в ring0 для пользовательских модулей руткита. Для того чтобы воспользоваться порталом, данная функция вызывается со специфическим набором аргументов, которые включают магическое значение, команду и параметр к ней.; аргумент к команде push 0 ; команда (4 байта) – обеспечивает проверку работоспособности портала push ‘VERG’ ; магическое число, обеспечивающее выполнение процедуры перехватчика, ; а не оригинальной API функции push ‘TDL2’ call ds:ZwFlushInstructionCacheНабор команд, обрабатываемых перехватчиком NtFlushInstructionCache, очень ограничен и не позволяет управлять руткитом. Доступные команды обеспечивают передачу переменных из ядра в пользовательский модуль, остановку заданного процесса или потока из ядра (посредством внедрения соответствующей задачи в очередь APC-вызовов ядра), и запуск процедур инсталляции нового dll-модуля. Устойчивость в системеДрайвер вызывает функцию ExQueueWorkItem для запуска несколько потоков в ядре. Потоки зациклены с периодом меньше секунды. Таким образом обеспечивается постоянная перерегистрация драйвера в системе (‘\registry\machine\system\currentcontrolset\services\gaopdxserv.sys’), отключение системного фаервола (‘\registry\machine\system\currentcontrolset\services\sharedaccess\parameters\?rewallpolicy\’) и другие функции.Блокирование антивирусовДрайвер руткита посредством PsSetLoadImageNotifyRoutine инсталлирует процедуру нотификации, получающую управление по факту загрузки любого модуля в память. Внутри процедуры происходит сверка имени загружаемого модуля со списком запрещенных, перечисленных в ключе ‘disallowed’ настроек руткита в реестре. Загрузка запрещенных модулей блокируется.Удаление TDSS вручнуюПеречисленные ниже инструкции составляют универсальный алгоритм удаления любого варианта руткита TDSS. Для воплощения алгоритма не требуется ни специальных знаний, ни специфических утилит.
Выводы и заключение
Ссылки[1] Поиск Google, отзывы пользователей о TDSS на форумах[2] Лаборатория Касперского, статистика по сигнатурам для TDSS [3] Dancho Danchev, Embassy of India in Spain Serving Malware Malware Analysis & Diagnostic, Etude de cas - Infection rootkit TDSS [4] ThreatExpert, отчет о действиях программы с MD5=2c5c874235a73fc50a69780c7ad1488a [5] ThreatExpert, отчет о действиях программы с MD5=d2ada2dba8e036d37726ebddbcc9e9d6 [6] ThreatExpert, отчет о действиях программы с MD5=b17d76537ef5d94547fc4ca8851b35da [7] Symantec, Backdoor.Tidserv Technical Details [8] Virustotal.com, отчет о сканировании программы с MD5=1de66fc07c7b5893f5f83b397ac38f3d [9] Anti-malware.ru, История информационной безопасности за 4-ю неделю марта от Symantec [10] F-Secure, Backdoor:W32/TDSS Virus Description [11] Microsoft Support, INFO: Windows NT/2000/XP Uses KnownDLLs Registry Entry to Find DLLs [12] MSDN, DhcpNameServer registry key [13] Virus Bulletin January 2009. Shevchenko A., Advanced malware techniques 2008. ПриложенияЭкземпляр руткита TDSS и файлы анализа IDA (по запросу)Утилита для удаления руткита TDSS |
Все выпуски
Выпуск 1
|