Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 151, АВГУСТ 2011 г.

Анализ TDL4. Криминалистическая экспертиза и анализ руткит-программ на примере TDL4

Cогда организаторы PHD’2011 предложили выступить с мастерклассом, мы с моим коллегой Евгением Родионовым работали над исследованием руткита семейства Olmarik (TDL4). В рамках PHD нам хотелось рассказать нечто интересное, что ранее было плохо освещено или вообще не затронуто.

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

Обход проверки цифровой подписи

На 64-битных версиях операционных систем MS Windows (Vista, Win7) все модули, загружаемые на уровень ядра, должны иметь обязательную цифровую подпись, причем выданную не абы кем.

Из известных сейчас способов обхода этой проверки во вредоносных программах используются в основном достаточно примитивные техники. К примеру, руткит-драйвер из семейства Win64/ TrojanDownloader.Necurs, подписан тестовой цифровой подписью и устанавливается при помощи того, что его дроппер (с учетом наличия соответствующих прав доступа) вносит изменения (Bcdedit.exe -set TESTSIGNING ON) в Boot Configuration Data (BCD) для загрузки системы в специальном режиме TESTSIGNING. Именно эти манипуляции и позволяют загрузить вредоносный драйвер в обход всех проверок. Аналогичная техника применяется и в Win64/Spy.Banker, но разработчики руткита TDL4 использовали более технологичный и интересный способ обхода при помощи буткит модуля и много итерационных модификаций в процессе загрузки самой операционной системы.

В процессе своей установки дроппер TDL4 подготавливает специальный контейнер своей скрытой файловой системы и записывает его в конец жесткого диска, а также вносит модификации в MBR (Master Boot Record), после чего вызывает недокументированную функцию ZwRaiseHardError(), которая вызывает BSOD и вынужденную перезагрузку системы. Процесс загрузки операционной системы выглядит следующим образом.

Как видно из этой схемы, все начинается с выполнения кода MBR, в нашем случае MBR был модифицирован. Ниже приведена модифицированная загрузочная запись. Видно, что вначале используется нехитрая техника самомодификации кода, где при помощи ассемблерной команды циклического сдвига (ROR) происходит расшифрование остальной части кода и передача управления на него. Вторая ступень на пути к обходу проверки цифровой подписи — это передача управления на модуль ldr16, который считывается из файловой системы руткита.

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

Наибольший интерес ldr16 проявляет к параметру BcdOSLoaderBoolean_WinPEMode (0x26000022), который отвечает за загрузку операционной системы в так называемом режиме preinstallation mode, в котором все проверки целостности отключены. Отключить эти проверки необходимо для загрузки модифицированной системной библиотеки kdcom.dll, которая отвечает за связь между ядром операционной системы и отладчиком WinDbg. После успешной загрузки модифицированной kdcom.dll в виде модуля ldr32 или ldr64, в зависимости от разрядности операционной системы, происходит модификация параметра /MININT, с умышленной ошибкой превращая его таким образом в невалидный параметр M/ NI, что приводит к загрузке системы в нормальном режиме.

Но возникает вполне закономерный вопрос: зачем же происходит загрузка модифицированной библиотеки kdcom.dll? Здесь кроется интересный нюанс, который заключается в том, что в процессе загрузки ядра происходит вызов функции KdDebuggerInitialize1(), которая как раз экспортируется из kdcom.dll, и в нее внесены интересные изменения. А точнее, сразу после ее вызова произойдет вызов функции PsSetLoadImageNotifyRoutine(), которая устанавливает обработчик на загрузку исполняемого образа в память. А сам этот обработчик содержит вызов недокументированной функции IoCreateDriver(), которая создает и инициализирует объект-драйвер.

Все вышеописанное шаманство позволяет протащить в ядро и загрузить неподписанный драйвер. Если все это изобразить в виде схемы, то она будет выглядеть так.
Здесь стоит отметить, что со стороны MS была попытка противодействия описанному способу обхода проверок цифровой подписи, и в конце весны был выпущен патч KB2506014, который не позволял больше использовать WinPEMode и загружать модифицированную библиотеку kdcom.dll. Но спустя буквально несколько дней, появилась модификация Win32/Olmarik.AMN, которая уже умела обходить этот патч :).

Криминалистическая экспертиза

Файловая система руткита представляет собой скрытый контейнер, дописанный в конец жесткого диска. В этом контейнере и хранятся все компоненты руткита и конфигурационный файл с командными центрами.

Именно поэтому она представляет наибольший интерес с точки зрения криминалистической экспертизы. Но каждый раз доставать и расшифровывать этот скрытый раздел достаточно муторно, поэтому для автоматизации процесса нами была разработана специальная утилита TdlFsReader (eset.ru/tools/TdlFsReader.exe). Она находится в свободном доступе и поддерживает все известные модификации этого руткита, начиная с версии TDL3. Если посмотреть на ее внутренне устройство, то она состоит из нескольких компонентов:

  • определение версии руткита и алгоритма шифрования файловой системы;
  • парсера файловой системы и алгоритма расшифрования файлов внутри нее;
  • противодействие механизмам самозащиты руткита;
  • чтение жесткого диска на низком уровне.

В результате работы TdlFsReader мы получаем полный дамп скрытого раздела файловой системы руткита. Подобные улики в виде конфигурационного файла, содержащего адреса командных центров и его активных компонентов, являются интересным материалом, который может дать дополнительные векторы развития для расследования. Более того, даже после удаления большинством лечащих утилит активного заражения TDL4, скрытый раздел файловой системы все равно остается на жестком диске, и из него также можно получить информацию.

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

Содержание
ttfb: 3.7569999694824 ms