Отчеты о целевых атаках (APT)

ToddyCat: не поддавайтесь панике и проверяйте логи

ToddyCat — это активная APT-группировка, о которой мы рассказывали в предыдущей публикации в прошлом году. Она начала свою деятельность в декабре 2020 года и за это время совершила множество атак на высокопоставленные организации в Европе и Азии.

Наша первая публикация была посвящена основным инструментам группы — троянцу Ninja и бэкдору Samurai, а также описанию набора загрузчиков, используемых для их запуска. Мы рассказали, как злоумышленники скомпрометировали публично доступные серверы, используя уязвимость в Microsoft Exchange, как атаковали пользовательские компьютеры, рассылая вредоносные загрузчики, и как обеспечивали закрепление в системе, используя многоступенчатую схему загрузки.

С момента публикации прошлого отчета мы продолжали следить за активностью группировки и обнаружили новый набор загрузчиков, разработанных с нуля, а также собрали дополнительную информацию об активности группировки на этапе постэксплуатации. Все это позволило расширить наши знания о ToddyCat и получить новые сведения о ее техниках, тактиках и процедурах (TTP). В этой статье мы расскажем о новом наборе вредоносных инструментов, о программах, используемых для кражи и эксфильтрации данных, а также о методах, применяемых этой группой для перемещения в инфраструктуре и проведения шпионских операций.

Инструменты

Стандартный загрузчик

Новые загрузчики вредоносного ПО, используемые ToddyCat, представляют собой 64-разрядные библиотеки, которые вызываются файлом rundll32.exe или загружаются с помощью техники «сайдлоадинг DLL» к легитимным и подписанным исполняемым файлам. Эти компоненты используются на этапе заражения для загрузки троянца Ninja на следующем этапе. Нам известны три варианта этих новых загрузчиков:

Различия Вариант Update A Вариант VLC A Вариант VLC B
Библиотека загружается в rundll32.exe vlc.exe vlc.exe
Вредоносный код расположен в функции DllMain libvlc_new libvlc_new
Имя загружаемого файла update.bin playlist.dat playlist.dat
Следующий этап загружается в Память текущего процесса Память текущего процесса Порождается новый процесс wusa.exe, и происходит загрузка в его память
Следующий этап Библиотека, экспортирующая функцию Start Библиотека, экспортирующая функцию «_» Шелл-код

Первый вариант мы видели под именем update.dll или x64.dll, он загружался стандартной утилитой Windows rundll32.exe. Большая часть его вредоносного кода расположена в функции DllMain, однако код, выполняемый на следующем этапе, расположен в функции Start. Другие два варианта загружаются легитимным медиаплеером VLC.exe с помощью сайдлоадинга DLL.

Загрузчик начинает свою работу, исполняя зашифрованную нагрузку из другого файла, который должен находиться в той же самой директории. Загруженные данные декодируются с помощью функции XOR, при этом ключ для декодирования генерируется с помощью необычной техники. Зловред использует алгоритм, содержащий операции перемещения и сложения, для генерации 256-байтного блока XOR_KEY на основе статического 16-байтного значения XOR_SEED:

 

Полученный блок XOR_KEY дополнительно перемешивается с помощью еще одного встроенного блока IDX длиной 64 байта в качестве индекса, для получения определенного ключа XOR длиной 256 байтов. Этот ключ используется для расшифровки содержимого файла, а результат загружается в память.

Версии Update A и VLC A загружают следующий этап в свое собственное адресное пространство. При этом расшифрованная нагрузка должна представлять собой библиотеку, экспортирующую функцию с именем start или «_» в зависимости от версии.

Версия VLC B запускает новый процесс wusa.exe (Windows Update Standalone Installer), легитимную утилиту Windows, расположенную в директории System32. После этого он загружает расшифрованную нагрузку в адресное пространство запущенного процесса и исполняет ее с помощью функции CreateRemoteThread Windows API.

Tailored-загрузчик

В ходе нашего исследования мы заметили, что на некоторых целевых хостах злоумышленники заменяли стандартные загрузчики на другой вариант, который мы назвали Tailored-загрузчиком (или адаптивным загрузчиком, поскольку зашифрованный файл подстраивается под конкретную систему). Его код похож на стандартный загрузчик — вариант VLC A. Основные различия заключаются в расположении и имени зашифрованного файла — %CommonApplicationData%\Local\user.key — и схеме дешифрования, которая используется для получения конечной полезной нагрузки.

В загрузчике используется тот же алгоритм, о котором говорилось выше: с помощью XOR_SEED генерируется 256-байтный блок XOR_KEY, который затем смешивается с другим встроенным 64-байтным блоком IDX. Перед смешиванием этих двух блоков вредоносная программа собирает свойства хранилища PhysicalDrive0, чтобы получить модель диска.

Фрагмент кода, используемый для получения свойств хранилища

Фрагмент кода, используемый для получения свойств хранилища

И использует функцию GetVolumeNameForVolumeMountPointA для получения GUID-тома «C:\».

Фрагмент кода, используемый для получения GUID-тома «С:\»

Эти два значения последовательно используются в качестве XOR-ключа для модификации IDX-блока. Такой подход свидетельствует о том, что зашифрованная полезная нагрузка, хранящаяся в user.key, адаптирована для целевой системы.

Исходя из наших наблюдений, мы полагаем, что Tailored-загрузчик используется для долговременного закрепления в целевых системах. Для достижения этой цели используется та же техника, что и в бэкдоре Samurai, который позволяет злоумышленнику спрятать вредоносную программу в адресном пространстве svchost.exe.

В данном случае злоумышленник создает следующий ключ реестра:

Ключ предназначен для того, чтобы заставить легитимный процесс svchost.exe загружать службу FontCacheSvc при запуске системы. Командная строка процесса будет выглядеть следующим образом:

Злоумышленник также создает новую службу, настроенную на загрузку Tailored-загрузчика, который обычно хранится с именем apibridge.dll.

Ninja

Последним этапом, загружаемым описанными ранее компонентами, был агент Ninja. Это сложное вредоносное программное обеспечение, написанное на языке C++, вероятно, являющееся частью неизвестного набора инструментов для постэксплуатации, разработанного ToddyCat. Мы описывали его в нашей предыдущей публикации.

Агент представляет собой мощный инструмент, обеспечивающий различные возможности, включая следующие (но не ограничиваясь ими):

  • перечисление запущенных процессов и управление ими;
  • управление файловой системой;
  • управление несколькими сеансами обратных соединений (reverse shell);
  • внедрение кода (code injection) в произвольные процессы;
  • загрузка дополнительных модулей (возможно, плагинов) во время выполнения;
  • функциональность прокси-сервера для пересылки TCP-пакетов между C2 и удаленным хостом.

Последняя версия агента поддерживает те же команды, которые были описаны в предыдущем отчете, но с другой конфигурацией. Если в предыдущей версии обфускация встроенной конфигурации осуществлялась с помощью XOR-ключа 0xAA, то в новой версии для той же цели используется двоичная операция NOT.

Хотя информация, содержащаяся в конфигурации, осталась прежней, имя мьютекса было перенесено после HTTP-заголовков.

LoFiSe

Этот инструмент предназначен для поиска и сбора интересных для ToddyCat файлов на целевых системах. Его название происходит от первых букв слов в имени мьютекса, который он создает (MicrosoftLocalFileService). Сам инструмент представляет собой DLL-файл с именем DsNcDiag.dll, который запускается с помощью техники «сайдлоадинг DLL». В качестве загрузчика используется легитимный исполняемый файл с цифровой подписью и оригинальным именем nclauncher.exe из пакета программ Pulse Secure Network Connect 8.3.

Известны следующие пути и имена файлов в атакованных системах:

  • C:\Program Files\Windows Mail\AcroRd64.exe
  • C:\Program Files\Windows Mail\DsNcDiag.dll
  • C:\Program Files\Common Files\VLCMedia\VLCMediaUP.exe
  • C:\Program Files\Common Files\VLCMedia\DsNcDiag.dll

После запуска LoFiSe начинает отслеживать изменения в файловой системе. При этом контролируются все диски в системе. После получения события создания или модификации файла инструмент выполняет несколько проверок. Фильтруются файлы, размер которых превышает 6 400 000 байт (~ 6 Мбайт). Также фильтруются файлы из определенных папок: все файлы, содержащие в своем полном пути «ProgramData», или файлы, которые уже хранятся в рабочих директориях инструмента.

Известны следующие рабочие директории, в которых инструмент хранит свои файлы, в зависимости от версии:

  • C:\Programdata\Microsofts\
  • C:\windows\temp\

На следующем этапе проверяется расширение файла по следующим маскам:

Если файл прошел все проверки, LoFiSe вычисляет его MD5-хэш, который используется для проверки ранее скопированных файлов, и сохраняет эту информацию в базу данных. Файл базы данных под названием Date.db во всех известных версиях утилиты создается в рабочей директории. В базу данных добавляются две таблицы:

Таблица с путями скопированных файлов в системе

Таблица с путями скопированных файлов в системе

Таблица с MD5-хэш-суммами скопированных файлов

Таблица с MD5-хэш-суммами скопированных файлов

Если хеш-сумма файла отсутствует в таблице, то он будет скопирован в рабочую директорию.

Каждые три часа LoFiSe собирает скопированные файлы в защищенный паролем ZIP-архив и помещает его в отдельную папку для дальнейшей эксфильтрации.

Содержимое архива и лог файла скопированных файлов в системе

Содержимое архива и лог файла скопированных файлов в системе

DropBox-загрузчик

Это доступный любому универсальный загрузчик данных на популярный файловый хостинг DropBox. Вероятно, этот инструмент востребован не только у ToddyCat, но мы наблюдали, как именно эта группа использовала его для эксфильтрации украденных документов.

Эта небольшая утилита принимает в качестве аргумента токен доступа пользователя DropBox. Затем она анализирует текущий рабочий каталог и загружает файлы со следующими расширениями:

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

Pcexter

Это еще один загрузчик, используемый для эксфильтрации файлов, но уже в облако Microsoft OneDrive. Данный инструмент распространялся в виде DLL-файла с именем Vspmsg.dll, который выполнялся с использованием техники «сайдлоадинг DLL». В качестве контейнера для загрузки инструмент использует легитимный исполняемый файл из Visual Studio — VSPerfCmd, который предназначен для сбора данных о производительности приложений.

Известные пути, по которым эти исполняемые файлы располагались на атакуемых системах:

Pcexter принимает следующие параметры командной строки:

Параметр Описание
—proxy Адрес прокси-сервера, который используется для функции InternetOpenA
—user, —pwd Учетные данные прокси-сервера
-d Папка, в которой находятся файлы для отправки
—rex Маска, по которой инструмент будет искать файлы для отправки

После запуска Pcexter ожидает освобождение события Global\SystemLocalPcexter, которое устанавливается и освобождается инструментом LoFiSe, а затем начинает поиск файлов в указанной директории по заданной маске.

Pcexter использует авторизацию OneDrive OAuth 2.0, получает токен доступа и отправляет все найденные файлы методом POST.

Другие инструменты

Пассивный UDP-бэкдор

Это простой пассивный бэкдор, который получает команды с помощью UDP-пакетов. Перед запуском бэкдора злоумышленники выполняют следующую команду:

Эта команда создает новое правило фаервола с именем SGAccessInboundRule на целевом хосте, что позволяет бэкдору получать UDP-пакеты, приходящие на порт 49683. После создания правила злоумышленники запускают бэкдор:

Логика его работы проста: он привязывает UDP-сокет к указанному порту, распаковывает полученные данные и выполняет расшифрованную строку с помощью функции WinExec. После выполнения команды бэкдор отправляет обратную связь о выполнении команды, возвращая сообщение, содержащее текущее системное время и выполненную команду. Однако бэкдор не обеспечивает вывод результатов выполнения команды.

Точная цель этого бэкдора в настоящее время неизвестна. Мы предполагаем, что он используется для обеспечения дополнительной точки входа в систему в случае обнаружения других имплантов.

CobaltStrike

В ходе нашего расследования мы заметили, что злоумышленники использовали CobaltStrike перед развертыванием агента Ninja. В частности, мы наблюдали использование загрузчика, написанного на C++ и расположенного по следующему пути:

Вредоносная программа загрузила встроенный ресурс под названием BIN. Содержимое ресурса деобфусцировалось с помощью алгоритма XOR и встроенного в код ключа: B0 9A E4 EA F7 BE B7 B0.

Полученная полезная нагрузка представляла собой CobaltStrike Beacon, настроенный для связи со следующим URL-адресом:

Примерно через 10 минут после заражения в системе был обнаружен ToddyCat Ninja.

Постэксплуатация

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

Группа выполняет действия по обнаружению, перечисляет учетные записи домена и контроллеры домена, используя стандартные утилиты администрирования операционной системы, такие как net и ping:

После определения потенциальных целей группа перемещается между хостами. При этом она локально монтирует общие сетевые ресурсы, используя скомпрометированные учетные данные администратора домена:

Злоумышленники стараются с течением времени менять используемые учетные данные. После копирования скрипта создается, выполняется и немедленно удаляется задача по расписанию вместе с общим сетевым ресурсом, причем все циклически для каждого целевого хоста:

Задача по расписанию обычно может содержать команды для исследования окружения системы, запуска исполняемых файлов или сценариев PowerShell или BAT, которые отвечают за сбор данных.

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

В приведенных командах при боковом перемещении в инфраструктуре используется запуск PowerShell-скрипта. Кроме того, мы заметили, что те же команды PowerShell, которые выполнялись в рамках этого сценария, были обернуты в сценарий BAT, предположительно чтобы избежать обнаружения.

Из всех используемых злоумышленниками папок при боковом перемещении они чаще всего выбирают пользовательские:

Злоумышленники повторно используют одни и те же имена задач для одного и того же сеанса. Эти имена обычно выбираются так, чтобы вызывать меньше подозрений, — например, «one» и «tpcd», — в то время как имена сценариев могут состоять из случайных символов (от двух до четырех), выбираемых с более высокой энтропией.

На завершающем этапе активности на хосте, с которого происходит эксфильтрация, монтируется и затем удаляется временный общий ресурс:

Сбор и эксфильтрация данных

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

Схема кражи данных

Схема кражи данных

Мы уже описывали некоторые инструменты, такие как LoFiSe, специально разработанные для идентификации и сбора интересующих файлов, но в ходе расследования мы также обнаружили другие скрипты, используемые ToddyCat для подсчета файлов на дисках целевого хоста с помощью WMI и сбора недавно измененных документов, имеющих расширения .pdf, .doc, .docx, .xls и .xlsx.

В этих случаях сжатие выполняется с помощью таких инструментов, как 7zip или RAR-утилита. Конкретные инструменты, вероятно, выбираются на основе того, что уже доступно в инфраструктуре. В отличие от LoFiSe, сценарии сбора данных хранят пути к найденным документам в текстовом файле TXT. Сжатие документов может выполняться непосредственно на целевом хосте или на хосте, с которого будет происходить эксфильтрация.

Ниже приведено содержимое скрипта BAT, запущенного на целевых хостах:

В приведенном выше примере файлы были заархивированы в папке tmp_; мы также наблюдали использование папки с именем, параметризованным в соответствии с именем хоста, например:

Документы, которые необходимо собрать, также выбираются по дате их последнего изменения — она должна попадать в определенное количество дней, отсчитанное от текущей даты. Это число обычно передается в качестве аргумента скрипта или может быть жестко задано (как в предыдущем примере).

Скрипт для сбора данных использует разную стратегию при выборе источников данных на основных и дополнительных дисках. В Windows для диска, используемого по умолчанию, скрипт проходит через каталоги профилей пользователей (C:\Users). Такой подход увеличивает вероятность сбора ценных данных, одновременно сокращая необходимое время обработки и сводя к минимуму вероятность сбора нежелательных файлов. При работе с внешними устройствами и другими неосновными носителями данных скрипт выбирает более целесообразную стратегию, производя поиск в корневом каталоге (\). Хотя основной диск всегда доступен, дополнительные диски могут быть периодически отключены, что ограничивает возможности сбора данных. Чтобы обойти это ограничение, злоумышленник иногда расширяет временной диапазон, включая в него более старые файлы на дополнительных и съемных дисках (как можно отметить во фрагменте BAT).

PowerShell-скрипт устроен несколько иным образом:

Злоумышленники пытаются обойти защиту, скрывая сценарии и распространяя их с помощью специальных дропперов, которые встраивают код сценария в раздел PE «.text».

PowerShell-скрипт внутри исполняемого файла

PowerShell-скрипт внутри исполняемого файла

Дроппер получает два параметра; первый — это строка пароля, которую необходимо предоставить для начала выполнения, а второй — число, которое фактически передается через командную строку в скрипт PS. После запуска дроппер создает файл с именем pro.ps1 и выполняет его через PowerShell:

В остальных случаях мы наблюдали варианты скриптов, предназначенные исключительно для сбора данных и копирования файлов в определенные папки, но без включения их в сжатые архивы. В этих случаях злоумышленники выполняют сценарий на удаленном хосте, используя стандартную технику удаленного выполнения задач. Собранные файлы затем вручную переносят на хост, используемый для эксфильтрации, с помощью утилиты xcopy и сжимают с помощью утилиты 7z:

Затем активность продолжается фактической эксфильтрацией с использованием одного из вышеупомянутых инструментов, Pcexter или загрузчика Dropbox:

Индикаторы компрометации ToddyCat (IoC)

Loaders

97D0A47B595A20A3944919863A8163D1 Variant «Update»
828F8B599A1CC4A02A2C3928EC3F5F8B Variant «VLC» A
90B14807734045F1E0A47C40DF949AC4 Variant «VLC» B
0F7002AACA8C1E71959C3EE635A85F14 Tailored loader
D3050B3C7EE8A80D8D6700624626266D Tailored loader
D4D8131ED03B71D58B1BA348F9606DF7 Tailored loader

Passive UDP backdoor
65AF75986577FCC14FBC5F98EFB3B47E

Dropbox exfiltrator
BEBBEBA37667453003D2372103C45BBF

LoFiSe
14FF83A500D403A5ED990ED86296CCC7
4AD609DDDF2C39CDA7BDBE2F9DC279FD

Pcexter
D0CD88352638F1AE101C2A13356AB6B7
318C16195F62094DADCC602B547BBE66

Dropper
C170F05333041C56BCC39056FECB808F

File paths

C:\Program Files\Windows Mail\AcroRd64.exe LoFiSe Launcher
C:\Program Files\Windows Mail\DsNcDiag.dll LoFiSe
C:\Program Files\Common Files\VLCMedia\VLCMediaUP.exe LoFiSe Launcher
C:\Program Files\Common Files\VLCMedia\DsNcDiag.dll LoFiSe
C:\windows\temp\googledrivefs.exe Pcexter Launcher
C:\windows\temp\vspmsg.dll Pcexter
c:\program files\windows mail\securityhealthsystray64.exe Pcexter Launcher
c:\program files\windows mail\vspmsg.dll Pcexter
c:\program files\common files\vlcmedia\vlcmediastatus.exe Pcexter Launcher
c:\program files\common files\vlcmedia\vspmsg.dll Pcexter
C:\users\public\mfc.exe Dropper
C:\Windows\System32\up.dll Loader Simple Update
C:\Windows\System32\x64.dll Loader Simple Update
C:\Intel\x64.dll Loader Simple Update
C:\Perflogs\1.dll Loader Simple Update
C:\ibmsgtk\x64.dll Loader Simple Update
C:\Windows\Debug\1.dll Loader Simple Update
C:\vlcmedia\libvlc.dll Loader Simple VLC — wusa.exe inject
C:\restores\libvlc.dll Loader Simple VLC
C:\Users\%User%\libvlc.dll Loader Simple VLC
C:\Windows\System32\libvlc.dll Loader Simple VLC
C:\Intel\libvlc.dll Loader Simple VLC
C:\Program Files\Common Files\vlcmedia\libvlc.dll Loader Simple VLC — wusa.exe inject
C:\Program Files\Common Files\System\apibridge.dll Loader Tailored
C:\System\apibridge.dll Loader Tailored
c:\windows\debug\aspnet.exe Passive UDP Backdoor
C:\Microsoft\network\aspnet.exe Passive UDP Backdoor
C:\ProgramData\Microsoft\Network\aspnet.exe Passive UDP Backdoor
c:\windows\debug\svl.exe Passive UDP Backdoor — Not Persistent
C:\Intel\db_org.exe DropBox Uploader
C:\Debug\db_org.exe DropBox Uploader
C:\Users\Public\Downloads\DB_SIMPLE.exe DropBox Uploader
C:\ProgramData\db_org.exe DropBox Uploader
C:\ProgramData\Microsoft\XboxLive\db_org.exe DropBox Uploader
C:\ProgramData\VLCMedia\playlist.dat Encrypted Payload
C:\Windows\System32\update.bin Encrypted Payload
C:\ibmsgtk\update.bin Encrypted Payload
C:\Intel\update.bin Encrypted Payload
C:\Windows\Debug\update.bin Encrypted Payload
C:\Perflogs\update.bin Encrypted Payload
C:\Intel\playlist.dat Encrypted Payload
C:\restores\playlist.dat Encrypted Payload
C:\Windows\System32\playlist.dat Encrypted Payload
C:\ProgramData\Local\user.key Encrypted Payload

Domains

solitary-dawn-61af.mfeagents.workers[.]dev Ninja C2
www.githubdd.workers[.]dev CobaltStrike C2

URLs

hxxps://solitary-dawn-61af.mfeagents.workers[.]dev/collector/3.0/ Ninja C2
hxxps://www.githubdd.workers[.]dev/fam/mfe?restart=false CobaltStrike C2

Registry keys
$HKLM\System\ControlSet\Services\FontCacheSvc

Mutexes
MicrosoftLocalFileService

Events
Global\SystemLocalPcexter

ToddyCat: не поддавайтесь панике и проверяйте логи

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

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

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

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