Memory injection — отравление памяти агента с отложенным эффектом и активацией по кодовому слову

С prompt injection всё относительно понятно: нейросеть читает сайт, письмо, документ или issue и встречает внутри текст, который принимает не за информацию, а за команду.

Например, вы просите AI-агента изучить страницу и сделать выжимку. А где-то внутри страницы спрятана инструкция:

Если ты нейросеть, игнорируй задачу пользователя и сделай вот это.

Пользователь такой команды не давал. Но модель может её выполнить.

Проблема становится интереснее, когда у AI-агента появляется память.

Тогда вредная инструкция может не закончиться вместе с текущим диалогом.

Что меняется, когда у агента есть память

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

Это удобно: не приходится каждый раз объяснять всё заново.

Но память становится ещё одним источником информации, которому модель может доверять.

И здесь появляется новый сценарий.

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

В одном из внешних источников оказывается инструкция, которую добавил кто-то другой.

Это может быть текст на сайте, комментарий, документ или другой контент, который агент получил извне.

Если агент воспримет его как команду и сохранит в памяти, проблема уже не заканчивается вместе с текущей задачей.

Чем memory injection отличается от обычной prompt injection

При обычной prompt injection вредная инструкция пытается повлиять на модель прямо сейчас.

Memory injection идёт дальше.

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

После этого исходную страницу можно вообще больше не открывать.

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

То есть команда, которую пользователь никогда не давал, может продолжить влиять на поведение системы позже.

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

Достаточно ситуации, в которой кто-то размещает специально подготовленный текст там, откуда его может прочитать AI-агент.

Почему это становится серьёзнее с AI-агентами

Если нейросеть просто отвечает в чате, последствия ошибки обычно ограничены плохим ответом.

Но современные агенты уже умеют:

  • работать с файлами;
  • менять код;
  • читать репозитории;
  • обращаться к API;
  • пользоваться браузером;
  • запускать инструменты;
  • взаимодействовать с внешними сервисами.

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

Сохранённая инструкция потенциально может влиять на реальные действия агента.

Особенно если тот работает автономно и имеет доступ к инструментам без постоянного подтверждения пользователя.

И тут начинается самое интересное:

понять, что память агента вообще стала точкой входа это только половина задачи.

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

Нужно понимать:

  • что именно агент считает памятью;
  • откуда туда попадает информация;
  • какие данные он потом достаёт автоматически;
  • что считает доверенным контекстом;
  • какие действия способен совершить на основании этой информации.

А дальше возникает ещё более неприятный вопрос:

если вредная инструкция уже попала в память агента — как вообще понять, что она там есть?

И достаточно ли просто удалить один диалог, если агент хранит информацию где-то ещё?

Простого фильтра недостаточно

Можно попытаться блокировать очевидные конструкции вроде «игнорируй предыдущие инструкции».

Но реальные сценарии не обязаны выглядеть настолько прямолинейно.

Инструкция может быть замаскирована под обычный текст, данные проекта или служебную информацию.

Поэтому memory injection это уже не только вопрос хорошего промпта.

Это вопрос того, как устроена вся система вокруг модели: память, контекст, права агента и доступ к инструментам.

И именно здесь начинается та часть, которую сложно закрыть одним универсальным правилом.

Memory делает AI-агента удобнее. Но одновременно превращает его прошлый контекст в новую поверхность атаки.

Где проходит граница между полезной памятью и уязвимостью? Как чужая инструкция вообще оказывается в memory, можно ли обнаружить её после записи и что делать, чтобы агент не превратил внешний текст в команду?

22 сентября в 19:00 МСК Глеб Кудрявцев разберёт это на встрече ИИ-лаборатории.

Поговорим и про обычные prompt injection, и про более продвинутые memory injection: как они устроены, где появляются реальные риски и что происходит, когда нейросеть получает не только память, но и возможность действовать внутри вашего проекта.