Группировка Kimsuky использовала CHM-файл с корейским контентом для многоэтапной атаки

Kimsuky

Исследователи зафиксировали новую кампанию северокорейской группировки Kimsuky, в ходе которой применяется сложная многоступенчатая цепочка заражения. Атака начинается с отправки скомпрометированного CHM-файла - формата скомпилированной справки Windows. Внутри файла содержится легитимный на вид текст на корейском языке, посвященный продовольственному кризису в КНДР и связанным с ним правовым аспектам. Такая тематика указывает на то, что целью, вероятно, являются исследователи, политики или сотрудники гуманитарных организаций, работающие с северокорейской проблематикой.

Описание

CHM-файл содержит встроенный HTML-код, который при открытии запускает скрытый сценарий. Вместо отображения содержимого справки на странице тайно создается объект ActiveX с идентификатором CLSID:52a2aaae-085d-4187-97ea-8c30db990436. Этот объект используется для выполнения команды ShortCut - механизма, позволяющего запускать произвольные программы без сохранения отдельного файла на диск. В итоге запускается PowerShell с параметром, скрывающим окно.

PowerShell, в свою очередь, выполняет несколько последовательных действий. Сначала он записывает закодированные в Base64 данные в файл "%USERPROFILE%\Links\Link.dat". Затем с помощью штатной утилиты Windows "certutil.exe -decode" декодирует этот файл, превращая его в файл "Link.ini". Несмотря на расширение, этот файл на самом деле является VBScript-сценарием. После этого запускается "wscript.exe" с принудительным указанием интерпретатора VBScript. Так достигается первый этап загрузки - без записи исполняемых файлов на диск, с использованием только встроенных компонентов ОС.

Декодированный VBScript содержит небольшой загрузчик. Он генерирует случайное число (от 1 до 10 000) и отправляет GET-запрос на сервер управления (C2) по адресу "acnms.dmdoc.dynv6[.]net/smltm/bootservice.php" с параметром query=1. Полученный от сервера ответ выполняется прямо в памяти через функцию Execute - вся логика следующих этапов полностью контролируется атакующими.

Ответ на первый запрос представляет собой скрипт размером около 6 338 байт. Он выполняет три основные задачи: сбор информации о системе, закрепление в системе с помощью задания планировщика и отправку собранных данных на сервер. Для сбора информации используются запросы к WMI - получаются имя компьютера, версия ОС, объем памяти, характеристики процессора, а также сведения об установленных программах и запущенных процессах. Особое внимание уделяется папкам "Рабочий стол", "Документы", "Загрузки" и другим стандартным расположениям - перечисляются имена файлов и вложенных папок. Это позволяет злоумышленникам составить картину о целях и ценных данных на устройстве.

Собранные данные объединяются, кодируются в Base64 и передаются на сервер "finalservice.php" в виде multipart-запроса. Файл отправки называется Info.txt, фиксированная граница - "----c2xkanZvaXU4OTA". Сервер отвечает пустым HTTP-ответом кодом 200, что не прерывает работу сценария.

Для закрепления в системе скрипт создает задачу планировщика с именем "Edge Updater". Задача скрытая, запускается через пять минут после создания и повторяется каждый час. Действие задачи - запуск нового VBScript-файла, который сохраняется в кеш-папку пользователя с именем "OfficeUpdater_<время>.ini". Этот файл снова является VBScript, несмотря на расширение .ini. Кроме того, в реестр вносятся изменения, отключающие перенаправление Internet Explorer на Edge и подавляющие некоторые диалоговые окна. Точная цель этих изменений не установлена, но предполагается обеспечение совместимости с последующими этапами атаки.

При каждом срабатывании задачи загрузчик "OfficeUpdater" выжидает случайное время от 6 до 12 секунд, после чего отправляет новый запрос к "bootservice.php" с параметром query=6. Ответ на этот запрос (428 байт) содержит VBScript-код, который запускает PowerShell. Из PowerShell выполняется команда "Invoke-RestMethod" для получения скрипта с конечной точки "checkservice.php?idx=5&tag=<random>", после чего результат тут же исполняется через "Invoke-Expression". Затем вызывается функция "LogAction" с адресом C2. Самой функции "LogAction" в PowerShell нет - она должна быть определена в загружаемом скрипте.

Примечательно, что в ходе анализа последний этап - получение кода через "checkservice.php" - не принес ожидаемого результата. Сервер возвращал HTTP 200 с пустым телом. Это указывает на селективную доставку полезной нагрузки: сервер анализирует входящие запросы и принимает решение о выдаче финального скрипта. Возможные критерии - IP-адрес, результаты разведки, значение тега, ранее переданный инвентарь или ручное подтверждение оператора. При попытках получить код из разных стран через прокси лишь один из 130 тестовых IP-адресов (случайный дата-центр) вернул неожиданный HTML-код - форму проверки пароля с сайта W3Schools. Это не является признаком географической блокировки, но подтверждает, что сервер способен отличать автоматический анализ от целевого заражения.

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

Обнаруженная инфраструктура включает домен "acnms.dmdoc.dynv6[.]net" (хостинг на динамическом DNS сервисе dynv6.com, IP 118.194.249[.]91, сервер Apache на Windows). Фавикон сайта с зеленой буквой N совпадает с ранее использовавшимся Kimsuky в других кампаниях, что дополнительно подтверждает атрибуцию. Также в ходе трассировки найдены три дополнительных IP-адреса (51.79.185[.]184, 176.111.220[.]168, 152.32.138[.]15), которые с высокой вероятностью принадлежат той же группировке.

Эффективное обнаружение такой цепочки требует отслеживания необычных последовательностей процессов: "hh.exe", запускающий PowerShell, PowerShell, использующий "certutil.exe" для декодирования, "wscript.exe" с принудительным интерпретатором для файлов с нестандартным расширением, а также создание скрытой задачи планировщика с именем "Edge Updater". В сетевых логах следует обращать внимание на запросы к "bootservice.php", "finalservice.php" и "checkservice.php" с фиксированным multipart-границей и именем файла Info.txt.

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

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

IPv4

  • 118.194.249.91
  • 152.32.138.15
  • 176.111.220.168
  • 51.79.185.184

Domain

  • acnms.dmdoc.dynv6.net
  • aointerviews.com

URL

  • http://acnms.dmdoc.dynv6.net/smltm/finalservice.php

SHA256

  • 0efbd18c77479b458078521c18bdad84852b71250122a17cb8105c10d3df38d4
  • 21781885f9d6ebc5f9e0f828aacbe3db2aaa1c142bda1495b17e723c9912f826

Комментарии: 0