Киберразведка получила уникальную возможность заглянуть во внутреннюю кухню одной из самых активных северокорейских хакерских группировок. Благодаря критической ошибке настройки - оставленному открытым листингу директорий на командном сервере (C2, Command and Control) - исследователи смогли скачать полные исходные коды всех трёх этапов сложной цепочки вредоносной программы, используемой группировкой Kimsuky для шпионажа. Этот инцидент не только раскрывает технические детали последней кампании, но и позволяет напрямую связать её с ранее известными операциями, демонстрируя эволюцию инфраструктуры злоумышленников.
Описание
Инцидент начался 11 апреля 2026 года, когда исследователь обнаружил и отправил в открытый репозиторий MalwareBazaar подозрительный CHM-файл (api_reference.chm). Этот формат, представляющий собой скомпилированную HTML-справку, давно используется злоумышленниками в качестве вектора атаки, поскольку его открытие легитимной системной утилитой "hh.exe" может запускать скрытое выполнение кода. Файл был помечен тегами, указывающими на связь с APT-группой Kimsuky, известной таргетированными атаками на организации в Южной Корее и за её пределами. Анализ быстро подтвердил эти предположения.
Главной удачей для исследователей стала конфигурационная ошибка на сервере управления, расположенном по адресу "check[.]nid-log[.]com". Администратор оставил включённым листинг директорий веб-сервера, что позволило любому желающему просматривать структуру файлов и, что критически важно, напрямую загружать полезные нагрузки. Это дало возможность полностью восстановить исходный код вредоносной программы до того, как операторы могли обнаружить утечку и сменить инфраструктуру. В своём отчёте специалисты по киберразведке подробно описали три этапа атаки.
Первая стадия представляет собой скрипт на VBScript объёмом 6 338 байт. Его задача - глубокая разведка системы. Скрипт собирает исчерпывающую информацию: данные об операционной системе, процессоре, оперативной памяти, полный список запущенных процессов и установленных антивирусных продуктов. Также он проводит инвентаризацию файлов в ключевых папках пользователя, таких как "Рабочий стол", "Документы" и "Загрузки". Для обеспечения постоянного присутствия в системе скрипт создаёт запланированную задачу с безобидным названием "Edge Updater", которая запускается каждый час и гарантирует, что вредоносная программа будет восстановлена даже после перезагрузки.
Вторая стадия - это компактный мостик-скрипт на VBScript (449 байт), чья единственная цель - незаметно запустить более мощную нагрузку на PowerShell. Третий и главный этап - это полнофункциональный кейлоггер (регистратор нажатий клавиш) на PowerShell объёмом 6 234 байта. Он не только перехватывает все нажатия клавиш, но и отслеживает содержимое буфера обмена, записывает заголовки активных окон и периодически отправляет собранные данные на сервер злоумышленников. Для маскировки сетевого трафика кейлоггер использует намеренно искажённые строки User-Agent, например "Chremo" вместо "Chrome" и "Edgo" вместо "Edge", что позволяет ему избегать простых сигнатурных правил в системах обнаружения.
Особый интерес представляет серверная инфраструктура. Анализ показал, что сервер использует характерную текстовую метку "Million OK !!!!" в ответ на проверку здоровья. Эта же сигнатура была задокументирована в декабре 2024 года на более старых серверах Kimsuky. Сравнение позволило отследить эволюцию: если раньше группа использовала Apache 2.4.25 на 32-битной Windows с PHP 5.6.30, то теперь перешла на более современные Apache 2.4.58 (Win64) и PHP 8.2.12, сохранив при этом опознавательный "почерк". Исследователям даже удалось обнаружить старый сервер, всё ещё работающий с оригинальной конфигурацией, что подтвердило преемственность.
Картирование инфраструктуры выявило масштаб операции. Было обнаружено более 79 доменных имён, распределённых по пяти IP-адресам, в основном через корейских VPS-провайдеров. Эти домены имитировали страницы налоговой службы Кореи (NTS) и сервисы авторизации Naver (NID), нацеливаясь на кражу учётных данных. Критически важным стало обнаружение связи с предыдущей кампанией. Командный сервер из этого расследования находится в той же подсети провайдера DAOU Technology, что и фишинговый узел "uncork[.]biz", который аналитики связывали с кластером "udalyonka" в своём более раннем исследовании. Это прямо указывает на работу одного и того же операционного звена группировки.
Последствия этой утечки значительны для сообщества информационной безопасности. Впервые в открытом доступе оказался полный исходный код цепочки атаки Kimsuky, что позволяет глубже понять её тактику, технику и процедуры (TTP). Для специалистов по защите это даёт чёткие индикаторы компрометации (IOC): от специфичного мьютекса "Global\AlreadyRunning19122345" и файла "Office_Config.xml" в каталоге Templates до сетевых сигнатур с искажёнными User-Agent. Хотя группировка, несомненно, скорректирует свои инструменты после этого инцидента, текущее окно возможностей позволяет компаниям, особенно в Азиатско-Тихоокеанском регионе, проверить свои системы на предмет уже известных признаков активности и усилить мониторинг необычных цепочек процессов, начинающихся с "hh.exe".
Индикаторы компрометации
IPv4
- 118.194.249.109
- 130.94.29.111
- 27.102.137.150
- 27.102.137.38
- 51.79.185.184
Domains
- check.nid-log.com
- nid-log.com
URLs
- http://check.nid-log.com/api/bootservice.php
- http://check.nid-log.com/api/checkservice.php
- http://check.nid-log.com/api/finalservice.php
SHA256
- 1eff237dee95172363bfc0342d0389f809f753a6ec5e6848e57b3fd5482e9793
- 85f8f8a3f28d2956776fbbd0365cdb78ac8dc1e6ed12818ef18caed0bb2f74c8
- a36576a096db24a1c91327eb547dedf52e5bd4b0d4593b88d9593d377585b922
- af50f35701916d3909f2727cdcbde1a7af47f46eb8db3996905b1c0725aa133f
- d7c09e7bf79aa9b786dcd9f870427f4a1110f702646fba9d3835215ad3649d0b
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | rule Kimsuky_Bootservice_CHM_Dropper { meta: description = "Kimsuky CHM dropper delivering VBS stager via bootservice.php C2" author = "GHOST - Breakglass Intelligence" date = "2026-04-11" reference = "https://intel.breakglass.tech" strings: $c2_1 = "bootservice.php" ascii wide $c2_2 = "checkservice.php" ascii wide $c2_3 = "finalservice.php" ascii wide $c2_4 = "loggerservice.php" ascii wide $drop = "Links\\Link" ascii wide $ole = "Microsoft.XMLHTTP" ascii wide $persist = "OfficeUpdater" ascii wide $mutex = "AlreadyRunning19122345" ascii wide $ua_1 = "Chremo/" ascii wide $ua_2 = "Edgo/" ascii wide condition: any of ($c2_*) and any of ($drop, $ole, $persist, $mutex, $ua_*) } |