Ложь, наглая ложь и галлюцинации ИИ: почему твой следующий проект может стать золотой жилой для хакеров благодаря выдуманным пакетам

Чем умнее ИИ, тем легче ему подсунуть вам вирус.


fj3q917hwtr3n9ozu0ob20zipjvtgzm6.jpg


ИИ может сгенерировать код, но не всегда — безопасный. Новое исследование , которое будет представлено на конференции USENIX Security Symposium в 2025 году, показало, что LLM-модели, создавая программный код, часто выдумывают зависимости от несуществующих библиотек. Такое поведение, получившее название «package hallucination» (галлюцинация пакетов), не просто снижает качество кода, но и серьёзно повышает риски для цепочек поставок ПО.

Анализ охватил 576 000 образцов кода, сгенерированных 16 разными моделями, включая коммерческие и open source. В общей сложности в этих примерах содержалось более 2,23 миллиона ссылок на сторонние библиотеки. Из них почти 440 000 (19,7%) вели к несуществующим пакетам. Особенно часто это происходило с открытыми моделями вроде CodeLlama и DeepSeek — их средний уровень ложных зависимостей достигал почти 22%. У коммерческих моделей, таких как ChatGPT, этот показатель составил чуть более 5%, что связывают с более крупной архитектурой и улучшенной настройкой.

Наиболее тревожным оказалось то, что «галлюцинации» не носили случайный характер. 43% ложных зависимостей повторялись в более чем 10 запросах. В 58% случаев один и тот же вымышленный пакет возникал несколько раз в рамках 10 итераций. Это делает их удобной мишенью для атак типа « dependency confusion » — подмены легитимных компонентов на вредоносные с аналогичными именами. Если злоумышленник заранее опубликует пакет с таким названием, его код может быть автоматически загружен и исполнен при сборке проекта, особенно если он выглядит как более свежая версия.

Подобные атаки уже демонстрировались в реальных условиях — в 2021 году исследователи смогли внедрить вредоносный код в инфраструктуры таких гигантов, как Apple, Microsoft и Tesla, именно через подмену зависимостей. Уязвимость проявляется, когда система приоритетно выбирает пакет с более высоким номером версии, даже если он поступил из непроверенного источника. Теперь же модели искусственного интеллекта могут непреднамеренно предлагать названия именно таких фиктивных пакетов, не существующих в официальных репозиториях.

Исследование также зафиксировало, что код на JavaScript подвержен ложным зависимостям чаще, чем код на Python — 21% против почти 16%. Исследователи объясняют это большей сложностью и размером JavaScript-экосистемы, а также более запутанным неймспейсом, что усложняет точное «вспоминание» имён пакетов моделью.

Согласно авторам, ни размер модели с открытым исходным кодом, ни архитектурные отличия внутри этой группы не оказали явного влияния на уровень галлюцинаций. Гораздо большее значение имеют объём обучающих данных, механизмы дообучения и защиты от небезопасного поведения. У коммерческих LLM (например, ChatGPT), где эти процессы сложнее и глубже проработаны, ложных зависимостей в разы меньше.

Поскольку большинство современных разработчиков активно интегрируют сторонние библиотеки ради ускорения работы и сокращения ручного кода, package hallucination становится особенно опасной. Microsoft ранее заявляла, что уже через пять лет до 95% всего программного кода будет создаваться ИИ, а значит, некритичное доверие к его рекомендациям может привести к массовому заражению инфраструктуры ещё на этапе сборки.

Данная угроза подчёркивает необходимость дополнительных мер по контролю за безопасностью программной сборки, включая ручную верификацию имён пакетов, ограничение источников загрузки, мониторинг новых публикаций в публичных репозиториях и внедрение защитных механизмов на уровне систем управления зависимостями.