Threat Response
Threat Response

Весенний урожай — кампания группы Leek Likho по охоте на документы

Введение

Группировка Leek Likho (также известная как SkyCloak или Vortex Werewolf) впервые была описана исследователями в 2025 году, когда стало известно о серии целевых атак на организации государственного сектора России и Беларуси. Эта кампания получила название Операция SkyCloak. Мы наблюдали продолжение ее активности на протяжении февраля–апреля 2026 года, а также обнаружили новую технику, которую злоумышленники используют для эксфильтрации файлов.

Основная схема заражения осталась прежней: злоумышленники распространяют вредоносные архивы с файлами-приманками, внутри которых находятся LNK-файл с двойным расширением и еще один архив, содержащий набор инструментов. Запуск LNK-файла инициирует цепочку выполнения PowerShell-скриптов, выступающих в роли загрузчиков и устанавливающих задачи по расписанию. Таким образом в системе будут запускаться инструменты удаленного доступа через Tor и ssh, через которые происходит соединение с управляющим сервером. После этого в зараженную систему загружается инструмент для эксфильтрации rclone, который собирает файлы с хоста жертвы и выгружает их по установленному соединению с командным центром.

Схема компрометации жертв

Первоначальный доступ: LeekSower

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

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

Содержимое архива с вредоносным вложением во встроенном приложении Windows (сверху) и 7-Zip (снизу)

Содержимое архива с вредоносным вложением во встроенном приложении Windows (сверху) и 7-Zip (снизу)

Если открыть загруженный архив при помощи другого архиватора, например 7-Zip, то становится видно, что на самом деле этот файл — вредоносный ярлык с двойным расширением .pdf.lnk. Он устанавливает иконку PDF-документа из файла C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe.

Иконка файла msedge.exe, которую использует вредоносный ярлык

Иконка файла msedge.exe, которую использует вредоносный ярлык

Помимо LNK-файла, внутри архива содержится скрытая папка.

После того как пользователь запускает ярлык, начинается выполнение содержащейся в нем командной строки. Это инструмент для запуска вредоносной нагрузки второго этапа, который мы назвали LeekSower.

Командная строка, которая находится в LNK-файле

Командная строка, которая находится в LNK-файле

LeekSower запускает PowerShell и сначала ищет файл архива, из которого был запущен. Поиск файла происходит рекурсивно относительно каталога пользователя ($env:USERPROFILE), то есть по всем вложенным папкам, при помощи утилиты where.exe с параметром /r. Из всех найденных совпадений отбирается только первый результат, из которого удаляются лишние пробелы. Этот путь сохраняется в переменную tagSignal.

Далее скрипт собирает имя командлета Expand-Archive по частям, чтобы скрыть его от сигнатурного анализа, и распаковывает найденный исходный ZIP-архив в каталог globalAssetInstance внутри AppData.

Как мы упоминали ранее, в архиве содержится скрытая папка, System Volume Information. В ней находится файл без расширения inactiveFeedbackCode. Этот файл переименовывается: ему добавляется расширение .zip. Следующим шагом скрипт снова вызывает командлет Expand-Archive, с помощью которого распаковывает переименованный ZIP-файл в другую директорию внутри AppData, а именно в папку графического редактора Krita.

Содержимое вложенного архива с инструментами

Содержимое вложенного архива с инструментами

Ниже представлен список некоторых файлов, которые содержатся в этом архиве:

Имя файла MD5 Назначение
datagrip.exe 82710b81e610f074fe97a4f76e7f0843 Переименованный файл консольного приложения Tor (The Onion Router), которое реализует протокол луковой маршрутизации
atom.exe 8c0434571198367df2cd1344f2bdc0cb Переименованный файл lyrebird.exe — официальный исполняемый файл, входящий в состав Tor Browser; он предназначен для поддержки плагинов и замаскирован под текстовый редактор Atom
messenger.exe 6615ea2fa3b879d27687a7ce917e93b0 Переименованный файл sshd.exe из пакета OpenSSH для Windows. Используется для обработки файловых операций внутри защищенного сеанса
reaper.exe 37e83a8fc0e4e6ea5dab38b0b20f953b Переименованный файл sftp.exe из пакета OpenSSH для Windows
ssh-shellhost.exe 6eafae19d2db29f70fa24a95cf71a19d Переименованный файл ssh.exe из пакета OpenSSH для Windows
Spisok_na_perepodgotovky_mart.pdf cbbd3923adb5705a1ce61cdebb6a93b6 PDF-приманка
noteRef.xml ad14a515332eb058436a7bba84b6affc XML-файл задачи по расписанию для файла messenger.exe
currentSettingMode.xml d688fb9bb64e916ff0bd68160caa6139 XML-файл задачи по расписанию для файла datagrip.exe
action 2a290051c0e6fc27dab6d4212ed37641 PowerShell-скрипт — инструмент LeekGerminator

Распаковав второй архив, LeekSower запускает новый скрытый процесс PowerShell. В этом процессе выполняется команда gc (Get-Content), которая читает содержимое файла action и передает его на исполнение как PowerShell-код. Таким образом происходит запуск следующего этапа вредоносной нагрузки, которая была скрыта в одном из файлов вложенного архива. Этот код является инструментом LeekGerminator.

Установка инструментов: LeekGerminator

На следующем этапе скрипт LeekGerminator производит установку и настройку всех распакованных инструментов.

Содержимое файла action

Содержимое файла action

Сначала скрипт проверяет, что не запущен в песочнице. Для продолжения его работы должны выполняться два условия:

  • в папке APPDATA\Microsoft\Windows\Recent находится более 10 LNK-файлов (это ссылки на недавние документы пользователя),
  • в системе запущено более 50 процессов.

Если условия не выполняются, LeekGerminator завершает работу.

Если проверки пройдены, то инструмент перемещает PDF-приманку в папку USERPROFILE\Downloads\ и открывает.

Фрагмент PDF-приманки

Фрагмент PDF-приманки

Далее скрипт удаляет папку globalAssetInstance и файл action и пытается создать мьютекс Global\getUserRatio. Если он уже существует в системе, скрипт завершает работу.

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

Сначала инструмент создает задачу с помощью файла noteRef.xml. Ниже представлено его содержимое:

Содержимое noteRef.xml

Содержимое noteRef.xml

В блоке триггеров указан LogonTrigger, то есть запуск задачи происходит в момент входа пользователя в систему. Параметр $UID означает, что задача привязана к конкретному пользователю. LeekGerminator заменяет подстроку $UID значением идентификатора пользователя, под которым он был запущен.

Раздел настроек определяет поведение задачи во время выполнения. В XML-файле указано, что, если задача уже запущена, новые экземпляры не создаются (IgnoreNew). Выполнение задачи не ограничено условиями питания: она может работать как при питании хоста от сети, так и от батареи. Задача может запускаться сразу, как только появляется возможность (StartWhenAvailable), и не требует простоя системы (RunOnlyIfIdle=false). Ограничение по времени выполнения отсутствует (значение ExecutionTimeLimit равно PT0S, что означает бесконечное выполнение). Задача также помечена как скрытая (Hidden=true), поэтому она не отображается в стандартном списке задач.

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

Передача параметра --headless для conhost указывает, что запуск будет осуществляться в скрытом режиме, без отображения окон. Кроме того, в аргументах указывается запуск исполняемого файла messenger.exe, расположенного в каталоге внутри AppData. Это означает, что фактическая логика выполнения находится в этом бинарном файле, а conhost используется как промежуточный процесс.

Файл настроек для messenger.exe (sshd.exe)

Файл настроек для messenger.exe (sshd.exe)

Этот конфигурационный файл задает следующие настройки для сервера OpenSSH (sshd.exe):

  • Port 20321 и ListenAddress 127.0.0.1. Сервер открывает порт только для локальных соединений. Скорее всего, используется в паре с обратным SSH-туннелем, чтобы обходить брандмауэры и открывать доступ для злоумышленника извне.
  • HostKey subscriptionLength. Путь к закрытому ключу хоста, замаскированный под файл с безобидным названием.
  • PubkeyAuthentication yes и PasswordAuthentication no. Вход разрешен только по SSH-ключу, парольная аутентификация отключена. Это значит, что подключиться может только владелец конкретного закрытого ключа.
  • AuthorizedKeysFile AppData\Roaming\krita\defaultSignalOutput. Это самая важная часть конфигурационного файла: список разрешенных ключей.
  • Subsystem sftp AppData\Roaming\krita\reaper.exe. При попытке отправки файлов по протоколу SFTP будет запущен файл reaper.exe — на самом деле это клиент OpenSSH.

Затем LeekGerminator создает вторую запланированную задачу, используя файл currentSettingMode.xml.

Содержимое currentSettingMode.xml

Содержимое currentSettingMode.xml

Эта задача содержит те же параметры, что и предыдущая. Она также выполняет команду conhost, но уже с другими аргументами:

Таким образом запускается процесс консольного приложения Tor (datagrip.exe), которому через параметр -f передается имя файла конфигурации.

Файл настроек для Tor

Файл настроек для Tor

Конфигурационный файл настраивает параметры автоматизации и скрытой работы Tor:

  • GeoIPFile geoip и GeoIPv6File geoip6. При помощи этих файлов Tor определяет, к какой стране относится тот или иной IP-адрес, для фильтрации узлов.
  • DataDirectory googlesheets. Все рабочие данные (ключи, состояние сети, кэш) будут сохраняться в папку с названием googlesheets. Вероятно, это сделано для маскировки под файлы Google Таблиц.
  • ClientTransportPlugin obfs4 exec atom.exe. Tor использует плагин obfs4 для обфускации трафика.
  • UseBridges 1. Дает команду Tor не подключаться к публичным узлам напрямую, а использовать только мосты, адреса которых содержатся в файлах папки internalReportMap.
  • %include pictureId и %include internalReportMap/*. Команды импортируют содержимое файла pictureId и папки internalReportMap в текущий конфигурационный файл.

Файл pictureId задает локальную папку currentPlanStep, в которую Tor будет сохранять файлы конфигурации скрытого сервиса, в частности hostname. В этом файле хранится уникальное имя для запускаемого сервиса в сети Tor, которое будет использоваться для подключения к хосту. Кроме этого, в hostname задаются локальные порты, через которые будет перенаправляться сетевой трафик.

Фрагмент файла pictureId для Tor

Фрагмент файла pictureId для Tor

В папке internalReportMap находятся файлы с настройками узлов, которые служат мостами в используемом протоколе obfs4.

Фрагмент файла настроек для Tor из папки internalReportMap

Фрагмент файла настроек для Tor из папки internalReportMap

Таким образом, при каждом входе пользователя в систему будет запускаться процесс conhost с указанными параметрами. Он в свою очередь инициирует выполнение datagrip.exe из пользовательской директории с заданными аргументами, то есть запускает Tor для установления скрытого подключения к целевому устройству.

Далее LeekGerminator использует утилиту curl для выполнения HTTP-запроса.

Команда запускается через cmd.exe /c, что означает выполнение указанной строки в командной оболочке с последующим завершением процесса.

В параметрах указано большое количество повторных попыток: --retry 1000 задает до 1000 попыток, а --retry-delay 3 устанавливает паузу в 3 секунды между ними. Параметр --retry-all-errors расширяет список условий, при которых будут выполняться повторы, включая любые ошибки соединения. Ограничение на длительность одного запроса задано через -m 120, то есть максимум 120 секунд. Флаг -s включает тихий режим, при котором не выводится служебная информация.

Запрос выполняется через SOCKS5-прокси, указанный как localhost:9050, с помощью параметра --socks5-hostname. Такой порт по умолчанию часто используется локальным прокси-сервисом, например Tor, при котором DNS-разрешение также происходит через прокси.

В качестве адреса используется домен в зоне .onion, что означает доступ к ресурсу внутри сети Tor. Путь /lst содержит GET-параметр q, в котором передается строка с данными. Эта строка включает последовательность, состоящую из нескольких частей, разделенных двоеточиями:

  1. имя пользователя из $env:USERNAME,
  2. идентификатор сервиса Tor из файла hostname,
  3. строка, уникальная для каждой версии файла LeekGerminator.

Таким образом, команда формирует HTTP-запрос к скрытому сервису в сети Tor, передавая в параметре q данные для обратного соединения и имя пользователя. При этом обеспечивается высокая устойчивость к ошибкам соединения за счет большого числа повторных попыток и использования прокси.

Эксфильтрация файлов: LeekYield

После установления связи с командным центром на хост по одному из доступных протоколов подключается оператор и переносит инструмент rclone. Затем атакующий создает задачу по расписанию, которая выполняет закодированный PowerShell-скрипт — это инструмент LeekYield:

Ниже приведен декодированный код скрипта LeekYield:

PowerShell-скрипт LeekYield

PowerShell-скрипт LeekYield

Сначала скрипт создает файл chrome.ignore в каталоге %TEMP%\media. Параметр -ErrorAction SilentlyContinue означает, что возможные ошибки (например, если файл уже существует) игнорируются и не выводятся.

Далее формируется список подключенных дисков с типом шины USB. Для этого используется Get-Disk с фильтрацией по BusType -Eq "USB". Для каждого найденного диска запрашиваются его разделы через Get-Partition, после чего из результата выбирается свойство AccessPaths, содержащее пути доступа к разделу. Обычно это массив, в котором первый элемент — это путь к файловой системе раздела, например буква диска, вида E:\, а второй — строка формата \\?\Volume{GUID}.

После этого скрипт проходит по каждому элементу полученного списка. Первый элемент пути (AccessPaths[0]) сохраняется в переменную $src, а из второго элемента с помощью регулярного выражения извлекается GUID тома, который сохраняется в переменную $dst.

Затем для каждого USB-накопителя запускается процесс conhost.exe. В его аргументах передается строка --headless, далее указывается bittorrent.exe — это переименнованная утилита rclone. Ей передается команда copy, путь источника ($src) и путь назначения в каталоге %TEMP%\media\{GUID}. Также передаются дополнительные параметры сортировки по времени изменения и ограничения по длительности --order-by modtime,descending и --max-duration 3m, которые задают правила обработки данных в течение ограниченного времени. Таким образом с целевых дисков собирается содержимое интересующих злоумышленников директорий.

Собранные данные выгружаются с хоста по протоколу S3 в удаленный репозиторий aunion через установленный туннель на 12191 порту. Для этого rclone запускается с помощью следующей командной строки:

Генеративный контент

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

  • ‌‌‌‌‌Proekt_prikaza_681_o_pooshrenii.pdf.lnk
  • ‎Proekt_prikaza_611_o_pooshchrenii.pdf.lnk
  • Proekt_prikaza_568_o_pooshchrenii.pdf.lnk
  • Proekt_prikaza_681_o_pooshchrenii 22_12.pdf.lnk
  • Proekt_prikaza_681_o_pooshchrenii.pdf.lnk

Как мы видим, имена файлов отличаются незначительно: меняется только номер «приказа», а суть приманки остается той же.

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

Примеры содержания вредоносных архивов с различающимися именами файлов

Примеры содержания вредоносных архивов с различающимися именами файлов

Кроме того, в каждой сборке скрипты получают уникальные изменения. Они не подвергаются обфускации, имена переменных выглядят вполне читаемо, хотя и не отражают смысл содержащихся в них значений. В каждом проанализированном нами скрипте использовались уникальные осмысленные имена переменных. Отметим, что это не дает высокой энтропии, как если бы их имена генерировались бы случайным набором символов. Более того, в некоторых скриптах определенные операции выполнены различными способами, а иногда добавляются операции, которые никак не влияют на результат. Ниже представлен сравнительный пример: каждая строка представляет собой код LeekGerminator из разных архивов. Можно увидеть, что имена переменных отличаются, хотя структура кода остается неизменной.

Пример кода LeekGerminator из разных архивов

Пример кода LeekGerminator из разных архивов

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

Детектирование решениями «Лаборатории Касперского»

Продукты «Лаборатории Касперского» детектируют описанное в статье вредоносное ПО со следующими вердиктами:

  • HEUR:Trojan-PSW.WinLNK.Stealer.gen
  • HEUR:Trojan.WinLNK.Alien.gen
  • Trojan-Notifier.PowerShell.Agent.f
  • PowerShell.LeekGerminator

Локальную активность можно детектировать с помощью Kaspersky Endpoint Detection and Response Expert.

LeekSower детектируется следующими правилами:

Пример детектирования запуска LeekSower в KEDR

Пример детектирования запуска LeekSower в KEDR

LeekGerminator детектируется следующими правилами:

Пример детектирования запуска LeekGerminator в KEDR

Пример детектирования запуска LeekGerminator в KEDR

Запуск и работа переименованного файла браузера Tor детектируется следующим правилом:

Пример детектирования запуска переименованного браузера Tor в KEDR

Пример детектирования запуска переименованного браузера Tor в KEDR

На графе выполнения Kaspersky Cloud Sandbox на портале Threat Intelligence можно увидеть цепочку выполнения вредоносного файла .lnk с последующим выполнением PowerShell-скрипта и открытием портов.

Граф выполнения Kaspersky Cloud Sandbox

Граф выполнения Kaspersky Cloud Sandbox

Другим способом выявления вредоносной активности является мониторинг сетевого трафика. Решение Kaspersky Anti Targeted Attack (KATA) с модулем NDR обнаруживает сетевое взаимодействие вредоносных образцов, используемых в рамках описанной кампании.

Пример детектирования сетевой активности инструментов Leek Likho

Пример детектирования сетевой активности инструментов Leek Likho

Заключение

Группировка Leek Likho представляет собой относительно новый кластер угроз, ориентированных преимущественно на государственные учреждения. Для получения первоначального доступа злоумышленники используют фишинговые рассылки и вредоносные вложения. После их запуска в системе жертвы разворачивается набор скриптов и вспомогательных компонентов, предназначенных для настройки легитимных инструментов удаленного администрирования и организации скрытого канала связи с инфраструктурой операторов через сеть Tor. Для маскировки сетевого взаимодействия применяется транспорт obfs4, позволяющий затруднить выявление Tor-трафика средствами сетевого мониторинга.

Интересно, что Leek Likho используют ИИ-механизмы для автоматической генерации уникальных вариантов скриптов и имен файлов под каждую цель. В результате изменяются имена переменных, служебные строки, идентификаторы задач и некоторые другие артефакты. Таким подходом группировка пытается снизить эффективность детектирования и усложнить поиск своих инструментов в системе, однако при помощи класса решений Detection and Response можно обнаруживать активность подобных вредоносных компонентов. Продукты «Лаборатории Касперского» детектируют описанную угрозу, в частности Kaspersky Endpoint Detection and Response Expert и Kaspersky Anti Targeted Attack Platform с модулем NDR.

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

Архивы с LeekSower
4b94efa49fb59a43ac4a9fdf04c87ef6
d57868d796f5ffac7a038f1392509625
e355f9f69019a1248f4959fea69fab5f
7578d6578f17f3d2f532414cd7808396
1ec5607bd9c37d6aabc43066fcb87ca6
b1549dc141bad1ef7419b819f2419514
dea287ef5916eced7808ca3704ae67a6
2156c270ffe8e4b23b67efed191b9737
63426f624c930a756faf7ce3e7b4789f
99732e49668e56527963742922277459
53ac08488544ad1fefd6363db44549cf
ab24e08da9e205ee3d3a5a2a05345cb9
0b6f7356919b9632c1158681ee0462f3
f4d05a5cb783f1cdd179795125d23139
44652be9dc36c33ef0a35d4422523f7c
57dbf8c275fa56b9a84e9c4b9a35399e

Файлы ярлыков LeekSower

Имя MD5
Proekt_prikaza_681_o_pooshrenii.‌‌‌‌‌pdf‌.lnk 6f49d5e80acdbef693263ef60399bb8b
‎Proekt_prikaza_611_o_pooshchrenii.‍​pdf‍‍‍‍.lnk 220ad634230523a239ab67253af00366
Proekt_prikaza_568_o_pooshchrenii.pdf‌.lnk 1a66a083fe2ac0adae45475825f3bb26
6422_Predstavlenie_na_naznachenie.pdf.lnk 14167b8732f917d9b15df47de9a94125
‎Spisok_na_perepodgotovky_mart.‌​‍‍‌pdf‍‍‌‌.lnk b95b03094ac3b361585ecfa88e0c78ca
6526_Predstavlenie_na_naznachenie.pdf.lnk 3e610b98255e35f492835b8c81d829a9
6526_Predstavlenie_na_naznachenie.pdf.lnk a9cfe3f8ad5def658e774eb2f6f0792c
Iskhod_7582_Predstavlenie_na_naznachenie.pdf.lnk a6d095dc0e01f97db7e74cb5bed402dc
spisok_ip_adresov_narusheniya.pdf.lnk d7e7f396a695cb23d0fda4dc716e47a6
Scan_125992145_TLG_na_perepodgotovku_dsp.pdf.lnk 6616717dfb2a795113b47d862c5412e2
Proekt_prikaza_681_o_pooshchrenii 22_12.pdf.lnk 227b3fa386cad73f0f388d801060e2c8
Iskh_6626_Predstavlenie_na_naznachenie_[redacted].pdf.lnk 6a72ad3c06a29e12e668e8701daee00e
Scan_Media_1757_dsp_Prikaz_na_perepodgotovku.pdf.lnk 4d5074d6e0722ceec45a083fa8444164
Spisok [redacted].pdf.lnk ac60971512c77f845cc4ec47400368a6
Proekt_prikaza_681_o_pooshchrenii.pdf.lnk 3e3c5471c69e933fcffa4f497ca936b8
Proekt_prikaza_[redacted].pdf.lnk 873480ab887de3a9cbbcccb982747637

Файлы и мьютексы LeekGerminator

Имя файла MD5 Мьютекс
action 2a290051c0e6fc27dab6d4212ed37641 Global\getUserRatio
activeOptionStatus 099e92221466c0d380f8fac942b65641 Global\htmlRate
avgAccountDate f2b470dc3fcd8a2fd7860851a81f3eb0 Global\contractLimit
avgOptionRatio 5d72a10241aa04f7d19da448cba2cab9 Global\planWeight
configSummary 99dc0dbaf5bd3918803391ec8d6d802c Global\secondaryOptionThreshold
currentResultMethod 27dde6318bb7b2ca4f1f5df97007fbb8 Global\activeNoteWeight
currentSessionTrigger ef0b5a716fcaaa26553a16c0c725a1bf Global\ratingMethod
internalCustomerDetail c26198c104844e44d77d3da5389c040d Global\currentColumnObject
internalCustomerNumber 53bb7a229647cd4de8e23c075d4ffc2a Global\temporaryLinkError
localRowSize 85a2bd811866efadf369d6c0c54fc5b4 Global\avgMessageType
parameterCapacity ebc8b65e3e35f66147fa4cbb9051a192 Global\permanentPaymentMethod
pdfGroup ffefe836255e742abc3dc692d1dda3a4 Global\visibleHtmlCount
permanentReportTitle 8dbeb747aab3d3814bcee52c3b0f6ee5 Global\postSet
permanentTypeDate 284a56c416681090b3965250db2052d7 Global\lastColumnLimit
primaryStatusIndex b8095944013853d982c4c045372a97c1 Global\selectedReportError
totalQuerySignal f1bc5841f6d6be1820848a7718bf4cce Global\rowDepth

Весенний урожай — кампания группы Leek Likho по охоте на документы

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Отчеты