Пользователь NPM массово заполняет реестр фейковыми пакетами со шрифтами

В ходе планового мониторинга активности реестра NPM специалистами Mend.io был обнаружен подозрительный паттерн, связанный с пользователем sdjkals, который опубликовал 10 пакетов с файлами, что выглядят как шрифты WOFF2. Первоначальный анализ свидетельствует, что это не легитимные шрифтовые ресурсы.

Пакеты опубликованы в пределах неймспейса @sdjkals/*. Номера версий достигают 1.0.1594 и 1.0.1912, что указывает на очень быстрые циклы перевыпуска – новые версии публикуются каждые несколько минут. Каждый пакет содержит 31–33 файлов с шаблоном названия segment_NNNNNN.woff2. Размер отдельного сегмента составляет 2–3 МБ, а общий размер пакета – около 90 МБ. Всего во всех зафиксированных пакетах насчитывается более 284 сегментных файлов.

Структура пакетов во всех случаях одинакова:

  • минимальный package.json с общим описанием “Assets”,
  • простой index.js, который экспортирует ссылку на CSS для шрифтов,
  • сегментные файлы

В заголовках сегментов есть корректные магические байты (magic bytes) WOFF2, однако инструменты парсинга шрифтов отклоняют их как некорректные. Бинарный анализ показывает, что данные могут быть зашифрованы или сжаты с использованием нестандартного формата.

Анализ сегментации полезной нагрузки

Распределение сегментов между пакетами свидетельствует об умышленной фрагментации:

@sdjkals/lib-v1-ifmt          → segments 000128-000158
@sdjkals/media-static-pro     → segments 000283-000313
@sdjkals/adapter-core-v1      → segments 000408-000438
@sdjkals/data-dist-387w       → segments 000656-000686
@sdjkals/assets-loader-nse4   → segments 000717-000747
@sdjkals/data-lib-kernel      → segments 000748-000779
@sdjkals/shim-theme-v2        → segments 000842-000873
@sdjkals/font-core-v1         → segments 001025-001056
@sdjkals/adapter-theme-kernel → segments 001059-001090

Заметны разрывы в нумерации сегментов между разными пакетами. Это указывает на архитектуру распределенной полезной нагрузки, при которой полный набор данных необходимо собрать путем установки нескольких пакетов. Такой подход обычно применяется для обхода автоматизированных систем обнаружения, анализирующих каждый пакет изолированно.

Аномальны и сами номера версий. Пакет @sdjkals/data-lib-kernel уже достиг v1.0.1912, а другие пакеты имеют так же неестественно «раздутые» версии (v1.0.1594, v1.0.1614). Сверхбыстрая смена версий выполняет несколько функций: усложняет отслеживание содержательных изменений, создает шум в системах мониторинга реестра и потенциально является злоупотреблением инфраструктурой хранения и пропускной способности NPM.

Оценка угроз

Этот паттерн создает несколько проблем с точки зрения безопасности:

  • Злоупотребление инфраструктурой: злоумышленник использует CDN и хранилище NPM для размещения почти 900 ГБ обфусцированных данных в нескольких пакетах, а непрерывный перевыпуск дополнительно усиливает потребление ресурсов.
  • Распределение полезной нагрузки: сегментированная архитектура характерна для многоэтапных систем доставки полезной нагрузки. Распределяя сегменты между пакетами с непоследовательной нумерацией, злоумышленник усложняет статический анализ и уменьшает вероятность того, что автоматизированные средства обнаружения обозначат любой отдельный пакет вредоносным.
  • Уклонение от обнаружения: отдельные пакеты выглядят безвредными, они содержат только файлы шрифтов и минимальный JavaScript. Отсутствуют очевидные «крючки» для выполнения кода, подозрительные сетевые запросы или обфусцированный код. Поэтому их сложно обозначить как подозрительные с помощью традиционных эвристик.
  • Засорение сигналов: быстрое увеличение версий создает шум в системах мониторинга безопасности, отслеживающих обновление пакетов. Это потенциально может маскировать другую злонамеренную активность или перегружать очередь уведомлений и снижать внимание к критическим сигналам.

Вывод

Уровень сложности этой операции (распределенная полезная нагрузка, имитация форматов файлов, быстрая итерация) указывает либо на proof-of-concept методик атак на цепь поставок, либо на активное злоупотребление инфраструктурой для хранения и распространения данных.

Подписаться на новости