Исследователи угроз из Pulsedive Threat Research провели детальный анализ многоступенчатой вредоносной кампании, связанной с северокорейской группировкой Kimsuky. Результаты исследования, опубликованные 5 ноября 2025 года, раскрывают технические детали сложной цепочки заражения, использующей JavaScript-дроппер для сбора системной информации и установки механизмов постоянства.
Описание
Группа Kimsuky, активная с 2012 года, традиционно специализируется на шпионских операциях против правительственных структур, аналитических центров и экспертов в различных областях. Обнаруженные образцы демонстрируют эволюцию тактик группировки, использующей легитимные сервисы для размещения компонентов своей инфраструктуры.
Исследование началось с анализа публикаций в социальной сети X, где исследователи безопасности делились индикаторами компрометации, связанными с активностью Kimsuky. Среди первоначальных находок были сетевые индикаторы, хеши файлов и имена LNK-файлов. Исследователь под псевдонимом @naumovax предоставил дополнительные данные, включая фрагменты сетевого трафика и ссылку на анализ в песочнице Any.Run.
Первым звеном в цепочке заражения стал JavaScript-файл Themes.js, который выполняет функцию дроппера - компонента, предназначенного для загрузки следующих стадий вредоносной нагрузки. Файл не содержит обфускации и его единственная цель - загрузка и выполнение кода с управляемой злоумышленниками инфраструктуры. Весь код инкапсулирован в блок try-catch, что обеспечивает устойчивость к ошибкам выполнения.
Дроппер инициирует GET-запрос к домену iuh234[.]medianewsonline[.]com по URI /dwnkl[.]php с двумя параметрами: uid, содержащим имя компьютера жертвы, и key с жестко заданным значением kx. Сайт Median News представляет собой платформу, позволяющую пользователям создавать субдомены для различных проектов. Хотя сам сайт не является вредоносным, злоумышленники активно используют такие сервисы для размещения компонентов своей инфраструктуры.
Анализ в VirusTotal показал множество GET-запросов с различными именами компьютеров в параметре uid, что свидетельствует о масштабности кампании. После выполнения начального скрипта сервер возвращает более сложный JavaScript-код, состоящий из пяти функций и блока try-catch.
Вторая стадия вредоносного кода предназначена для сбора системной информации, списка запущенных процессов и перечисления файлов в папке Users. После сбора каждой категории данных код пытается загрузить результаты на управляемый злоумышленниками домен. По завершении эксфильтрации временные файлы удаляются.
Код выполняет четыре основные команды. Первая собирает системную информацию через systeminfo, вторая получает список всех запущенных процессов, третья анализирует содержимое каталога C:\\Users, сортируя файлы по дате изменения и отображая их атрибуты. После выполнения каждой команды результаты передаются на сервер. Финальная функция изменяет рабочий каталог на %TEMP% и удаляет все временные файлы с расширением .tmp.
Функция ExecuteCommand модифицирует регистр HKCU\\Console\\CodePage, устанавливая значение 65001 для настройки кодировки ввода-вывода UTF-8. Затем создается файл со случайным именем в каталоге %TEMP% для хранения результатов выполнения команд.
Процесс эксфильтрации данных осуществляется через функцию UploadResult, которая использует вспомогательные функции для подготовки и отправки информации. Данные передаются на URI /umprl.php?uid= с указанием имени компьютера в параметре. Содержимое для эксфильтрации преобразуется в CAB-архив с использованием утилиты certutil, классифицируемой как LOLBIN - легитимный системный инструмент, используемый в злонамеренных целях.
Система выполняет три POST-запроса для эксфильтрации различных категорий данных: системной информации, сведений о процессах и содержимого каталога Users. Каждый запрос содержит CAB-файл с соответствующими данными.
На третьей стадии атаки сервер возвращает дополнительный JavaScript-код в ответ на каждый POST-запрос. Этот код выполняет две основные функции, при этом веб-страница уменьшается до нулевых размеров и перемещается за пределы видимой области экрана для скрытия активности.
Функция MKSCHD отвечает за установку persistence-механизма. Она содержит жестко заданные данные в формате URL-encoded, которые после декодирования соответствуют коду начального образца Themes.js. Декодированное содержимое записывается в файл Themes.js в каталоге %APPDATA%\\Microsoft\\Windows\\Themes\\. Затем создается scheduled task с именем Windows Theme Manager, который запускается каждую минуту и выполняет файл через wscript.exe.
Функция OPDOM принимает параметр E-CARD.docx и содержит данные в формате base64, которые сохраняются во временный файл L298306.tmp в каталоге %Public%. Файл декодируется с помощью certutil, после чего временный файл удаляется. Декодированные данные представляют собой документ Word, который при анализе в песочнице оказывается пустым, что позволяет предположить его использование в качестве приманки.
Поскольку начальный вектор проникновения остается неясным, исследователи не могут определить, каким образом исходный файл Themes.js доставляется пользователям. Это указывает на необходимость комплексного подхода к безопасности, сочетающего технические средства защиты и обучение пользователей.
Для противодействия подобным угрозам рекомендуется развертывание EDR-решений и систем антивирусной защиты, способных обнаруживать подозрительные цепочки процессов и аномальную активность. Не менее важным является обучение пользователей основам кибербезопасности, включая правила обращения с подозрительными веб-сайтами и использования авторизованного программного обеспечения в корпоративных средах.
Анализ образца Kimsuky демонстрирует сложность современных кибератак и важность многоуровневой защиты. Использование легитимных сервисов, многостадийность атаки и применение механизмов постоянства (persistence) делают эту угрозу особенно опасной для организаций, являющихся целями шпионских операций.
Индикаторы компрометации
Domains
- iuh234.medianewsonline.com
URLs
- http://iuh234.medianewsonline.com/dwnkl.php?uid=DESKTOP-JGLLJLD&key=kx
MD5
- 1a00387c696fe3b7ea9602c4cb91f14e
SHA1
- 31acdff6710ff1e5f0b310fc42c2005a972da7b2
SHA256
- 596cd0d30fe035e8be1dd9d78c1f71a8fc0e2c653d1318af26c51758339ca6bd