Кампания по атаке на гостиничный бизнес использует фишинг через Calendly и многоэтапный Node.js-имплант

phishing

С апреля 2026 года специалисты Microsoft Threat Intelligence фиксируют активную многоэтапную кампанию, направленную на организации гостиничной индустрии в Европе и Азии. Целью атакующих стали сотрудники, работающие с бронированиями, регистрацией гостей и обслуживанием номеров. Microsoft пока не связывает эту активность с какой-либо известной APT-группировкой.

Описание

Инциденты развиваются по многоступенчатой схеме, в которой злоумышленники сочетают фишинг через легитимные облачные сервисы, PowerShell-загрузчики с обфускацией и внедрение Node.js-импланта (среды выполнения JavaScript на стороне сервера). В ходе кампании используются ZIP-архивы с названиями, содержащими слово photo и случайные цифры. Архивы загружаются через браузер после перехода по фишинговой ссылке. Внутри архива находится файл-ярлык, маскирующийся под изображение (например, IMG-805916584.png.lnk). При запуске такого ярлыка начинается цепочка заражения.

Фишинговые письма доставляются с использованием инфраструктуры Calendly - сервиса для планирования встреч. Атакующие используют подстановку отправителя "Booking Manager (via Calendly)", что должно вызывать доверие у персонала отелей. Тематика писем включает жалобы гостей, сообщения о клопах, запросы на проверку номера и "последние предупреждения" от контролирующих органов. Письма составлены на японском, датском и голландском языках. Техника, названная Microsoft "аутентификационным отмыванием", позволяет обойти проверки SPF, DKIM и DMARC: письмо проходит все проверки, так как отправлено через доверенную инфраструктуру Calendly, хотя содержимое контролируется злоумышленниками.

В письме содержится ссылка на Calendly, которая перенаправляет жертву через несколько промежуточных узлов. Сначала срабатывает сервис безопасности ссылок Calendly, затем используется открытый редирект Google (share[.]google), и в итоге пользователь попадает на фишинговую страницу, размещённую на домене в зоне .cfd (например, photo-26254[.]cfd). Домен защищён Cloudflare Turnstile - капчей, которая одновременно отсеивает автоматизированный анализ и ограничивает доступ по геолокации. После прохождения капчи браузер загружает тот самый ZIP-архив с вредоносным LNK-файлом.

На этапе выполнения ярлык запускает PowerShell с обфусцированным кодом. Как показывает анализ Microsoft, обфускация развивалась от простого XOR-декодирования до арифметических операций с вычитанием и маскировкой через модуль и деление. Всего исследователи зафиксировали семь фаз эволюции PowerShell-кода, но логика остаётся неизменной: декодировать данные, извлечь URL, скачать по Invoke-WebRequest следующий скрипт и выполнить его из папки %TEMP%. Это говорит о том, что атакующие постоянно адаптируются к сигнатурам, но не меняют основную технику.

В волне 2 (с конца мая 2026) между PowerShell и развёртыванием Node.js появился дополнительный этап: PowerShell запускает компиляцию .NET-сборок через csc.exe и cvtres.exe. В результате создаётся DLL-файл размером около 3 Кбайт. По данным телеметрии, этот DLL не загружается через rundll32 или regsvr32 - возможно, этап является подготовительным или условным.

Ключевой компонент кампании - Node.js-имплант. На скомпрометированное устройство загружается node.exe версии v24.13.0-win-x64 из легитимного источника nodejs[.]org. Исполняемый файл помещается в каталог C:\Users\<пользователь>\AppData\Local\Nodejs\. Имплант запускается с аргументом - именем JavaScript-файла и C2-доменом. Например: "node.exe" C:\Users\...\E2HPVoYGA77RECeb.js safedocphoto[.]info. С помощью Node.js злоумышленники устанавливают персистентность через PowerShell-команду, создающую скрытый дочерний процесс с флагами detached и windowsHide. Это позволяет импланту оставаться активным вне зависимости от действий пользователя.

Дополнительно атакующие добавляют исключения в Microsoft Defender через Add-MpPreference -ExclusionProcess для временных исполняемых файлов в AppData\Local\Temp. Затем запускаются случайно именованные EXE-файлы из Temp, за которыми следуют установщики с именами is-*.tmp, работающие в тихом режиме (/VERYSILENT). Наблюдалось копирование полезной нагрузки в C:\ProgramData\<случайная папка>\<payload>.exe. Для сохранения доступа используются два реестровых ключа: HKCU\RunOnce указывает на исполняемый файл в ProgramData, а HKCU\Run - на Node.js-компонент. Причём RunOnce обновляется после каждого выполнения, создавая цикл, усложняющий очистку.

Системы управления и контроля (C2) работают через нестандартные порты: 8443, 8445, 8453, 5555, 56001, 56002, 56003. Зафиксированы IP-адреса: 178.16.54[.]27, 95.217.97[.]121 и другие. Между волнами инфраструктура расширилась за счёт доменов в зонах .cfd, .click, .bond. При этом сохранилась часть общих индикаторов: один и тот же хэш PE-нагрузки, одинаковый Node.js-бинарник, общий домен sec-safe-dc.info и совпадающие C2-порты.

После компрометации наблюдалась активность C2-биконов, автоматизированный запуск браузера с флагами --headless --no-sandbox (безголовый режим без песочницы), а также обращение к ip-api.com для определения геолокации устройства. На нескольких хостах выполнялась принудительная перезагрузка командой shutdown -s -t 0. Microsoft предполагает, что это может быть способом скрыть следы после завершения автоматизированных задач.

Особую опасность представляет устойчивость заражения. В одном из подтверждённых случаев Defender заблокировал основную PE-нагрузку с детектом Wacatac, но Node.js-имплант, закреплённый через HKCU\Run, остался активным. Через два дня имплант возобновил C2-связь и доставил новые EXE-файлы. Это подтверждает, что для полного устранения угрозы необходимо удалить оба реестровых ключа и очистить каталог Nodejs из AppData\Local.

Организациям гостиничной сферы рекомендуется обращать особое внимание на ZIP-архивы с photo-префиксом и LNK-файлы с расширением .png.lnk. Следует мониторить необычные запуски PowerShell с BigInt-арифметикой, появление csc.exe из временных папок, выполнение node.exe из пользовательских каталогов, добавление исключений Defender для Temp и двойные записи в Run/RunOnce. Сетевые соединения на перечисленные нестандартные порты, особенно от node.exe, требуют немедленной проверки. Домены в зоне .cfd, соответствующие шаблону photo-<цифры>.cfd, стоит блокировать на уровне DNS. Полная очистка подразумевает удаление как RunOnce, так и Run-ключа Node.js, иначе имплант восстановится.

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

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