Исследователи компании Socket выявили на платформе npm семь вредоносных пакетов, которые использовали облачный сервис Adspect для сокрытия своей активности и перенаправления пользователей на криптомошеннические веб-сайты. Инцидент наглядно демонстрирует, насколько уязвима экосистема открытого ПО к атакам на цепочку поставок и как легальные инструменты антибот-защиты могут превращаться в механизм маскировки киберпреступников.
Как атакующие использовали npm и облачный сервис Adspect
Все обнаруженные пакеты были опубликованы в период с сентября по ноябрь 2025 года аккаунтом разработчика под псевдонимом dino_reborn (электронная почта geneboo@proton[.]me). Формально они выглядели как обычные зависимости для веб-проектов, что повышало шанс их установки в реальные приложения.
Сервис Adspect позиционируется как система фильтрации трафика и защиты сайтов от ботов. Однако в данной кампании он использовался в противоположном ключе — как инструмент cloaking, то есть сокрытия вредоносной логики от специалистов по безопасности и автоматизированных систем анализа трафика.
Из семи опубликованных пакетов шесть содержали вредоносный JavaScript-код, а седьмой пакет под названием signals-embed выполнял роль приманки, формируя страницу, с которой начинался сценарий атаки.
Технический разбор вредоносного JavaScript-кода
Автоматический запуск через IIFE и исполнение в браузере
Вредоносная часть представляла собой примерно 39 КБ JavaScript-кода, упакованного в конструкцию IIFE (Immediately Invoked Function Expression) — функцию, которая выполняется сразу после объявления. Это означало, что как только разработчик подключал пакет к своему веб-приложению, скрипт автоматически загружался и запускался в браузере пользователя без дополнительных действий со стороны разработчика.
Противодействие анализу и защита от исследователей
Код был явно ориентирован на обход анализа и реверс-инжиниринга. Он:
- блокировал правый клик мышью;
- отключал доступ к инструментам разработчика через клавишу F12;
- перехватывал сочетания клавиш Ctrl+U (просмотр исходного кода страницы) и Ctrl+Shift+I (DevTools);
- при обнаружении открытых DevTools принудительно перезагружал страницу.
Подобные техники широко используются в фишинговых и мошеннических кампаниях, чтобы усложнить работу аналитиков и систем статического/динамического анализа.
Фингерпринтинг браузера и фильтрация жертв
Параллельно скрипт проводил активный фингерпринтинг — сбор характеристик окружения пользователя для его профилирования. В частности, собирались данные о:
- user agent браузера;
- языковых настройках;
- используемом протоколе (HTTP/HTTPS);
- домене (host) и реферере;
- полном URI и параметрах запроса;
- кодировке и ряде других параметров.
Эти сведения передавались на прокси-сервер злоумышленников, а реальный IP-адрес пользователя отправлялся в API сервиса Adspect. На основе этой информации принималось решение, кто находится перед страницей — реальная потенциальная жертва или специалист по кибербезопасности.
Сценарий атаки: от фальшивой CAPTCHA до криптоскама
Если собранный профиль соответствовал критериям атакующих, пользователя перенаправляли на поддельную страницу с CAPTCHA, оформленную с использованием логотипов криптовалют Ethereum или Solana. Визуально это выглядело как стандартная проверка «я не робот».
Однако переход по CAPTCHA запускал цепочку действий, в результате которой в новой вкладке открывался специально сформированный URL сервиса Adspect. Благодаря этому посещение криптомошеннического ресурса выглядело как инициированное самим пользователем, а не скриптом, что помогало обходить часть защитных механизмов браузеров и систем антифрода.
Если же логика фингерпринтинга «подозревала» исследователя ИБ или автоматизированный сканер, вместо мошеннического сценария загружалась ложная, но безвредная страница якобы компании Offlido. Такой подход снижал риск быстрой деанонамизации кампании.
Риски для цепочки поставок ПО и безопасность npm
Инцидент с Adspect и вредоносными npm-пакетами — очередной пример атаки на цепочку поставок ПО (software supply chain). Злоумышленники больше не пытаются взломать каждую жертву напрямую; вместо этого они внедряются в популярные экосистемы пакетов, рассчитывая на доверие разработчиков к открытым репозиториям.
По данным публичных отчетов крупных поставщиков решений для разработки и безопасности, ежегодно в экосистемах вроде npm, PyPI и Maven обнаруживаются тысячи вредоносных или скомпрометированных пакетов. Это делает практики обеспечения безопасности зависимостей критически важной задачей как для отдельных разработчиков, так и для организаций.
После публикации отчёта Socket все семь вредоносных пакетов были оперативно удалены из репозитория npm. Тем не менее, факт их присутствия в течение нескольких месяцев указывает на необходимость более строгих процессов проверки пакетов и внедрения дополнительных средств защиты на стороне разработчиков.
Чтобы снизить риск подобных инцидентов, рекомендуется использовать специализированные инструменты анализа зависимостей, закреплять версии пакетов (lock-файлы), проводить регулярный аудит используемых библиотек, а также внедрять принципы Zero Trust в отношении стороннего кода. Чем более системно вы подходите к безопасности цепочки поставок, тем сложнее злоумышленникам превратить легитимные инструменты и репозитории в канал доставки малвари.