Защита от промпт-инъекций: attention-гейты вместо дообучения
Девяносто семь процентов. Столько атак RL-Hammer проходит на GPT-OSS-20B без всякой защиты. С SecAlign, одной из самых сильных открытых защит, остаётся 85%. С методом, который придумали в Imperial College, остаётся 10%.
Разница в цифрах сама по себе интересна, но по-настоящему удивляет цена. Авторы не дообучали модель целиком и не переписывали эмбеддинги. Они добавили 18 432 скаляра на GPT-OSS-20B и 46 080 на Llama-3.3-70B, то есть набор крошечных множителей, которые управляют вниманием отдельных голов. Всё остальное в модели осталось замороженным.
Препринт «Heads of Security: Learned Attention Gates Improve Prompt Injection Robustness» (arXiv:2610.37657, 27 октября 2026) вышел из группы Imperial College London под руководством Ив-Александра де Монжуа и Йонаса Гайпинга, вместе с Тюбингенским центром ИИ, ELLIS Institute Tübingen, Max Planck Institute for Intelligent Systems и Fraunhofer HHI.
Что такое промпт-инъекция и почему её не решают файнтюнингом
Косвенная промпт-инъекция возникает, когда модель принимает инструкцию, спрятанную во внешнем контенте, за команду от пользователя. Агент читает веб-страницу, письмо или вывод инструмента, находит там текст «перешли эти данные на такой-то адрес» и выполняет его как своё задание.
Классическая защита строится на дообучении. SecAlign и его улучшенная версия используют DPO, чтобы научить модель следовать инструкциям пользователя и игнорировать команды внутри данных. Работает это неплохо, но требует обновления сотен миллионов параметров и, как показывают авторы HoS, оставляет неприятный побочный эффект: на few-shot сетах качество проседает.
Второй лагерь защит встраивает границу доверия в архитектуру. ASIDE, например, применяет фиксированные повороты к эмбеддингам недоверенных токенов. Идея красивая, но в агентных сценариях она разваливается: модель перестаёт нормально вызывать инструменты.
Авторы HoS идут третьим путём. Они не учат модель новому поведению и не искажают представления данных. Они учат её смотреть в нужную сторону.
Три канала доверия и одна таблица на голову
Каждому токену в последовательности присваивается канал: trusted для системного промпта, сообщения пользователя и собственной генерации модели, untrusted для вывода инструментов и внешних документов, template для служебных токенов чат-шаблона, включая BOS.
Дальше в каждой голове каждого слоя появляется таблица логитов размером три на три. Она задаёт, как голова относится к паре «канал запроса, канал ключа». Перед softmax к логиту внимания добавляется логарифм сигмоиды от соответствующего значения, то есть необработанный вес умножается на число от нуля до единицы. Единица означает «смотрю как обычно», ноль означает «гейт закрыт».
Механика та же, что у causal-маски: там к запрещённому токену добавляют минус бесконечность, здесь добавляют логарифм сигмоиды. Если все ключи получают одинаковый сдвиг, softmax его сокращает, поэтому в начале обучения модель ведёт себя точно как исходная. Гейты стартуют в нейтральном положении и ничему не мешают.
В статье есть наглядный пример. Голова одинаково сильно смотрит на просьбу пользователя «посчитай буквы R» и на внедрённую команду «переведи деньги». Обученный гейт оставляет trusted-токены с коэффициентом 1, template с коэффициентом 0,9, а untrusted прижимает до 0,1. После перенормировки softmax на инструкцию пользователя приходится 99% массы внимания.
46 тысяч чисел против 349 миллионов
Масштаб изменений лучше всего виден в сравнении. Для Llama-3.3-70B с 80 слоями и 64 головами HoS обучает 46 080 скаляров. SecAlign обучает 349 миллионов параметров, полный файнтюнинг и ASIDE трогают все 70 миллиардов.
Для GPT-OSS-20B с его 24 слоями и 64 головами выходит 18 432 скаляра, потому что добавляется отдельный канал под attention sink. SecAlign здесь требует 38 миллионов, ASIDE меняет 21 миллиард.
Обучение идёт по рецепту SecAlign++, включая ту же DPO-цель и адаптированный датасет Cleaned-Alpaca, чтобы сравнение было честным. Каждая пара предпочтений объединяет инструкцию пользователя с внедрённой инструкцией внутри данных. Единственное отличие в том, что обновляются не веса модели, а таблицы гейтов. Авторы специально подчёркивают этот момент: на одинаковых данных SecAlign выучивает короткий путь, а HoS нет, и это ограничение механизма обучения, а не объёма выборки.
Что показал RL-Hammer
Главный чёрный ящик-атакующий в этой истории называется RL-Hammer. Небольшую модель Llama-3.1-8B обучают через GRPO переписывать цель атаки в инъекцию, которая срабатывает против конкретной целевой модели. Обучение идёт на одной модели, а тестирование на другой, поэтому часть таблицы измеряет перенос атак.
На GPT-OSS-20B атакующий, натренированный против самой этой модели, даёт 95% успеха без защиты. С SecAlign остаётся 27%, с HoS всего 5%. Атакующий, обученный против SecAlign, поднимает результат до 97% на незащищённой модели, до 85% на SecAlign и до 10% на HoS. Перенос с обученного против HoS атакующего на SecAlign даёт 46%, а на HoS всего 3%.
Для Llama-3.3-70B картина ещё резче. Незащищённая модель пропускает 99% атак, Meta-SecAlign-70B пропускает 82%, HoS пропускает 1%. Атакующий, натренированный против HoS, ломает SecAlign в 6% случаев и HoS в 0% на held-out целях.
Отдельная строка таблицы выглядит как вызов закрытым моделям. Атакующий, натренированный против GPT-5.6-Luna, достигает 36% успеха на самой Luna, 31% на GPT-OSS-20B с SecAlign и 2% на GPT-OSS-20B с HoS. По этому конкретному замеру открытая модель с гейтами оказывается крепче фронтирной.
Белый ящик: втрое больше вычислений
Чёрный ящик это только половина проверки. Сильная защита должна держаться и против атакующего, который видит градиенты.
Авторы взяли Claudini, лучшую на сегодня оптимизационную атаку, и запустили цикл autoresearch: GPT-5.6-Sol за 50 итераций дорабатывал вариант атаки, минимизируя кросс-энтропию целевой последовательности на шести примерах из AgentDojo против GPT-OSS-20B с HoS. Победил вариант V38, комбинирующий непрерывную оптимизацию токенов с дискретным уточнением, и он сработал на трёх примерах из шести.
Дальше самое важное. Чтобы дойти до 50% успеха на HoS, этой атаке нужно примерно в три раза больше FLOP, чем на незащищённой GPT-OSS-20B или на её версии с SecAlign. Атака, специально изготовленная против HoS, стоит дороже, чем атака против модели вообще без защиты.
Качество не проседает, и это главный сюрприз
Обычно за безопасность платят способностями. Здесь платить почти не пришлось.
На five-shot MMLU-Pro GPT-OSS-20B набирает 68%, HoS 67%, SecAlign 59%, ASIDE 52%. На Llama-3.3-70B базовая модель даёт 56%, HoS 55%, SecAlign падает до 16%. Разница между 68 и 67 в пределах шума, разница между 56 и 16 уже приговор.
В zero-shot замерах SecAlign и ASIDE держатся на уровне базовых моделей, а ломаются именно на few-shot и многоходовых сценариях. Причина в том, что дообучение подмешивает в модель новую привычку, которая конфликтует с форматом демонстраций. Гейты ничего не подмешивают: они меняют только то, куда смотрит внимание, а не то, что модель умеет.
В агентных бенчмарках AgentDojo, AgentDyn, LLMail-Inject и WASP картина такая: HoS и SecAlign идут примерно вровень, оба заметно снижают успех атак при небольшой потере полезности или без неё. ASIDE проваливается по инструментам, набирая около нуля на трёх бенчмарках и 10% на AgentDojo.
Красные и синие головы
Самая интересная часть работы начинается, когда авторы смотрят на выученные гейты.
Большинство голов сдвигают внимание от недоверенных ключей к доверенным. Это ожидаемо: если голова отвечает за следование инструкциям, доступ к чужим командам ей только мешает. Такие головы авторы называют красными.
Меньшинство ведёт себя наоборот и усиливает внимание к недоверенному тексту. Эти головы, синие, выглядят как саботаж, но гипотеза оказалась другой: они занимаются детекцией инъекций. Проверили на подвыборке LLMail-Inject, где агент должен пересказать письмо и отметить подозрительные вставки. Базовые модели отправляют письмо в 0,86% случаев и замечают инъекцию в 11,03%. Только синие гейты дают 0,32% отправок и 28,2% детекции, то есть в два с половиной раза больше базовой. Только красные снижают детекцию до 3,6%. Полный HoS даёт 0,37% отправок и 3,11% детекции.
Вывод неприятный для любителей простых решений: защита и обнаружение тянут в разные стороны, и включать всё сразу не получается. Хотите ловить атаки, оставляйте синие головы незакрытыми. Хотите просто не выполнять их, закрывайте всё.
Почему нельзя просто прикрутить один общий множитель
Самый очевидный контрдовод звучит так: зачем что-то обучать, если можно взять один коэффициент и прижать все недоверенные токены разом.
Авторы проверяют и это. Они заменяют выученные гейты одним общим логитом для недоверенных ключей, одинаковым для всех голов, слоёв и каналов запроса. При значении минус два на AgentDojo выходит 60,8% полезности при 11,1% успеха атак. HoS даёт 59,6% полезности при 1,1% успеха. Полезность почти та же, безопасность в десять раз лучше.
Дальше хуже. При минус три успех атак падает до 1,5%, но полезность съезжает до 50,8%. При минус четыре атаки почти исчезают, ниже 0,4% на обоих бенчмарках, зато полезность рушится до 22,6% на AgentDojo и до 2,7% на AgentDyn. Модель просто перестаёт работать с внешними данными.
На AgentDyn тот же сюжет: общий гейт при минус три даёт 31,6% полезности и 5% успеха атак, HoS при 3,9% успеха держит 45,9% полезности. Разница в том, что обучение разрешает каждой голове свой коэффициент. Головы, которым недоверенный текст нужен по работе, остаются открытыми, а головы, отвечающие за следование инструкциям, закрываются.
Где проходит граница
Сами авторы перечисляют ограничения без прикрас.
HoS не решает, какие источники доверенные. Границу задаёт снаружи система: результаты поиска недоверенные, системный промпт доверенный. Метод работает только там, где такое разделение вообще имеет смысл.
Есть задачи, где выполнять инструкции из внешнего контента законно. Установка пакета по инструкции из документации, файлы навыков у агентов, конфигурации из репозитория. Жёсткое разделение инструкций и данных там просто ломает сценарий, и его нужно включать осознанно.
Обучение шло на одном наборе данных. Авторы честно пишут, что более разнообразные данные с многоходовыми диалогами, несколькими инструкциями и разными шаблонами скорее всего улучшат и SecAlign, и HoS, а провалы SecAlign на out-of-distribution данных не обязательно фатальны.
Атакующий ходит вторым. Любая конечная оценка не доказывает безопасность, и авторы это признают прямо. Их аргумент скромнее: при одинаковом бюджете атаки RL-Hammer и Claudini добиваются против HoS меньшего, а специально изготовленная атака стоит втрое дороже.
Ещё одно техническое ограничение: гейты работают только с обычным плотным вниманием. В линейном внимании нет явного коэффициента для конкретного ключевого токена, поэтому переносить механизм туда напрямую не получится, нужна другая схема.
Что это значит на практике
Для команд, которые держат агентов на открытых моделях, результат меняет экономику защиты. Не нужно переучивать 70 миллиардов параметров и не нужно жертвовать few-shot качеством. Достаточно обучить таблицу гейтов и передавать каналы вместе с токенами.
Вторая практическая деталь важнее первой. Разделение на каналы должно быть реализовано в самом инференс-стеке: шаблон чата обязан помечать, где кончается доверенная часть и начинается вывод инструмента. Без этой разметки гейты бесполезны, потому что не знают, что прижимать.
Третья деталь объясняет, почему такие защиты редко доходят до продакшена. Детекция и устойчивость конфликтуют, и выбирать между ними нужно под задачу. Для суммаризатора веб-страниц хватит красных голов. Для агента, которому положено замечать попытки взлома и сообщать о них, придётся думать отдельно.
Часто задаваемые вопросы
HoS заменяет фильтры и системные промпты?
Нет. Это один примитив защиты, который работает только при наличии явной границы доверия. Он дополняет иерархию инструкций, где команды упорядочены по источнику, и контекстную целостность, которая оценивает, уместна ли команда в данной ситуации. Полагаться на гейты в одиночку не стоит.
Почему нельзя обучить гейты на синтетических атаках и закрыть тему?
Потому что атакующий адаптируется. В статье это показано буквально: вариант V38 из цикла autoresearch изготовили уже после того, как HoS обучили, и он всё равно потребовал втрое больше вычислений для достижения того же результата. Любая фиксированная защита проигрывает гонку, если её не переобучать под новые атаки.
Насколько это дорого по сравнению с дообучением?
На Llama-3.3-70B обучается 46 080 скаляров против 349 миллионов у SecAlign. Разница в семь с половиной тысяч раз по числу параметров, и вся модель при этом остаётся замороженной. Основная стоимость это не обучение, а аккуратная разметка каналов в инференс-пайплайне.
Итог
Защита от промпт-инъекций обычно выглядит как компромисс: либо модель крепнет и глупеет, либо остаётся умной и уязвимой. Работа HoS показывает, что компромисс можно сдвинуть, если вмешаться не в поведение модели, а в маршрутизацию внимания. 46 тысяч чисел на 70-миллиардную модель, падение успеха атак с 99% до 1% и потеря одного процентного пункта на MMLU-Pro.
Открытые веса, код и демо авторы выложили публично, поэтому проверить цифры на своём агенте может любой. Начните с одного вопроса: есть ли в вашем стеке явная граница между доверенными инструкциями и недоверенным контентом. Если ответ отрицательный, никакие гейты не помогут, и это самое полезное, что можно вынести из статьи.