Большие языковые модели (LLM) всё чаще применяются для генерации кода, что вызывает опасения, что их могут использовать для создания вредоносного кода. При этом декодирование с грамматическими ограничениями (GCD, Grammar-Constrained Decoding) широко применяется для повышения надёжности генерируемого LLM-кода за счёт обеспечения синтаксической корректности. В этой работе авторы выявляют контринтуитивный риск: эта ориентированная на надёжность техника сама может стать поверхностью атаки.
Авторы обнаруживают новую джейлбрейк-атаку, названную CodeSpear, которая эксплуатирует GCD, чтобы вынудить LLM генерировать вредоносный код. Эксперименты показывают, что простое применение безобидного грамматического ограничения на код способно эффективно «взломать» (jailbreak) LLM.
Чтобы устранить эту уязвимость, авторы предлагают CodeShield - подход к выравниванию безопасности, который устойчиво сохраняет безопасное поведение даже при контролируемых атакующим грамматических ограничениях. Подход настраивает модель так, чтобы она генерировала «honeypot»-код под GCD: такой код семантически безвреден (не реализует вредоносный запрос) и структурно разнообразен (его трудно подавить ужесточением грамматики). При этом модель сохраняет полезность на безобидных задачах, когда естественный язык доступен. Эксперименты на 10 популярных LLM и 4 бенчмарках показывают, что CodeSpear превосходит репрезентативные джейлбрейк-базлайны и повышает успешность атаки в среднем более чем на 30 процентных пунктов. CodeShield же восстанавливает безопасность под CodeSpear, сохраняя полезность на безобидных задачах. Выводы вскрывают фундаментальный риск GCD и призывают уделять больше внимания его возможным последствиям для безопасности.
Даже техника, придуманная для надёжности генерации, может стать поверхностью атаки.Grammar-constrained decoding выглядит безопасно, потому что заставляет модель писать синтаксически валидный код, но статья показывает: валидный синтаксис не равен безопасному поведению. Поэтому важно проверять результат в JetBrains IDE: запускать, анализировать, смотреть зависимости и эффекты кода, а не верить красивой форме ответа.
Перевод подготовлен технической командой Veai на основе arXiv:2606.11817. Первоисточник (англ.): arxiv.org/abs/2606.11817.