TDSS. TDL-4

Прошло совсем немного времени после публикации нашей аналитической статьи о рутките TDSS. Как мы и предполагали, TDSS продолжает совершенствоваться. В июле-августе появилась совершенно новая модификация данного руткита — TDL-4, — которая способна заражать не только x86 (32-х битные) операционные системы, но и x64 (64-х битные). В данной статье мы расскажем о новом способе загрузки руткита, а также о его возможности концептуально обойти защиту, встроенную в 64-х битные операционные системы Windows, — PatchGuard и механизм проверки целостности.

Компоненты

Список компонент TDL-4 видоизменился со времени TDL-3. Теперь он выглядит так:

bckfg.tmp
cfg.ini
cmd.dll
cmd64.dll
drv32
drv64
ldr16
ldr32
ldr64
mbr

Как и в предыдущей модификации, руткит использует собственную файловую систему, зашифрованную методом RC4, и все свои файлы хранит в последних секторах физического диска.


Расшифрованные структуры файловой системы руткита

Как и раньше, руткит использует конфигурационный файл.


Пример содержимого файла конфигурации TDL-4

Конфигурационный файл TDL-4 немного изменился по сравнению с конфигурационным файлом TDL-3.Основное отличие — номер версии руткита (version=0.02).

Как можно заметить из списка компонент, в файлах присутствуют цифры 32 и 64. Это говорит о том, что руткит должен работать как на 32-х битных ОС, так и на 64-х битных ОС.

Заражение и загрузка

MBR

В этот раз TDSS избрал иной, уже проверенный способ заражения. TDL-4, как и другой известный руткит — буткит, заражает главную загрузочную запись (MBR). Данный способ позволяет ему загружаться раньше операционной системы, сразу после старта компьютера.

Код в MBR использует нехитрую схему шифрования, однако даже ее небольшие изменения позволят обходить методы сигнатурного детектирования большинства антивирусных продуктов.


Зараженный и зашифрованный MBR


Расшифрованный MBR со строчкой ldr16

Основной задачей небольшого загрузчика в MBR является поиск компонента ldr16 на зашифрованном разделе руткита, расшифровка ldr16, загрузка его в память и передача на него управления.


Поиск ldr16, загрузка в память и передача управления

LDR16

Первое, что делает ldr16 при своей загрузке, — перехватывает прерывание BIOS 13h, которое отвечает за дисковый ввод-вывод. Далее он находит на своем зашифрованном разделе оригинальный (незараженный) MBR, сохраненный туда во время заражения, и копирует его в памяти поверх зараженного. После этого управление передается данной оригинальной загрузочной записи.

Оригинальный MBR считывает загрузчик операционной системы с диска и передает ему управление. Тот, в свою очередь, считывает ядро и необходимые зависимости. Для чтения с диска будет использоваться перехваченное руткитом прерывание 13h.


Перехваченное прерывание BIOS 13h

При каждом вызове прерывания BIOS 13h вызывается перехват руткита, который ожидает чтения определенных файлов в память.

Необходимым компонентом для дальнейшей загрузки руткита является системный драйвер kdcom.dll, который используется при инициализации ядра операционной системы на ранней стадии.


Компонент отладчика ОС Windows

Для поиска в памяти считанного kdcom.dll функция перехвата прерывания проверяет каждый считанный сектор и пытается найти сигнатуру, которая соответствует данному файлу.


Поиск kdcom.dll по сигнатуре

В случае успешного совпадения сигнатуры, ldr16 в зависимости от разрядности операционной системы ищет на зашифрованном разделе руткита компоненты ldr32 или ldr64, считывает их с диска и заменяет считанный в память оригинальный kdcom.dll содержимым одного из них. Таким образом, вместо системного компонента в память будет загружен вредоносный компонент TDL-4.

В ldr16 присутствует еще один функционал — это процедура изменения BCD в памяти. BCD — это куст реестра, который используется менеджером загрузки Windows и поддерживается, начиная с Windows Vista. Этот механизм заменил собой устаревший boot.ini.


Поиск значений и изменение их в BCD

TDL-4 находит в BCD ключ BcdLibraryBoolean_EmsEnabled по сигнатуре «16000020» и подменяет его ключом «26000022» ‑ BcdOsLoaderBoolean_WinPEMode, таким образом включая системный режим WinPE. В данном режиме не производится проверка целостности, и система не проверяет подпись вредоносного компонента kdcom.dll. Включения на некоторое время этого режима достаточно, чтобы обойти проверку. После успешной загрузки вредоносного компонента, данный режим выключается подменой параметра «/MININT» на невалидное значение.

LDR32/64

Для успешной инициализации системы вредоносным компонентам ldr32/64 необходимо поддержать функционал системной библиотеки kdcom.dll.


Экспортируемые функции ldr64

Такие же экспортируемые функции содержатся в оригинальной kdcom.dll. Однако в руткит-компоненте лишь одна из этих функций содержит полезную нагрузку ‑ KdDebuggerInitialize1. Остальные функции — это «заглушки», возвращающие успешный результат операции. Таким нехитрым образом руткит решает сразу две задачи: продолжает свою инициализацию и противодействует системному отладчику.

На ранней стадии инициализации ядра в функции Phase1Initialization произойдет вызов функции KdDebuggerInitialize1, в которой продолжится инициализация руткита.


Инициализация ядра и вызов KdDebuggerInitialize1

Код ldr32 и ldr64 практически идентичен, т.е. эти два компонента собраны из одного исходного кода.

Схематичное описание дальнейшей инициализации руткита при вызове KdDebuggerInitialize1:

  • Установка нотификации на загрузку образа в память с помощью функции PsSetLoadImageNotifyRoutine.
  • Создание объекта драйвера с помощью недокументированной функции IoCreateDriver. Создание объекта сопровождается вызовом функции инициализации, которая передается как параметр функции IoCreateDriver.
  • В функции инициализации устанавливается еще одна нотификация, но уже с использованием системной функции IoRegisterPlugPlayNotification.
  • При вызове PnP-нотификации происходит чтение зашифрованного раздела TDL-4, поиск основного руткит-драйвера drv32/drv64 в зависимости от разрядности операционной системы, чтение его с диска и загрузка в память. После необходимых настроек вызывается точка входа основного руткит-драйвера.

DRV32/64

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

TDL-4 использует ту же самую технику установки перехватов, что и предыдущая модификация — TDL-3. Использование подобной техники позволяет концептуально обойти защиту ОС Windows x64 — PatchGuard.

Следующие скриншоты получены на операционной системе Windows 7 x64.


Стек дискового устройства


Последний объект-устройство в стеке и обслуживающий его драйвер


Драйвер руткита и функции-перехватчики

Кроме всего вышеперечисленного данный компонент руткита использует следящий поток, который проверяет наличие перехватов у системных объектов, а также проверяет тот факт, что в MBR находится именно зараженная копия сектора. В случае нахождения отличий MBR перезаражается.

Заключение

Вирусописатели стараются отвечать современным запросам киберкриминального рынка. В прогнозах на 2010 год мы предсказывали, что вредоносные программы станут еще сложнее и опаснее. «Уже сейчас существуют угрозы, использующие современные вирусные технологии заражения файлов и руткит-функционал. Многие антивирусные программы неспособны вылечить инфицированные этими вредоносными программами системы. В дальнейшем ситуация будет ухудшаться. С одной стороны, антивирусные технологии будут развиваться так, чтобы максимально усложнить процесс проникновения угроз в систему, с другой — те угрозы, которым все-таки удастся обойти такие системы защиты, станут практически неуязвимыми», ‑ писал Александр Гостев.

В 2011 году, согласно нашим прогнозам, увеличится число угроз, работающих на 64-битных платформах. 64-х битные операционные системы набирают популярность у пользователей, и в большей степени этому способствуют предустановленные в покупаемом оборудовании ОС. А увеличение числа пользователей, приводит к росту потребности киберкриминала в поддержке новых операционных систем вредоносными программами.

Создатели TDSS развивают свою программу в соответствии с современными тенденциями вирусописательства. Семейство TDSS идет именно по пути усложнения руткит-функционала, а TDL-4 уже способен заражать 64-х битные операционные системы.

Однако на x64 платформах руткиты режима ядра чувствуют себя не так вольготно, как на x86 системах. Это является одним из факторов выбора метода инфицирования компьютера — заражение MBR. Другим фактором является то, что большинство современных антивирусных технологий, прежде всего анти-руткит технологии, не готовы бороться с угрозами на x64 платформе, и это сильно облегчает жизнь вирусописателям.

«Вооруженный до зубов» TDL-4 представляет очень серьезную опасность для пользователей — и продолжает развиваться. Антивирусным компаниям необходимо в срочном порядке дописывать собственные анти-руткит компоненты, ведь в случае заражения данным руткитом у обычных пользователей просто не остается никаких шансов.

Для обнаружения и излечения TDL-4 как на x86, так и на x64 платформах, «Лаборатория Касперского» предлагает воспользоваться персональными продуктами KAV/KIS или специальной утилитой TDSSKiller, которая способна обнаруживать не только данную модификацию, но и предыдущие ее версии.

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *