Введение
Группировка Leek Likho (также известная как SkyCloak или Vortex Werewolf) впервые была описана исследователями в 2025 году, когда стало известно о серии целевых атак на организации государственного сектора России и Беларуси. Эта кампания получила название Операция SkyCloak. Мы наблюдали продолжение ее активности на протяжении февраля–апреля 2026 года, а также обнаружили новую технику, которую злоумышленники используют для эксфильтрации файлов.
Основная схема заражения осталась прежней: злоумышленники распространяют вредоносные архивы с файлами-приманками, внутри которых находятся LNK-файл с двойным расширением и еще один архив, содержащий набор инструментов. Запуск LNK-файла инициирует цепочку выполнения PowerShell-скриптов, выступающих в роли загрузчиков и устанавливающих задачи по расписанию. Таким образом в системе будут запускаться инструменты удаленного доступа через Tor и ssh, через которые происходит соединение с управляющим сервером. После этого в зараженную систему загружается инструмент для эксфильтрации rclone, который собирает файлы с хоста жертвы и выгружает их по установленному соединению с командным центром.
Схема компрометации жертв
Первоначальный доступ: LeekSower
Первоначальный доступ в рамках атак реализуется через социальную инженерию с использованием мессенджера Telegram. Злоумышленники маскируют доставку вредоносного содержимого под легитимные файлообменные механизмы, например ссылки, имитирующие Telegram-файлы или страницы загрузки. В некоторых случаях атакующие используют сервис Dropbox. Переход по таким ссылкам приводит к скачиванию специально подготовленного архива с файлами.
Если пользователь открывает архив с помощью встроенного приложения Windows для работы с архивами, то видит внутри файл, не отличимый от обычного PDF-документа.
Если открыть загруженный архив при помощи другого архиватора, например 7-Zip, то становится видно, что на самом деле этот файл — вредоносный ярлык с двойным расширением .pdf.lnk. Он устанавливает иконку PDF-документа из файла C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe.
Помимо LNK-файла, внутри архива содержится скрытая папка.
После того как пользователь запускает ярлык, начинается выполнение содержащейся в нем командной строки. Это инструмент для запуска вредоносной нагрузки второго этапа, который мы назвали LeekSower.
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 производит установку и настройку всех распакованных инструментов.
Сначала скрипт проверяет, что не запущен в песочнице. Для продолжения его работы должны выполняться два условия:
- в папке APPDATA\Microsoft\Windows\Recent находится более 10 LNK-файлов (это ссылки на недавние документы пользователя),
- в системе запущено более 50 процессов.
Если условия не выполняются, LeekGerminator завершает работу.
Если проверки пройдены, то инструмент перемещает PDF-приманку в папку USERPROFILE\Downloads\ и открывает.
Далее скрипт удаляет папку globalAssetInstance и файл action и пытается создать мьютекс Global\getUserRatio. Если он уже существует в системе, скрипт завершает работу.
На следующем этапе создаются две запланированные задачи из XML-файлов, которые были распакованы из архива.
Сначала инструмент создает задачу с помощью файла noteRef.xml. Ниже представлено его содержимое:
В блоке триггеров указан LogonTrigger, то есть запуск задачи происходит в момент входа пользователя в систему. Параметр $UID означает, что задача привязана к конкретному пользователю. LeekGerminator заменяет подстроку $UID значением идентификатора пользователя, под которым он был запущен.
Раздел настроек определяет поведение задачи во время выполнения. В XML-файле указано, что, если задача уже запущена, новые экземпляры не создаются (IgnoreNew). Выполнение задачи не ограничено условиями питания: она может работать как при питании хоста от сети, так и от батареи. Задача может запускаться сразу, как только появляется возможность (StartWhenAvailable), и не требует простоя системы (RunOnlyIfIdle=false). Ограничение по времени выполнения отсутствует (значение ExecutionTimeLimit равно PT0S, что означает бесконечное выполнение). Задача также помечена как скрытая (Hidden=true), поэтому она не отображается в стандартном списке задач.
В блоке действий указано, что будет выполняться команда conhost, которая обычно используется системой для обслуживания консольных приложений и нечасто вызывается напрямую пользователем или задачами планировщика с пользовательскими аргументами. В качестве аргументов conhost передается следующая строка:
|
1 |
--headless %AppData%/krita/messenger.exe -f alertOutput |
Передача параметра --headless для conhost указывает, что запуск будет осуществляться в скрытом режиме, без отображения окон. Кроме того, в аргументах указывается запуск исполняемого файла messenger.exe, расположенного в каталоге внутри AppData. Это означает, что фактическая логика выполнения находится в этом бинарном файле, а conhost используется как промежуточный процесс.
Этот конфигурационный файл задает следующие настройки для сервера 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.
Эта задача содержит те же параметры, что и предыдущая. Она также выполняет команду conhost, но уже с другими аргументами:
|
1 |
--headless %AppData%/krita/datagrip.exe -f temporaryLogDepth |
Таким образом запускается процесс консольного приложения Tor (datagrip.exe), которому через параметр -f передается имя файла конфигурации.
Конфигурационный файл настраивает параметры автоматизации и скрытой работы 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 задаются локальные порты, через которые будет перенаправляться сетевой трафик.
В папке internalReportMap находятся файлы с настройками узлов, которые служат мостами в используемом протоколе obfs4.
Таким образом, при каждом входе пользователя в систему будет запускаться процесс 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, в котором передается строка с данными. Эта строка включает последовательность, состоящую из нескольких частей, разделенных двоеточиями:
- имя пользователя из
$env:USERNAME, - идентификатор сервиса Tor из файла hostname,
- строка, уникальная для каждой версии файла LeekGerminator.
Таким образом, команда формирует HTTP-запрос к скрытому сервису в сети Tor, передавая в параметре q данные для обратного соединения и имя пользователя. При этом обеспечивается высокая устойчивость к ошибкам соединения за счет большого числа повторных попыток и использования прокси.
Эксфильтрация файлов: LeekYield
После установления связи с командным центром на хост по одному из доступных протоколов подключается оператор и переносит инструмент rclone. Затем атакующий создает задачу по расписанию, которая выполняет закодированный PowerShell-скрипт — это инструмент LeekYield:
|
1 |
conhost --headless powershell.exe -EncodedCommand <base64> |
Ниже приведен декодированный код скрипта 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, которые задают правила обработки данных в течение ограниченного времени. Таким образом с целевых дисков собирается содержимое интересующих злоумышленников директорий.
|
1 |
conhost --headless bittorrent.exe copy K:\ C:\Users\<username>\AppData\Local\Temp\\media\\<GUID>--order-by modtime,descending --max-duration 3m |
Собранные данные выгружаются с хоста по протоколу S3 в удаленный репозиторий aunion через установленный туннель на 12191 порту. Для этого rclone запускается с помощью следующей командной строки:
|
1 |
conhost --headless bittorrent serve s3 aunion: --addr 127.0.0.1:12191 |
Генеративный контент
Как показывает анализ, для каждой жертвы злоумышленники создают новый вредоносный файл первого этапа заражения, используя уникальные имена. Мы наблюдаем различные шаблоны именования файлов-приманок и далее разберем методы атакующих на примере одного из них:
- 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 из разных архивов. Можно увидеть, что имена переменных отличаются, хотя структура кода остается неизменной.
Все эти признаки могут указывать на использование 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 детектируется следующими правилами:
LeekGerminator детектируется следующими правилами:
- creation_scheduled_task_via_powershell
- downloading_via_powershell_cmdlets
- file_and_directory_discovery_via_powershell
Запуск и работа переименованного файла браузера Tor детектируется следующим правилом:
На графе выполнения Kaspersky Cloud Sandbox на портале Threat Intelligence можно увидеть цепочку выполнения вредоносного файла .lnk с последующим выполнением PowerShell-скрипта и открытием портов.
Другим способом выявления вредоносной активности является мониторинг сетевого трафика. Решение Kaspersky Anti Targeted Attack (KATA) с модулем NDR обнаруживает сетевое взаимодействие вредоносных образцов, используемых в рамках описанной кампании.
Заключение
Группировка 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 по охоте на документы