Всем привет!
Меня зовут Александр, я COO в SaaS-платформе аналитики данных. Тема безопасности с активным распространением "vibe coding" (на Хабре кажется прижился термин monkey-coding) вызывает большие вопросы, ниже один из них.
У себя в телеграм-канале делюсь сжатыми и структурированными саммери статей.
Распространение инструментов генерации кода на базе LLM меняет способы разработки программного обеспечения — и одновременно создает новые риски для цепочки поставок ПО.
Эти ИИ-помощники для кодирования, как и большие языковые модели в целом, имеют привычку галлюцинировать. Они предлагают код, который включает несуществующие программные пакеты.
Как мы отмечали в марте и сентябре прошлого года, эксперты по безопасности и академические исследователи обнаружили, что ИИ-помощники для кодирования выдумывают названия пакетов. В недавнем исследовании выяснилось, что около 5,2 процента предложений пакетов от коммерческих моделей не существовало, по сравнению с 21,7 процентами от моделей с открытым исходным кодом или общедоступных моделей.
Запуск такого кода должен приводить к ошибке при импорте несуществующего пакета. Но злоумышленники поняли, что могут использовать эти галлюцинации в своих интересах.
Все, что нужно сделать — создать вредоносный пакет под выдуманным именем и загрузить его в реестр пакетов, такой как PyPI или npm, для распространения. После этого, когда ИИ-помощник повторно галлюцинирует использованное название, процесс установки зависимостей и выполнения кода запустит вредоносное ПО.
Повторяемость, по-видимому, следует бимодальной модели — некоторые галлюцинированные имена появляются повторно при повторном запуске промптов, в то время как другие полностью исчезают — что говорит о том, что определенные запросы стабильно производят одни и те же фантомные пакеты.
Как отметила недавно компания Socket, занимающаяся безопасностью, академические исследователи, изучавшие эту тему в прошлом году, обнаружили, что повторный запуск одного и того же запроса, вызывающего галлюцинации, десять раз приводил к тому, что 43 процента галлюцинированных пакетов повторялись каждый раз, а 39 процентов больше не появлялись.
Эксплуатация галлюцинированных имен пакетов представляет собой форму тайпосквоттинга, когда для обмана людей используются вариации или опечатки распространенных терминов. Seth Michael Larson, разработчик по безопасности в Python Software Foundation, назвал это явление "slopsquatting" — от слова "slop" (мусор), распространенного пренебрежительного термина для описания результатов работы ИИ-моделей.
"Мы находимся на самом раннем этапе изучения этой проблемы на уровне экосистемы", — сказал Larson изданию The Register. "Трудно, и, вероятно, невозможно количественно оценить, сколько попыток установки происходит из-за галлюцинаций LLM без большей прозрачности со стороны поставщиков LLM. Пользователи кода, пакетов и информации, сгенерированных LLM, должны перепроверять результаты LLM, прежде чем применять эту информацию на практике, иначе могут быть реальные последствия".
Larson сказал, что существует множество причин, по которым разработчик может попытаться установить несуществующий пакет, включая ошибки в написании имени пакета, неправильную установку внутренних пакетов без проверки, существуют ли уже эти имена в публичном индексе (путаница с зависимостями), различия между именем пакета и именем модуля и так далее.
"Мы наблюдаем настоящий сдвиг в том, как разработчики пишут код", — сказал Feross Aboukhadijeh, генеральный директор компании Socket, специализирующейся на безопасности, в интервью для The Register. "Поскольку инструменты ИИ становятся стандартными помощниками для многих, 'vibe coding' происходит постоянно. Разработчики делают запрос к ИИ, копируют предложение и идут дальше. Или, что еще хуже, ИИ-агент сам устанавливает рекомендованные пакеты.
Проблема в том, что эти предложения кода часто включают галлюцинированные имена пакетов, которые звучат реально, но не существуют. Я видел это лично. Вы вставляете код в терминал, и установка не удается — или, что хуже, она удается, потому что кто-то уже занял этот галлюцинированный пакет с помощью slopsquatting.
Aboukhadijeh сказал, что эти поддельные пакеты могут выглядеть очень убедительно.
"Когда мы расследуем, мы иногда находим реалистично выглядящие README, поддельные репозитории GitHub, даже сомнительные блоги, которые делают пакет похожим на подлинный", — сказал он, добавив, что сканирование безопасности Socket обнаружит эти пакеты, поскольку они анализируют, как работает код.
Еще хуже то, что когда вы ищете в Google одно из этих имен пакетов из slopsquatting, вы часто получаете сгенерированное ИИ краткое изложение от самого Google, уверенно хвалящее пакет, говорящее, что он полезный, стабильный, хорошо поддерживаемый. Но оно просто повторяет собственный README пакета, без скептицизма, без контекста. Для разработчика в спешке это создает ложное чувство легитимности.
"В каком мире мы живем: галлюцинированные ИИ пакеты подтверждаются и одобряются другим ИИ, который слишком стремится быть полезным".
Aboukhadijeh указал на инцидент в январе, когда AI Overview от Google, который отвечает на поисковые запросы сгенерированным ИИ текстом, предложил вредоносный npm-пакет @async-mutex/mutex, осуществляющий тайпосквоттинг легитимного пакета async-mutex.
Он также отметил, что недавно злоумышленник под именем "_Iain" опубликовал на даркнет-форуме руководство о том, как создать ботнет на базе блокчейна с использованием вредоносных npm-пакетов.
Aboukhadijeh пояснил, что _Iain "автоматизировал создание тысяч пакетов с тайпосквоттингом (многие из которых нацелены на библиотеки для криптовалют) и даже использовал ChatGPT для генерации реалистично звучащих вариантов имен реальных пакетов в массовом масштабе. Он поделился видеоуроками, демонстрирующими этот процесс — от публикации пакетов до выполнения полезной нагрузки на зараженных машинах через графический интерфейс. Это наглядный пример того, как злоумышленники используют ИИ для ускорения атак на цепочку поставок программного обеспечения".
Larson сказал, что Python Software Foundation постоянно работает над тем, чтобы усложнить злоупотребление пакетами, добавив, что такая работа требует времени и ресурсов.
"Alpha-Omega спонсировала работу Mike Fiedler, нашего инженера по безопасности PyPI, над снижением рисков вредоносного ПО на PyPI, например, путем реализации программного API для сообщения о вредоносном ПО, сотрудничества с существующими командами по обнаружению вредоносного ПО и внедрения лучших средств обнаружения тайпосквоттинга популярных проектов", — сказал он.
"Пользователи PyPI и менеджеров пакетов в целом должны проверять, что устанавливаемый пакет является существующим и известным, что в имени нет опечаток, и что содержимое пакета было проверено перед установкой. Еще лучше, если организации будут зеркалировать подмножество PyPI внутри своих собственных систем, чтобы иметь гораздо больший контроль над тем, какие пакеты доступны разработчикам"