Supply-chain атаки на AI coding agents: PromptMink, NPM, PyPI и slopsquatting — ИИ для бизнеса

Supply-chain атаки на AI coding agents: PromptMink, NPM, PyPI и slopsquatting

Прослушать статью

Северокорейская APT создала вредоносные пакеты ПО, чтобы воздействовать на AI coding agents, а «slopsquatting» показывает риски безопасности от галлюцинированных зависимостей.

Злоумышленники тоже пытаются заработать на ажиотаже вокруг AI-кодинга, адаптируя свои методы supply-chain атак так, чтобы целиться уже в сами кодирующие агенты.

Многие AI agents автономно сканируют репозитории пакетов, такие как NPM и PyPI, в поисках компонентов для подключения к своим проектам, и злоумышленники начинают пользоваться этим. В таких репозиториях появляются bait packages с убедительными описаниями и легитимной функциональностью, а на горизонте уже видны и пакеты, рассчитанные на имена зависимостей, которые AI coding agents могут галлюцинировать.

Исследователи компании ReversingLabs отслеживают одну из таких supply-chain атак, использующую «LLM Optimization (LLMO) abuse and knowledge injection», чтобы сделать пакеты более заметными и более вероятными кандидатами для AI agents. Атаку под названием PromptMink приписали Famous Chollima — одной из APT-групп Северной Кореи, которой поручено пополнять бюджет режима за счет атак на разработчиков и пользователей в криптовалютном и fintech-секторах.

«Эта кампания показывает нам новую границу в безопасности software supply chain: AI coding agents заставляют устанавливать и использовать вредоносные зависимости в коде, который они генерируют», — написали исследователи в отчете. «По сути, проблема мало отличается от давно известной схемы, когда киберпреступники и другие злоумышленники социально инженерят разработчиков, чтобы те использовали вредоносные пакеты в своем codebase. Разница в том, что угрозы теперь могут тестировать свою приманку до ее развертывания».

Развивающаяся кампания

Северокорейские злоумышленники часто используют social engineering, чтобы обманом заставить разработчиков установить malware — будь то через фальшивые собеседования или за счет публикации сомнительных программных компонентов, которые могут заинтересовать разработчиков из конкретных отраслей.

Кампания PromptMink, по-видимому, началась в сентябре прошлого года с двух вредоносных пакетов под названиями @hash-validator/v2 и @solana-launchpad/sdk. SDK использовался как bait package с легитимной функциональностью, которую должны были обнаружить разработчики, а hash-validator, зависимость SDK, содержал JavaScript infostealer.

Такое сочетание lure package и вредоносной зависимости, похоже, стало центральной техникой группы, позволяющей делать кампании более устойчивыми. У bait packages выше шанс дольше оставаться незамеченными, накапливать загрузки и историю, чтобы выглядеть более правдоподобно.

В рамках кампании со временем чередовались разные вредоносные пакеты второго уровня, включая aes-create-ipheriv, jito-proper-excutor, jito-sub-aes-ipheriv и @validate-sdk/v2. Все они были связаны с криптовалютными сетями и маскировались под инструменты для работы с криптографическими хэшами и функциями. Bait packages также постепенно диверсифицировались за счет @validate-ethereum-address/core и ряда других, распространяясь по нескольким package registries и языкам программирования, таким как Python и Rust.

Позднее атака эволюционировала и включила дополнительные методы обфускации и вредоносные действия — например, размещение SSH key, контролируемого атакующим, на машинах жертв для прямого удаленного доступа, а также архивирование и эксфильтрацию целых кодовых проектов из скомпрометированных сред.

Одним из заметных изменений стал переход к compiled payloads, чтобы усложнить обнаружение. Например, в феврале пакет @validate-sdk/v2 начал включать Single Executable Applications (SEAs) — самодостаточные приложения, которые содержат JS-код вместе с полным Node.js interpreter. Обычно SEAs не распространяют как часть NPM-пакетов, потому что у пользователей Node.js уже установлен локально на машинах.

В марте атакующие перешли от SEAs к предварительно скомпилированным вредоносным Node.js add-ons, написанным на Rust с использованием проекта NAPI-RS. Вероятно, это сделали, чтобы уменьшить размер payload, поскольку SEAs необычно велики и в некоторых случаях превышают 100MB.

Как LLM используются, чтобы обманывать LLM

Исследователи ReversingLabs заметили явные признаки vibe coding при создании этих вредоносных компонентов, включая комментарии к коду, сгенерированные LLM. Однако внимание привлекло и другое: уровень детализации в README-файлах и то, как документация хвасталась эффективностью этих пакетов при выполнении своих задач.

Исследователи задались вопросом, не было ли это сделано, чтобы сделать вредоносные компоненты привлекательнее для разработчиков, которые обычно и являются целью подобных атак. Но чрезмерно убедительный язык выглядел еще логичнее, если целевыми объектами были автономные coding agents на базе LLM, и вскоре они подтвердили, что именно так и есть.

Позже исследователи обнаружили легитимный проект openpaw-graveyard, созданный в рамках Solana Graveyard Hackathon и использовавший @solana-launchpad/sdk как зависимость. История репозитория показала, что зависимость была добавлена в коммите, соавтором которого значился Claude Opus.

«Это превращает технику из social engineering в комбинацию LLM Optimization (LLMO) abuse и knowledge injection», — заключили исследователи. «В контексте этой кампании цель состоит в том, чтобы заставить LLM с высокой вероятностью рекомендовать использование вредоносного пакета, делая документацию максимально правдоподобной (knowledge injection) и максимально уместной для проекта, над которым работает конкретный LLM coding agent».

Slopsquatting

Этот риск для supply chain со стороны AI agents не ограничивается специально подготовленными описаниями пакетов и документацией. Coding agents могут галлюцинировать названия пакетов полностью. Ранее исследования показали, что это происходит достаточно часто и предсказуемо, чтобы злоумышленники могли этим злоупотреблять.

В январе исследователь Aikido Security Charlie Eriksen зарегистрировал npm-пакет react-codeshift, который был галлюцинирован LLM и затем попал в 237 репозиториев GitHub.

Все началось в октябре с vibe coding коллекции agent skills для переноса проектов на другие фреймворки. В коллекцию вошли два skill-файла — react-modernization и dependency-upgrade, — которые вызывали галлюцинированный пакет react-codeshift через npx, CLI-инструмент, входящий в состав npm и позволяющий скачивать и запускать Node.js-пакеты на лету без установки.

Agent skills — это markdown- или JSON-файлы с инструкциями, метаданными и примерами кода, которые учат AI agents выполнять определенные задачи. Они автоматически активируются во время работы агента, когда в запросах встречаются определенные ключевые слова.

Eriksen зарегистрировал пакет react-codeshift в NPM и сразу начал видеть загрузки, что указывало на практическое использование skill-файлов с галлюцинированными именами пакетов. И не только через npx, но и через другие установщики пакетов Node.js, потому что исходные skills клонировали и модифицировали другие разработчики.

«Цепочка поставок получила новое звено, сделанное из мечтаний LLM», — сказал Eriksen, назвав новую угрозу «slopsquatting».

«Это была галлюцинация. Она распространилась на 237 репозиториев. Она породила реальные попытки загрузки. Единственная причина, по которой это не стало вектором атаки, — я пришел первым», — сказал он.

AI coding agents нужны более жесткие меры безопасности

Пока организации спешат внедрять AI agents в бизнес-процессы и software development pipelines, их средства защиты должны успевать за новыми векторами атак, которые эти агенты создают.

US Cybersecurity and Infrastructure Security Agency, US National Security Agency и их партнеры по Five Eyes недавно опубликовали совместный advisory по внедрению agentic AI services. Среди многих рекомендаций агентства советуют организациям вести доверенные реестры одобренных сторонних компонентов, ограничивать AI agents только allow-listed tools и версиями, а также требовать человеческого подтверждения для действий с высоким риском.

«Плохие или намеренно вводящие в заблуждение описания инструментов могут заставить агентов ненадежно выбирать инструменты, а более убедительные описания выбираются чаще», — предупредили агентства, фактически подтвердив, что LLM можно socially engineer через документацию.

AI coding agents не должны устанавливать зависимости без проверки разработчиком, а каждый предлагаемый пакет следует по умолчанию считать недоверенным до проверки его transient dependencies. Команды разработки должны внедрять практики Software Bill of Materials (SBOM), чтобы отслеживать и аудитировать компоненты, используемые в их development pipelines.


Материал — перевод статьи с английского.

Оригинал: Supply-chain attacks take aim at your AI coding agents