Очередная масштабная кампания в экосистеме npm продемонстрировала, насколько быстро угрозы цепочки поставок программного обеспечения (Software Supply Chain) могут достигать критического масштаба. Вредоносный пакет под названием "ambar-src", замаскированный под популярную библиотеку, был скачан порядка 50 000 раз за несколько дней до его удаления. Его ключевая особенность - способность скомпрометировать систему разработчика на этапе установки, даже если код пакета никогда не будет импортирован или вызван в проекте. Этот инцидент служит суровым напоминанием, что команда "npm install" является операцией высокого риска, требующей повышенного внимания со стороны специалистов по безопасности.
Описание
Как следует из анализа исследователей Tenable, пакет впервые появился в публичном реестре npm 13 февраля, а версия, содержащая вредоносный код, была загружена 16 февраля. В отличие от некоторых прошлых атак, где злоумышленники компрометировали легитимные пакеты, "ambar-src" изначально не имел законного назначения. Его основным вектором первоначального доступа, вероятно, был тайпсквоттинг (typosquatting) - подмена названия популярного пакета "ember-source", который имеет более 11 миллионов загрузок. Неопытный разработчик, допустивший опечатку в команде установки, мог стать жертвой.
Механизм работы угрозы технически изощрен и направлен на максимальное уклонение от обнаружения. Пакет использует хуки жизненного цикла npm, в частности, скрипт "preinstall", который автоматически выполняется в процессе установки. Это означает, что для запуска вредоносной полезной нагрузки достаточно выполнить команду "npm install ambar-src" или установить пакет как зависимость. Сам скрипт "preinstall" содержится в файле "index.js" и искусно маскируется под легитимный код, содержащий утилиты для работы со строками и арифметических операций. Однако внутри него скрывается шестнадцатерично закодированная команда, которая и запускает цепочку заражения. Такое кодирование существенно затрудняет статический анализ и обнаружение сигнатурами.
После декодирования шестнадцатеричной строки выполняется однострочная команда, специфичная для операционной системы жертвы. Независимо от платформы, её цель - загрузить и выполнить следующий этап загрузчика с удалённого сервера, использующего домен "x-ya[.]ru". Для систем Windows загружается исполняемый файл "msinit.exe", который содержит зашифрованный шеллкод, декодируемый и загружаемый непосредственно в память. В случае с Linux загружается bash-скрипт, который, в свою очередь, скачивает и запускает ELF-бинарный файл. Анализ метаданных сборки Go показал, что этот бинарник является клиентом открытого инструмента "reverse_ssh" - обратной оболочки, написанной на Golang, что предоставляет злоумышленнику полный контроль над терминалом скомпрометированной системы.
Наиболее сложная полезная нагрузка предназначена для macOS. После выполнения начального скрипта на жертву загружается JavaScript-файл размером около 500 КБ. Это полезная нагрузка Apfell, входящая в семейство открытых инструментов MythicAgents, специально разработанная для macOS. Её возможности впечатляют: от базовой разведки системы и сбора скриншотов до кражи данных из Google Chrome и отображения фишинговых окон для ввода пароля. Использование утилиты "osascript", встроенной в macOS, для выполнения JavaScript-кода делает атаку особенно скрытной.
После первоначального заражения все полезные нагрузки переходят на общение с доменом "function.yandexcloud[.]ru". Это классический приём, известный как использование легитимных веб-сервисов в качестве ретранслятора командного центра управления (C2, Command and Control), который зафиксирован в матрице MITRE ATT&CK под идентификатором T1102. Трафик к популярным облачным сервисам выглядит менее подозрительным и с большей вероятностью проходит через корпоративные межсетевые экраны и системы фильтрации, что повышает устойчивость вредоносной инфраструктуры.
Последствия успешного заражения крайне серьёзны. Любая система, на которой был установлен пакет "ambar-src", должна рассматриваться как полностью скомпрометированная. Учитывая характер развёрнутых полезных нагрузок - обратные оболочки и продвинутые бэкдоры, - злоумышленник получает практически неограниченный контроль над хостом. Стандартное удаление пакета через менеджер npm не гарантирует очистки системы, поскольку вредоносное ПО уже могло укрепить своё присутствие (persistence) и распространиться за пределы директории node_modules. В таких условиях необходим полноценный инцидент-ответ. Все секреты, ключи шифрования и учетные данные, которые могли храниться на заражённой машине, должны быть немедленно заменены (отозваны) с другого, безопасного компьютера.
Администраторам и командам разработки рекомендуется провести срочную инвентаризацию своих сред. Необходимо проверить все проекты, серверы сборки и системы непрерывной интеграции (CI/CD) на наличие пакета "ambar-src" в файлах "package.json" или "package-lock.json". Команда npm оперативно отреагировала на угрозу, удалив пакет из реестра менее чем через пять часов после публикации вредоносной версии, а также выпустив официальное предупреждение (GitHub Advisory, GHSA). Однако учитывая скорость распространения и количество загрузок, многие системы могли быть заражены до момента блокировки. Этот инцидент подчёркивает необходимость внедрения практик безопасной разработки, включающих проверку зависимостей с помощью специализированных инструментов, сегментацию сред разработки и принцип наименьших привилегий для процессов сборки. Установка пакетов из публичных реестров должна быть осознанным действием, а не автоматической рутиной.
Индикаторы компрометации
URLs
- https://functions.yandexcloud.net/d4eblscvbp200glhmmco
- https://functions.yandexcloud.net/d4eblscvbp200glhmmco0l
- https://functions.yandexcloud.net/d4eblscvbp200glhmmcoePl
- https://functions.yandexcloud.net/d4eblscvbp200glhmmcopl8
MD5
- 9a8c2a83f66f49b88e36d28894a34009
- f8ca2c8d74f0785c549f09c36147cd0e
SHA256
- 1e6fa5021db4dd40b571cc4e654a71c22d0f607d13fb8a4a5a46a64060f3071e
- 492f2366ece5c544a4062da14da5883bc825d6f2bc58cda975799dca9f85b150
- 521ade4aeb95039e1712f8284eba333199fc819f1e0f9db41d6bc9849b131109
- 83e131a2761d6f3a5636cf329182242a927a618174dd440989dc9286be4edeac
- 8963568963f770e237bff2b228106e4ce7ebb0a1af0e0cf7b26028bdc8515bc5
- 9b76e275d989ebc3b43911a5e1d2b64ef9544a6b1dbc69a3412bd0ccadaed567