Как фотографии с клопами взламывают отели через Node.js и блокчейн TON?

Апрель 2026 года. Microsoft фиксирует массовую фишинговую кампанию против гостиничного сектора в Европе и Азии. Письма приходят от отправителя с именем «Booking Manager (via Calendly)» — и это, пожалуй, самый тревожный элемент атаки.
Сценарий до безобразия прост. Сотрудник ресепшен или отдела бронирования получает письмо от «менеджера по бронированиям» через сервис Calendly. Тема может быть любой: жалоба гостя, упоминание клопов в номере, проверка санитарных условий, просьба подтвердить бронь или отзыв о проживании. Тон — давящий: финальные предупреждения, угрозы визитов инспекций, репутационный ущерб. Язык писем — японский, датский или голландский; это не таргетированная атака, а массовый обстрел списков адресов, поэтому в полях темы нет ни имени конкретного сотрудника, ни названия отеля. Цель атаки пока не установлена, но механизм доставки полезной нагрузки заслуживает отдельного разговора.
Изощрённость начинается с маршрутизации. Злоумышленники рассылают письма через инфраструктуру нотификаций Calendly — легитимного сервиса планирования встреч. Для SPF, DKIM и DMARC такие письма выглядят полностью «чистыми»: авторизация отправителя подтверждается, но проверка не говорит ни слова о намерениях отправителя. Microsoft называет этот приём «authentication laundering» — «отмыванием через аутентификацию». Идея в том, что технически корректное прохождение почтовых проверок создаёт у получателя иллюзию безопасности.
Второй путь доставки — цепочка редиректов. Жертва кликает по ссылке Calendly, попадает на share.google (Google URL Redirect Service), оттуда перенаправляется на свежезарегистрированный домен в зоне .cfd, прикрытый Cloudflare. На финальной странице пользователя встречает Cloudflare Turnstile — капча, которая одновременно мешает анализу и отсеивает исследователей. Дальше начинается загрузка.
Письма содержат архив формата photo-<числа>.zip. Внутри — ярлыки Windows с расширением .lnk, замаскированные под изображения. В первой волне это IMG-<числа>.png.lnk, во второй — PHOTO-<числа>.png.lnk. Двойной клик запускает PowerShell. Скрипт использует арифметику BigInt — экзотический и довольно нетипичный приём обфускации: адрес загрузки следующего этапа собирается из вычислений с большими целыми числами, что сильно затрудняет статический анализ. В %TEMP% оседает PS1-файл, который тянет с nodejs.org легитимную среду исполнения Node.js v24.13.0.
Здесь и кроется самый любопытный трюк. Node.js не ставится в систему глобально — он распаковывается прямо в пользовательский профиль, в %USERPROFILE%\AppData\Local\Nodejs\. То есть операторы малвари не приносят с собой кастомный рантайм (по модели living-off-the-land), а берут обычный публичный бинарник с официального сайта и запускают его из домашней директории жертвы. Для стандартных средств защиты такая активность выглядит как штатная установка легитимной программы. В этой среде запускается имплант на JavaScript, который канадские и японские исследователи (SOC Prime и ITOCHU, описавшие кампанию примерно за две недели до публикации Microsoft) назвали TonRAT.
Название не случайно. TonRAT использует блокчейн-платформу TON для разрешения доменов командного сервера. Обращение к API TON даёт вредоносу текущий адрес C2 — и это серьёзная головная боль для обороняющихся: статические блоклисты бесполезны, адрес меняется динамически. Сама связь с оператором идёт через шифрованный WebSocket. Наблюдаемые при посткомпромиссном биконинге порты — 8443, 8445, 8453, 5555, 56001, 56002, 56003 — фиксированные IP на нестандартных портах.
Что делает имплант на заражённой машине? Поднимает headless-браузер (видны флаги --headless --no-sandbox), запрашивает геолокацию через публичный сервис ip-api.com — это типичный шаг для фильтрации жертв по стране и пороге интереса — и имеет в арсенале команду cmd /c shutdown -s -t 0, то есть принудительный немедленный шатдаун машины. Сценарий «выключить всё и убрать следы» здесь буквальный.
Закрепление в системе сделано с запасом: двойная персистентность. Первая линия — запись в HKCU\...\RunOnce, указывающая на артефакт в ProgramData. Вторая — ключ в HKCU\...\Run, связанный с Node.js, плюс сам рантайм и .js-файлы в AppData\Local\Nodejs. Удаление только одной линии оставляет вторую рабочей — оба пути нужно сносить одновременно. Это похоже на мину с двумя взрывателями.
Что делать отельерам? Microsoft советует начинать с ресепшен, отдела бронирования и фронт-офисных систем — именно туда целятся письма. При расследовании инцидента нужно единым шагом ликвидировать запись RunOnce в ProgramData, ключ реестра с Node.js, рантайм AppData\Local\Nodejs\node.exe и все .js-скрипты в той же папке. На сетевом уровне стоит заблокировать исходящий трафик на порты 8443, 8445, 8453, 5555, 56001–56003 и обращения к ip-api.com, а также к API TON, где политика позволяет. В почтовом контуре — флаги на отправителя «Booking Manager (via Calendly)», настороженность к цепочкам Calendly → share.google.cfd, и категорический запрет на открытие вложений формата photo-.zip, особенно с ярлыками под видом картинок.
Главный урок этой кампании не технический, а психологический. Аутентификация отправителя — это гарантия того, что письмо пришло с разрешённого сервера, а не того, что его содержимое безопасно. Для сотрудника на ресепшене, у которого третья жалоба на клопов за день и просьба разобраться «ещё вчера», разница между этими двумя вещами может стоить всей IT-инфраструктуры отеля.
Исторически отели уже попадали под похожие удары — например, кампании ClickFix, которые через вытаскивали учётки у сотрудников и ставили им на машины PureRAT. Схема с «бронированиями» как входной точкой и RAT в качестве полезной нагрузки повторяется, и гостиничный сектор остаётся для операторов малвари таким же лакомым, как и пять лет назад. Только инструменты стали изощрённее: блокчейн для адресов C2, легитимный Node.js вместо кастомного бинарника, инфраструктура Calendly как щит против фильтров.


Новое на сайте

Ссылка