JSON

Postinstall/Preinstall Hook Heuristic Scanner

Найти подозрительные паттерны lifecycle-скриптов — недокументированные хуки, обфусцированные файлы, платформенные бинарники.

Как это работает

Вредоносная версия jscrambler 8.14.0 добавила необъявленный preinstall-хук, вызывающий dist/setup.js — файл, которого не существовало в предыдущем релизе 8.13.0, вместе с платформенными бинарниками внутри обфусцированного контейнера. Это не единичный случай, а узнаваемый паттерн: новый lifecycle-скрипт, ссылающийся на файл с généric-именем вроде setup.js или intro.js, которого не было в предыдущей версии. Postinstall/Preinstall Hook Heuristic Scanner online ищет такие паттерны в package.json без обращения к внешним базам данных инцидентов.

В отличие от инструмента проверки по конкретному списку известных инцидентов, этот сканер работает эвристически — он не знает заранее, что именно вредоносно, а ищет структурные признаки, общие для целого класса подобных атак: необычные имена вызываемых скриптов, ссылки на платформенно-специфичные бинарники, и лаконичные, но непрозрачные команды в полях scripts, которые сложно понять без чтения самого вызываемого файла.

Инструмент не заменяет проверку по актуальной базе известных инцидентов — оба подхода дополняют друг друга: конкретный список ловит уже задокументированные атаки, а эвристика может отметить подозрительную структуру ещё не задокументированного, свежего инцидента.

Частые вопросы

Может ли эвристический сканер дать ложные срабатывания?

Да, легитимные пакеты тоже иногда используют нестандартные имена для install-скриптов и платформенные бинарники по разумным причинам, находка эвристики — это сигнал для дальнейшей ручной проверки, а не автоматический приговор о вредоносности.

Чем это лучше, чем просто прочитать содержимое каждого install-скрипта самому?

Ручное чтение работает для одного пакета, но не масштабируется на весь дерево зависимостей проекта с сотнями пакетов, эвристика быстро сужает список до тех немногих, что реально стоит прочитать вручную.

Работает ли сканер офлайн, без обращения к внешним сервисам?

Да, вся эвристика строится на анализе текста вставленного package.json локально в браузере, без запросов к внешним базам данных инцидентов, поэтому работает даже с непубличными или ещё не задокументированными пакетами.

Стоит ли проверять package-lock.json этим сканером тоже?

Да, полезно, потому что вредоносная зависимость может оказаться не прямой, а транзитивной, попавшей в проект через цепочку других пакетов, а lock-файл содержит полное дерево установленных версий.