Зловредные пакеты npm нацелились на финансовую логику азартных приложений, подменяя историю ставок

information security

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

Описание

Инцидент начался с обнаружения пакетов "json-bigint-extend", "jsonfx" и "jsonfb", которые представляли собой почти точные копии популярной библиотеки "json-bigint". Они дублировали её функциональность, документацию и даже использовали имя автора, схожее с именем настоящего разработчика. Подобные тактики - типосквоттинг (typosquatting) и атаки на зависимости (dependency confusion) - обычно применяются для широкомасштабного внедрения вредоносного кода. Однако в данном случае злоумышленники преследовали более специфическую цель. Полезная нагрузка была сконструирована так, чтобы оставаться неактивной в большинстве сред и активироваться только при выполнении в окружении целевого приложения, определяемом по значению переменной среды "SERVICE_NAME".

Зловредные пакеты npm нацелились на финансовую логику азартных приложений, подменяя историю ставок

Попав в нужную среду, пакет устанавливал два типа бэкдоров. Во-первых, он внедрял целевое промежуточное программное обеспечение (middleware) в фреймворк Express.js, которое срабатывало исключительно при обращении к платёжному маршруту "/v1/pay/purchase-goods". Это промежуточное ПО было предназначено для динамического исполнения кода, загружаемого с удалённого сервера каждые 30 секунд. Анализ этого кода показал, что он представляет собой сложную систему для манипуляции денежными потоками, способную переписывать историю игровых раундов в азартных приложениях. Во-вторых, пакет глобально модифицировал Express.js на уровне прототипа, добавляя скрытое промежуточное ПО ко всем POST-запросам. Оно реагировало на специальный заголовок "x-operation" и предоставляло оператору четыре команды для выполнения произвольных SQL-запросов к базе данных, просмотра списка файлов на сервере, чтения их содержимого и архивирования целых директорий для последующей утечки.

Самым тревожным аспектом атаки является механизм манипуляции с балансами. Функция "riskCode()", вызываемая в платежном middleware, содержала логику для ретроактивного изменения недавней истории игр конкретного пользователя. Алгоритм анализировал записи о денежных потоках, выбирал определённое количество игровых раундов и корректировал значения ставок и выплат таким образом, чтобы изменить баланс в кошельке пользователя на заданную величину. При этом система перестраивала всю цепочку связанных игровых логов в базе данных, чтобы изменения выглядели внутренне согласованными. Целью была не просто кража, а целенаправленное мошенничество, способное обойти внутренние проверки на целостность данных, поскольку журналы базы данных, обычно считающиеся надёжным источником, оказывались сфальсифицированными.

Контекстные отсылки в коде указывают на возможную цель - приложение для азартных игр под названием Bappa Rummy, активно рекламируемое через партнёрские программы и сторонние магазины приложений, но отсутствующее в официальном Google Play. Этот случай подчёркивает уникальную опасность подобных атак для бизнеса. В отличие от стандартных имплантов, которые крадут исходный код или учётные данные, эта кампания была нацелена на саму суть бизнес-процессов - финансовые транзакции и их учёт. Злоумышленники получили возможность не только наблюдать за трафиком, но и дистанционно изменять его, напрямую влияя на финансовые результаты.

Для специалистов по информационной безопасности этот инцидент служит серьёзным напоминанием о необходимости многоуровневого контроля цепочки поставок. Помимо сканирования зависимостей на наличие известных уязвимостей, критически важно внедрять инструменты для обнаружения аномального поведения и несанкционированных изменений в runtime-среде. Мониторинг должен выходить за рамки проверки логов и включать в себя анализ соответствия бизнес-логики, например, путём сравнения финансовых транзакций с независимыми записями или использования механизмов неизменяемого журналирования (immutable logging). Кроме того, строгое ограничение прав доступа процессов к базе данных по принципу наименьших привилегий могло бы предотвратить выполнение произвольных SQL-команд, даже если вредоносный код был бы успешно внедрён. Инцидент наглядно показывает, что в современной threat-модели угроза может исходить не только извне, но и из самого ядра бизнес-приложения, если злоумышленнику удастся скомпрометировать его зависимость.

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

Пакеты и авторы

  • jsonfb (by sidoraress)
  • jsonfx (by sidoraress)
  • json-bigint-extend (by sidoraress & infinitynodestudio)

Наблюдаемые конечные точки

  • https://payment.y1pay.vip/v1/risk/get-risk-code
  • https://payment.y1pay.vip/v1/risk/log
  • https://payment.snip-site.cc

Запросы, содержащие заголовок x-operation с одним из четырех токенов операции

  • RunSQL (token: cfh2DNITa84qpYQ0tdCz)
  • RunFileList (token: m3QiEkg8Y1r9LFTI5e4f)
  • RunFileContent (token: Y3SrZjVqWOvKsBdpTCh7)
  • CompressDownload (token: SJQf31UJkZ1f88q9m361)
Комментарии: 0