Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили npm

С начала 2024 года реестр npm, ключевой компонент экосистемы JavaScript, подвергся массированной и продолжительной спам-атаке червеподобного типа. В рамках кампании, получившей название "IndonesianFoods", было опубликовано 46 484 поддельных пакета. Целью злоумышленников был не традиционный взлом или кража данных, а финансовая выгода через злоупотребление крипто-протоколом Tea, который вознаграждает разработчиков открытого кода.
Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили npm
Изображение носит иллюстративный характер

Атаку первыми зафиксировали несколько исследовательских групп. Пол Маккарти, исследователь безопасности из SourceCodeRED, изначально обратил внимание на подозрительную активность. Позже компании Phylum (ныне часть Veracode) и Sonatype также сообщили о связанной кампании в апреле 2024 года. Детальный отчет, раскрывший масштаб и механизм атаки, был опубликован исследователями Крисом Стайку и Кираном Раджем из Endor Labs под руководством Хенрика Плейта.

Механизм распространения уникален своей простотой и эффективностью в обходе автоматических систем безопасности. Вредоносный код, содержащийся в файлах типа auto.js или publishScript.js, не активируется автоматически после установки пакета, как это делают многие зловреды. Для его запуска требуется ручное исполнение пользователем команды, например, node auto.js. Такой «спящий» режим позволяет коду оставаться незамеченным для большинства сканеров и песочниц, анализирующих поведение пакета при инсталляции.

При ручной активации скрипт запускает бесконечный цикл публикаций. Сначала он удаляет из файла package.json параметр "private": true", чтобы сделать пакет публичным. Затем генерирует случайное имя и версию для нового пакета, используя встроенный словарь, чтобы избежать дублирования. После этого он выполняет команду npm publish, загружая новый спам-пакет в реестр. Этот процесс повторяется непрерывно.

Скорость публикации ошеломляет: один новый пакет загружался каждые 7-10 секунд. Это соответствует производительности около 12 пакетов в минуту, 720 в час и почти 17 000 в сутки. Кроме того, все спам-пакеты ссылались друг на друга в качестве зависимостей, создавая плотную сеть. При попытке установить один такой пакет, менеджер зависимостей начинал вытягивать всю цепочку, создавая огромную нагрузку на пропускную способность инфраструктуры npm.

Основной мотивацией злоумышленников является крипто-фарминг. Они стремились злоупотребить протоколом Tea — децентрализованной системой, которая награждает разработчиков токенами TEA за их вклад в проекты с открытым исходным кодом. Публикуя десятки тысяч взаимосвязанных пакетов, атакующие искусственно завышали свой «показатель влияния» в системе, рассчитывая на получение вознаграждения.

Доказательства этой схемы были обнаружены непосредственно в коде. Некоторые пакеты, контролируемые злоумышленниками, такие как arts-dao и gula-dao, содержали файл tea.yaml. В этом конфигурационном файле были прописаны пять различных аккаунтов в системе Tea, на которые, предположительно, должны были начисляться токены.

Несмотря на масштаб, атака не отличалась технической сложностью в плане взлома. Её сила заключалась в автоматизации и объеме. Поддельные пакеты маскировались под проекты Next.js и использовали две основные схемы именования. Первая, давшая название кампании, основывалась на индонезийских именах и названиях продуктов. Вторая использовала случайные английские слова, например, able_crocodile-notthedevs.

Хотя атака не была нацелена на кражу учетных данных, ее воздействие на экосистему было значительным. Она привела к загрязнению реестра npm, бесполезной трате инфраструктурных ресурсов, ухудшению результатов поиска для разработчиков и созданию общего «шума», который мешал работе систем безопасности. Расследование показало, что злоумышленники, предположительно действующие из Индонезии, готовились к кампании более двух лет, а некоторые из их пакетов находились в реестре почти два года.

Представитель GitHub, владельца npm, подтвердил, что все обнаруженные вредоносные пакеты были удалены из реестра. Это было сделано в соответствии с политикой допустимого использования, которая запрещает кампании по распространению вредоносного ПО и нанесению технического вреда. Для обнаружения подобных угроз в GitHub применяется комбинация ручных проверок и систем машинного обучения.


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

19819Темнота быстрее света, толстеющие медведи и боль омаров 19818Китайские фотографы, придумавшие визуальный образ Индонезии 19817В Луксоре нашли стелу с римским императором в образе фараона 19816Экипаж Artemis II о моменте, когда земля исчезла за луной 19815Почему Луна выглядит по-разному в разных точках Земли? 19814Adobe экстренно закрыла опасную дыру в Acrobat Reader, которую хакеры использовали с... 19813Метеорный поток, рождённый из умирающего астероида 19812Когда робот пишет за тебя прощальную смс 19811Что общего у лунной миссии, толстого попугая, загадочной плащаницы и лекарства от диабета? 19810Какие снимки Artemis II уже стали иконами лунной программы? 19809Кто на самом деле хочет сладкого — вы или ваши бактерии? 19808Как рекламные данные 500 миллионов телефонов оказались в руках спецслужб? 19807Экипаж Artemis II вернулся на землю после десяти дней в космосе 19806Зелёная и коричневая луна: почему геологи Artemis II уже не могут усидеть на месте 19805Эксперты уверены в теплозащитном щите Artemis II, несмотря на проблемы предшественника
Ссылка