Инциденты

Как ToddyCat пытались спрятаться за антивирусом

Чтобы скрыть свою активность в зараженных системах, APT-группы прибегают к разным техникам обхода защиты. Большинство из них хорошо известны и обнаруживаются как EPP-решениями, так и средствами мониторинга и реагирования на угрозы класса EDR. Например, для сокрытия своей активности в Windows-системах злоумышленники могут использовать руткиты уровня ядра, в частности вредоносные драйверы. Однако в современных операционных системах Windows драйверы в режиме ядра загружаются только при наличии у них цифровой подписи Microsoft. Злоумышленники обходят этот защитный механизм при помощи легитимных драйверов, которые имеют необходимую подпись, но содержат уязвимые функции, позволяющие выполнять вредоносные действия в контексте ядра. Средства мониторинга отслеживают установку таких драйверов и проверяют приложения, которые ее выполняют. Но что, если небезопасные действия выполнит защитное решение? Оно имеет больше доверия с точки зрения мониторинга системы и не вызывает подозрений.

Именно этим и решили воспользоваться атакующие из APT ToddyCat, запустив свой инструмент в контексте защитного решения.

Обнаружение

В начале 2024 года во время расследования инцидентов, связанных с активностью APT-группы ToddyCat, мы обнаружили подозрительный файл с именем version.dll во временной директории на нескольких устройствах.

Это 64-разрядная DLL-библиотека, написанная на C++, которая представляет собой комплексный инструмент под названием TCESB, ранее не встречавшийся в атаках ToddyCat. Он предназначен для скрытого выполнения полезной нагрузки в обход средств защиты и мониторинга, установленных на устройстве.

Продукты «Лаборатории Касперского» детектируют этот инструмент как Trojan.Win64.ToddyCat.a, Trojan.Win64.ToddyCat.b.

Загрузка инструмента

Проксирование DLL (DLL Proxying)

Статический анализ DLL-библиотеки показал, что все экспортируемые ею функции импортируют функции с теми же именами из системного файла version.dll (Version Checking and File Installation Libraries).

Список функций, экспортируемых инструментом TCESB

Список функций, экспортируемых инструментом TCESB

Это указывает на то, что для запуска вредоносного кода злоумышленники используют технику проксирования DLL (Hijack Execution Flow, T1574). Вредоносная DLL экспортирует все функции легитимной DLL, но вместо их реализации перенаправляет вызовы этих функций в оригинальную DLL. Таким образом, приложение, которое загружает вредоносную библиотеку, продолжит работать без сбоев, при этом в его контексте в фоновом режиме будет выполняться вредоносный код.

Схема выполнения техники проксирования DLL

Схема выполнения техники проксирования DLL

Однако для запуска зловреда этого недостаточно. Чтобы вредоносный DLL-файл смог перехватить управление, приложение, которое будет его загружать, должно содержать небезопасный код. Такой код выполняет поиск загружаемых образов динамических библиотек в папках, в которых они не должны находиться. Если в одной из этих папок будет содержаться вредоносная библиотека, уязвимое приложение загрузит ее вместо легитимной. Корпорация Microsoft дает рекомендации по предотвращению небезопасной загрузки DLL в своей официальной документации.

Уязвимость CVE-2024-11859 в ESET Command line scanner

Нам не сразу удалось обнаружить файл, загружающий инструмент TCESB. Мы изучили системные директории на устройствах, где были найдены вредоносные DLL-библиотеки. На одном из них в той же папке, что и TCESB, находился исполняемый файл без расширения с именем ecls. Мы полагаем, что оператор при переносе файлов на устройство ошибся в имени файла и перенес две его копии. После выполнения вредоносной активности файл с расширением был удален, а второй остался в системе. Этот файл оказался компонентом EPP-решения ESET — сканером, запускаемым из командной строки (ESET Command line scanner). Динамический анализ показал, что он небезопасно загружает системную библиотеку version.dll: сначала проверяет наличие файла в текущей директории, а затем ищет его в системных директориях. Это может привести к загрузке вредоносной DLL-библиотеки, что представляет собой уязвимость. Мы составили отчет с ее подробным описанием и отправили его компании ESET в рамках процедуры Coordinated Vulnerability Disclosure. ESET зарегистрировала уязвимость CVE-2024-11859, после чего 21 января 2025 года выпустила обновление для файла ecls, устраняющее проблему безопасности. 4 апреля информация об этой уязвимости была опубликована в рекомендациях по безопасности ESET.

Чтобы проанализировать инструмент TCESB, мы запустили его в виртуальной среде. В адресном пространстве процесса ESET Command line scanner можно увидеть два файла version.dll. Один из них — это системная библиотека, а второй — DLL инструмента TCESB.

Вредоносная и легитимная библиотеки в памяти процесса ecls.exe

Вредоносная и легитимная библиотеки в памяти процесса ecls.exe

Основная функциональность

Чтобы определить основные функции вредоносного инструмента, мы изучили строки, находящиеся в его DLL.

Фрагмент списка строк, которые содержит инструмент TCESB

Фрагмент списка строк, которые содержит инструмент TCESB

Строки не обфусцированы. Поиск показывает, что большинство из них принадлежат вредоносному инструменту с открытым исходным кодом EDRSandBlast, предназначенному для обхода защитных решений. Продукты «Лаборатории Касперского» детектируют его с вердиктом HEUR:HackTool.Win64.EDRSandblast.a. На его основе злоумышленники из APT ToddyCat создали DLL TCESB, изменив оригинальный код для расширения функциональности зловреда. Получившийся инструмент способен, помимо прочего, модифицировать структуры ядра операционной системы, чтобы отключить системные уведомления (notification routines), например, о событии создания процесса в системе или загрузки.

Поиск адресов в памяти ядра

Чтобы найти необходимые для отключения уведомлений структуры в памяти ядра, инструмент TCESB определяет версию ядра Windows, в контексте которого он был запущен. Для этого он использует функцию GetNtoskrnlVersion().

Функция получения версии ядра Windows, реализованная в TCESB

Функция получения версии ядра Windows, реализованная в TCESB

Затем, чтобы получить информацию о смещениях в памяти структур, соответствующих версии ядра операционной системы, TCESB использует один из двух источников данных: CSV- или PDB-файл.

Сначала инструмент проверяет содержащийся в секции собственных ресурсов CSV-файл. В нем хранится информация о нескольких популярных версиях ядра и соответствующих им смещениях в виде таблицы.

TCESB построчно ищет в этом файле совпадение с полученной ранее версией текущего ядра Windows.

Фрагмент функции получения и чтения CSV-файла из ресурсов инструмента TCESB

Фрагмент функции получения и чтения CSV-файла из ресурсов инструмента TCESB

Мы изучили CSV-файл в репозитории EDRSandBlast и историю его изменений. Содержимое CSV TCESB полностью совпадает с данными CSV в версии EDRSandBlast от 13 августа 2022 года, тогда как в коммите оригинального зловреда от 6 октября 2023 года добавляются строки, отсутствующие в ресурсе TCESB. Это указывает на временной промежуток, когда создатели инструмента TCESB использовали код EDRSandBlast.

Если в CSV-файле отсутствуют данные о структурах, соответствующих нужной версии ядра, TCESB читает их адреса из PDB-файла. Чтобы получить его, зловред обращается к файлу C:\Windows\System32\ntoskrnl.exe, содержащему информацию о версии файла ядра, и подставляет данные из этого файла в следующий шаблон, формируя URL-адрес:

Это адрес сервера отладочной информации Microsoft, на который TCESB отправляет GET-запрос для загрузки PDB-файла. Полученный файл сохраняется в текущей директории TCESB, и из него читаются данные о смещениях необходимых структур в памяти ядра.

Уязвимый драйвер

Чтобы изменить структуры ядра, в которых хранятся обратные вызовы, используемые для оповещения приложений о системных событиях, инструмент TCESB применяет технику BYOVD (Bring Your Own Vulnerable Driver, Exploitation for Defense Evasion, T1211). Для этого он устанавливает в системе уязвимый драйвер через интерфейс Диспетчера устройств (Device Manager), используя INF-файл с информацией, необходимой для установки.

Фрагмент декомпилированного кода установки драйвера TCESB

Фрагмент декомпилированного кода установки драйвера TCESB

Инструмент TCESB использует драйвер утилиты Dell DBUtilDrv2.sys, который содержит уязвимость CVE-2021-36276. Он предназначен для обновления драйверов, BIOS и микропрограммы ПК.

Запуск полезной нагрузки

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

Фрагмент декомпилированного кода TCESB

Фрагмент декомпилированного кода TCESB

Инструмент создает собственный лог-файл, куда подробно записывает все этапы выполнения.

Пример содержания лог-файла

Пример содержания лог-файла

Мы изучили два образца инструмента TCESB. Файлы полезных нагрузок нам получить не удалось, однако исследование показывает, что они имеют разные имена ( kesp и ecore) и оба не имеют расширения.

Проанализировав код инструмента, мы выяснили, что данные в файле полезной нагрузки зашифрованы с использованием AES-128.

Фрагмент кода определения алгоритма шифрования

Фрагмент кода определения алгоритма шифрования

Ключ для расшифровки находится в первых 32 байтах файла полезной нагрузки, за которым следует зашифрованный блок данных. Далее показан фрагмент кода, в котором читается ключ:

Фрагмент кода чтения ключа из файла полезной нагрузки

Фрагмент кода чтения ключа из файла полезной нагрузки

При помощи полученного ключа расшифровывается блок данных:

Фрагмент кода чтения и расшифровки файла полезной нагрузки

Фрагмент кода чтения и расшифровки файла полезной нагрузки

Прочитанные данные помещаются в память и выполняются.

Выводы

Мы обнаружили сложный инструмент, который APT-группа ToddyCat пыталась задействовать для скрытого запуска в скомпрометированных системах. Он использует цепочку уязвимостей, а также старую версию известного вредоносного ПО с открытым исходным кодом, в которую злоумышленники внесли изменения, расширяющие ее функциональность.

Схема работы инструмента

Схема работы инструмента

Для обнаружения активности подобных инструментов рекомендуется отслеживать события установки в системах драйверов с известными уязвимостями. Списки таких драйверов можно найти, например, на сайте проекта loldrivers. Кроме того, стоит отслеживать события загрузки отладочных символов ядра Windows на тех устройствах, на которых не предполагается проведение отладки ядра операционной системы. Также мы рекомендуем проверять наличие цифровой подписи у всех загружаемых файлов системных библиотек средствами OC.

Индикаторы компрометации

Хэш-суммы вредоносных файлов

D38E3830C8BA3A00794EF3077942AD96       version.dll 008F506013456EA5151DF779D3E3FF0F       version.dll

Легитимный файл для проксирования DLL

8795271F02B30980EBD9950FCC141304       ESET Command-line scanner

Легитимные файлы для BYOVD

B87944DCC444E4C6CE9BB9FB8A9C0DEF       dbutildrv2.INF DE39EE41D03C97E37849AF90E408ABBE       DBUtilDrv2.cat DACB62578B3EA191EA37486D15F4F83C       dbutildrv2.sys

Как ToddyCat пытались спрятаться за антивирусом

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

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике