Криптовалютный червь: как десятки тысяч фейковых пакетов наводнили 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 применяется комбинация ручных проверок и систем машинного обучения.


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

19989Шесть историй, которые умещаются на ладони 19986Как 30 000 аккаунтов Facebook оказались в руках вьетнамских хакеров? 19985LofyGang вернулась: как бразильские хакеры охотятся на геймеров через поддельные читы 19984Автономная проверка защиты: как не отстать от ИИ-атак 19983Взлом Trellix: хакеры добрались до исходного кода одной из ведущих компаний по... 19982Почему почти 3000 монет в норвежском поле перевернули представление о викингах? 19981Как поддельная CAPTCHA опустошает ваш счёт и крадёт криптовалюту? 19980Слежка за каждым шагом: как ИИ превращает государство в машину тотального контроля 19979Как хакеры грабят компании через звонок в «техподдержку» 19978Почему именно Нью-Йорк стал самым уязвимым городом восточного побережья перед... 19977Как одна команда git push открывала доступ к миллионам репозиториев 19976Зачем древние народы убивали ножами и мечами: оружие как основа власти 19975Как Python-бэкдор DEEPDOOR крадёт ваши облачные пароли незаметно? 19974Послание в бутылке: математика невозможного 19973Почему ИИ-инфраструктура стала новой целью хакеров быстрее, чем ждали все?
Ссылка