Исследователи Securonix обнаружили бэкдор TASK#STOMP для Windows, который собирает рабочие документы, следит за появлением новых файлов, крадет сохраненные пароли Wi-Fi и содержимое буфера обмена, делает снимки экрана и выполняет команды оператора через PowerShell.
Отдельный исполняемый вредонос для большинства этих действий ему не нужен. Цепочка построена вокруг Windows Script Host, планировщика заданий, PowerShell, schtasks.exe, netsh.exe и штатного компилятора C# из .NET Framework. Компоненты складываются в пользовательский каталог с названием WinDefendSvc, похожим на службу Windows Defender, а несколько файлов получают одинаковую дату изменения — 15 января 2024 года.
Масштаб кампании неизвестен. Исследование основано на одной скомпрометированной системе. Нет надежных данных о количестве жертв, странах или отраслях, а саму операцию пока не связали с известной группировкой.
В исследованной системе первым заметным звеном стал wscript.exe, запустивший файл 95c9050t66.vbs с рабочего стола пользователя.
Как именно скрипт оказался на компьютере, установить не удалось. Наличие файла на рабочем столе само по себе не доказывает фишинг: возможны загрузка через браузер, распаковка архива, копирование с внешнего носителя, предыдущий удаленный доступ и другие варианты. The Hacker News также отмечает, что фишинг и социальная инженерия остаются лишь возможными сценариями доставки, а не установленным фактом.
VBScript выступает установщиком и управляющим компонентом. Он создает каталог:
%LOCALAPPDATA%\WinDefendSvc
В него помещаются sys_loader.ps1, win_conn.ps1, закодированные модули diag_pack.dat и win_conn_cfg.dat, XML-файлы заданий планировщика и другие компоненты.

Для закрепления вредонос регистрирует четыре задания планировщика из XML-файлов в WinDefendSvc.
Первоначально они получают имена Local Credential Manager, Network Audio Service, Windows Display Manager и Device Credential Handler.
При последующем запуске из папки автозагрузки те же XML-файлы регистрируются под другими названиями: Network Session Agent, System Audio Controller, Host Session Broker и System Registry Handler.
Названия выглядят правдоподобно, но не являются стандартными именами соответствующих заданий Windows. Сами команды, триггеры и параметры находятся внутри XML, поэтому смена отображаемого имени не меняет логику задания.
Одновременно msdiag.vbs копируется в папку автозагрузки текущего пользователя:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msdiag.vbs
После нового входа в систему этот скрипт снова регистрирует задания, завершает старые экземпляры загрузчиков, восстанавливает временные метки и запускает два PowerShell-модуля. Удаление одного исходного VBS с рабочего стола поэтому заражение не устраняет.
TASK#STOMP использует timestomping — подмену временных меток файлов.
Одинаковое значение LastWriteTime выставляется для пяти компонентов:
msdiag.vbs, diag_pack.dat, win_conn_cfg.dat, sys_loader.ps1 и win_conn.ps1.
Дата одна и та же: 15 января 2024 года, 08:30:00. Реальную активность при этом наблюдали в 2026 году. Дата 2024 года не показывает начало кампании и специально используется как антифорензический прием.
Подмена касается LastWriteTime и не уничтожает всю информацию о файле. Реальный момент появления компонентов все еще можно искать по MFT, USN Journal, событиям EDR и другим временным меткам NTFS.
После установки запускаются две скрытые ветки:
sys_loader.ps1
и
win_conn.ps1.
Обе используют -NoProfile, -ExecutionPolicy Bypass и -WindowStyle Hidden.
ExecutionPolicy Bypass здесь не означает повышение привилегий или обход модели безопасности Windows. Execution Policy в PowerShell не является полноценной границей безопасности: этот параметр лишь позволяет запускать сценарий без ограничений и предупреждений соответствующей политики.
sys_loader.ps1 загружает основной модуль diag_pack.dat, который отвечает за сбор документов, наблюдение за системой и удаленное управление.
win_conn.ps1 расшифровывает win_conn_cfg.dat и поднимает второй канал связи с оператором. Он не выполняет первоначальный массовый поиск документов, но умеет делать снимки экрана, получать Wi-Fi-ключи и буфер обмена, собирать системные данные и выполнять произвольные команды.
TASK#STOMP нельзя корректно назвать полностью безфайловым вредоносом.
Оба основных модуля физически существуют на диске в виде .dat. Их содержимое закодировано Base64.
PowerShell читает файл, декодирует данные, преобразует их в текст сценария, создает ScriptBlock и выполняет полученный код в памяти. Расшифрованный PowerShell при этом не требуется сохранять отдельным .ps1.
Securonix называет такую архитектуру script-native: основная логика построена на сценариях, но необходимые компоненты все равно остаются на диске.
Еще один заметный элемент цепочки — процессы csc.exe и cvtres.exe, запущенные из PowerShell.
Это не отдельный C#-вредонос.
Оба модуля вызывают PowerShell Add-Type и во время работы компилируют небольшие классы SSLFix и SSLFix2. Они меняют настройки .NET: включают TLS 1.2 и отключают проверку сертификата управляющего сервера.
За счет этого бэкдор может устанавливать соединение, даже если сертификат сервера самоподписанный, просрочен, выпущен для другого имени или по другой причине не проходит обычную проверку.
Сама вредоносная логика продолжает выполняться внутри powershell.exe; csc.exe лишь собирает небольшой вспомогательный класс.
Основной модуль перебирает все фиксированные диски и ищет: .doc, .docx, .pdf, .ppt, .pptx, .xls, .xlsx, .zip, .rar и .7z.
Отбираются файлы, созданные или измененные за последние 365 дней. Объекты размером более 500 МБ пропускаются, системные и некоторые служебные каталоги исключаются.
Повторную отправку вредонос отслеживает по пути, MD5-хешу и размеру файла.
Приоритет выглядит так: Word, PDF, PowerPoint, Excel, затем архивы. Такой набор больше похож на целенаправленный сбор корпоративной документации, чем на классический массовый стилер, ориентированный прежде всего на браузерные пароли или криптокошельки.
Файлы до 10 МБ загружаются напрямую. Для диапазона от 10 до 200 МБ предусмотрено GZip-сжатие. Неудачная отправка повторяется до трех раз, после чего файл остается в очереди для последующей попытки.
Первоначальным обходом дисков сбор не заканчивается. Модуль создает FileSystemWatcher для каждого фиксированного диска и отслеживает события создания и изменения файлов.
Если после заражения пользователь создает новый .docx, редактирует таблицу или сохраняет PDF подходящего типа, документ автоматически попадает в обработку.
Дополнительно запускается периодическое повторное сканирование, которое должно подобрать файлы, пропущенные механизмом наблюдения.
Таким образом TASK#STOMP превращает зараженный компьютер в постоянно работающую точку сбора документов.
Через канал управления доступны несколько встроенных команд. Команда wifi вызывает netsh wlan show profiles, а затем запрашивает каждый профиль с параметром key=clear. Из результата извлекается Key Content — сохраненный Wi-Fi-ключ в открытом виде. Команда clipboard читает текст через класс Windows Forms, передает его оператору и затем очищает буфер обмена.
screenshot делает снимок основного монитора средствами .NET, временно сохраняет PNG в %TEMP%, отправляет его на сервер и удаляет локальный файл.
sysinfo возвращает сведения об ОС, процессоре, памяти, дисках и времени работы.
Есть и универсальный режим: если полученная команда не совпадает с известными встроенными командами, строка передается в PowerShell через Invoke-Expression.
Это дает оператору возможность выполнить практически произвольную PowerShell-команду на зараженной машине.
В образце обнаружены два домена управляющей инфраструктуры:
corecloudfileshare[.]xyz
и
attachmentsharingdrive[.]xyz.
При недоступности одного TASK#STOMP переключается на второй. Запросы используют статический токен аутентификации и User-Agent, изображающий Chrome 120.
Команды запрашиваются через /api/c2/poll/, результаты отправляются на /api/c2/result/, а документы — на /upload.
Интервал между опросами случайный — от трех до восьми секунд. После каждого цикла дополнительно выполняется запрос /status. Это создает достаточно частый и характерный сетевой рисунок, который можно искать даже при изменении локальных имен файлов.
Начальный VBS также запускает Google Chrome в развернутом окне и передает ему конкретный URL на сайте IranTenders. Для чего это делается, достоверно неизвестно.
Страница может использоваться как отвлекающий элемент, маркер успешного запуска, часть кампании или ресурс на ранее скомпрометированном сайте. Процессная телеметрия показывает только факт передачи адреса браузеру и не содержит ответа сервера.
Исследователи отдельно предупреждают, что этого недостаточно, чтобы считать весь домен IranTenders вредоносным или контролируемым атакующими. Help Net Security отмечает, что тематика сайта может указывать на интерес к тендерам, контрактам или связанным с Ираном закупкам, но одной такой детали недостаточно для вывода о регионе или отрасли жертв.
После запуска PowerShell-модулей VBScript выполняет purge.bat.
В известной телеметрии виден вызов:
timeout.exe /T 2 /NOBREAK
То есть batch-файл делает двухсекундную паузу.
Два основных модуля должны следить друг за другом и перезапускать напарника при остановке. При анализе кода выяснилось, что одна часть этой схемы фактически не работает. Счетчик перезапуска обнуляется в первом условном блоке, из-за чего следующий блок с той же проверкой обычно становится недостижимым.
Основная логика восстановления при этом работает, а само закрепление остается достаточно устойчивым: у вредоноса по-прежнему есть четыре задания планировщика и VBS в папке автозагрузки.
TASK#STOMP старается раствориться среди обычных средств Windows, но вся цепочка выглядит довольно необычно, если рассматривать события вместе.
В журналах безопасности создание нового задания планировщика может фиксироваться событием 4698. Microsoft описывает его как событие создания Scheduled Task.
Если включен PowerShell Script Block Logging, содержимое выполняемых блоков попадает в событие 4104. Это особенно полезно в случае TASK#STOMP: на диске сценарий спрятан в Base64, но перед выполнением PowerShell все равно должен получить его декодированный текст.
Полезная последовательность для обнаружения выглядит так: wscript.exe создает несколько заданий через schtasks.exe, XML лежит в AppData, затем запускается скрытый PowerShell, читаются .dat, появляются FromBase64String и ScriptBlock, PowerShell запускает csc.exe, меняются временные метки и начинаются частые соединения с управляющим сервером.
Каждое такое действие по отдельности может встречаться в нормальной системе. Их сочетание значительно точнее указывает на заражение.
Исследователи пока не делают атрибуцию. Код, инфраструктура и тактика не дают достаточно надежного совпадения с известным инструментарием конкретной APT-группы. Поэтому TASK#STOMP — название обнаруженной цепочки и вредоносного инструмента, а не установленной хакерской группировки.
Нельзя пока определить и продолжительность кампании. Поддельная дата файлов в январе 2024 года для этого не подходит: она выставлена самим вредоносом.
Неизвестно и количество зараженных систем. Опубликованное расследование основано на одном компьютере.
Вопросы и ответы
Что такое TASK#STOMP?
Это PowerShell-бэкдор для Windows, который закрепляется через планировщик заданий и папку автозагрузки, крадет документы, Wi-Fi-ключи и содержимое буфера обмена, делает снимки экрана и принимает удаленные команды.
Как он попадает на компьютер?
Пока неизвестно. В исследованном случае первым наблюдаемым компонентом был VBScript на рабочем столе. Фишинг рассматривается как возможный вариант, но подтверждений конкретного способа доставки нет.
Какие документы он ищет?
Word, PDF, PowerPoint, Excel, ZIP, RAR и 7z. В основном интерес представляют файлы, созданные или измененные за предыдущие 365 дней.
Он продолжает красть файлы после первого сканирования?
Да. FileSystemWatcher следит за новыми и измененными документами на фиксированных дисках, а периодические повторные проверки подбирают пропущенные файлы.
Может ли он украсть пароль Wi-Fi?
Да. TASK#STOMP вызывает netsh и извлекает ключи из сохраненных Wi-Fi-профилей.
Может ли оператор выполнить произвольную команду?
Да. Неизвестные бэкдору команды передаются в Invoke-Expression и выполняются как PowerShell.
TASK#STOMP полностью безфайловый?
Нет. .vbs, .ps1 и закодированные .dat находятся на диске. Уже декодированный PowerShell выполняется в памяти.
Зачем запускаются csc.exe и cvtres.exe?
Через PowerShell Add-Type компилируется небольшой C#-класс, отключающий проверку TLS-сертификата управляющего сервера. Основной бэкдор остается внутри PowerShell.
Кто стоит за кампанией?
Пока неизвестно. Надежной атрибуции к известной группировке нет.
Сколько машин заражено?
Неизвестно. Исследование описывает одну скомпрометированную систему, поэтому оценить реальный масштаб по опубликованным данным нельзя.
Есть новость? Станьте автором.
Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.