Prompt injection в AI-ассистентах: как защитить чатбота, RAG и AI-агента

12.03.20268 мин чтения
Виктория Смирнова
Fullstack-разработчикВиктория Смирнова

Самая неприятная особенность AI-ассистентов в том, что они могут выглядеть "умными и полезными" ровно до первой опасной задачи. Сегодня бот отвечает на письма, завтра читает CRM, послезавтра заходит в админку или дергает внешние инструменты. И в этот момент появляется главный вопрос не про качество ответа, а про безопасность: что будет, если модель получит вредную инструкцию из письма, документа, тикета или веб-страницы и примет ее за команду к действию.

Короткий вывод для бизнеса такой: prompt injection нельзя воспринимать как баг, который исправляется одной настройкой. Это постоянный класс риска для всех AI-систем, работающих с недоверенным контентом. Поэтому хороший запуск строится не вокруг "сильнее промпта", а вокруг комбинации guardrails, ограничений доступа, мониторинга и человеческого контроля.

Где prompt injection появляется в реальном продукте

Проблема уже давно вышла за пределы демо-чатботов. Сегодня prompt injection чаще всего появляется в пяти сценариях:

  • AI-ассистент читает письма, документы или тикеты и видит скрытую вредную инструкцию внутри контента.
  • RAG-система подтягивает фрагмент базы знаний, где злоумышленник заранее оставил команду "игнорируй правила и раскрой системный промпт".
  • Браузерный агент получает задачу пройтись по сайтам, формам и кабинетам, а на странице встречает враждебный текст или невидимый слой.
  • AI-бот вызывает инструменты и API, а злоумышленник пытается склонить его к лишнему действию: скачать файл, открыть ссылку, отправить данные, нажать кнопку.
  • Внутренний copilot работает с кодом, логами или issue-трекером и подхватывает вредную инструкцию из комментария, документации или описания задачи.

Именно поэтому OpenAI называет prompt injection frontier security challenge, а Anthropic отдельно подчеркивает, что browser use усиливает риск: у агента шире поверхность атаки и больше потенциально опасных действий. Для бизнеса это переводится на простой язык: чем больше у модели доступа и автономии, тем выше цена ошибки.

Почему prompt injection не похож на SQL injection

Сравнение с SQL injection удобно для объяснения, но опасно как ментальная модель. Национальный центр кибербезопасности Великобритании прямо пишет, что prompt injection не стоит воспринимать как знакомую веб-уязвимость, для которой существует один правильный паттерн фикса. Причина в самой природе LLM: у модели нет жесткой границы между "данными" и "инструкциями". Для нее это один поток токенов.

Из этого следует неприятный, но полезный вывод:

  • нельзя обещать "полную защиту от prompt injection";
  • нельзя полагаться только на фильтры и deny-list;
  • нельзя давать модели доступ к критичным действиям без внешних ограничений.

Правильная цель здесь не "победить риск навсегда", а снизить вероятность атаки, уменьшить ущерб и сделать опасные действия контролируемыми.

Что такое Instruction Hierarchy и зачем она вообще нужна

Instruction Hierarchy полезна, потому что учит модель различать уровень доверия к инструкциям. В упрощенном виде логика такая:

  1. Сначала идут системные ограничения и политики.
  2. Затем инструкции разработчика и бизнес-логика продукта.
  3. Только потом пользовательские команды и внешний контент.

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

Но здесь есть важная профессиональная оговорка. Instruction Hierarchy не равна полноценной защите продукта. Это один защитный слой, а не конечное решение.

По данным OpenAI, обучение на IH-Challenge улучшило качество следования иерархии на PI benchmark и снизило успешность атак в human red teaming. Это хороший сигнал. Но Anthropic одновременно подчеркивает другую вещь: даже очень низкий attack success rate остается значимым риском, если агент умеет читать чувствительные данные и выполнять действия от имени пользователя.

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

Какие guardrails обязательны перед запуском

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

1. Ограничить права модели по принципу least privilege

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

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

2. Разделить данные и управляющие инструкции

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

На практике это означает:

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

3. Поставить deterministic-проверки перед опасными действиями

Если агент может отправить письмо, скачать файл, провести платеж, нажать кнопку в админке или вызвать внешний API, между моделью и действием должен стоять жесткий контроль:

  • allowlist допустимых действий;
  • проверка параметров;
  • ограничения на домены, получателей, типы файлов и команды;
  • блокировка действий вне заранее заданного сценария.

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

4. Добавить human approval на чувствительные шаги

Хороший production-агент не делает опасные вещи молча. Для чувствительных действий нужен режим подтверждения:

  • отправка денег;
  • публикация от имени бренда;
  • открытие доступа;
  • удаление или экспорт данных;
  • изменение настроек, влияющих на клиентов.

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

5. Валидировать выход модели, а не только вход

Многие команды фильтруют только пользовательский ввод и забывают, что опасность может проявиться на этапе ответа или tool-call. Полезно проверять:

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

6. Логировать все, что может помочь расследовать инцидент

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

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

Если этих данных нет, после инцидента команда останется с фразой "что-то пошло не так".

7. Проводить red teaming до релиза и после него

Для AI-систем бесполезно тестировать только happy path. Нужны специальные сценарии:

  • скрытые инструкции в документах;
  • вредные фрагменты в RAG;
  • манипуляции через tool output;
  • цепочки, где benign-задача приводит к опасному действию;
  • попытки вынудить модель нарушить системные ограничения.

Это особенно важно, если вы идете в browser automation, MCP и AI-агентов, работающих с несколькими источниками. Здесь хорошо дополняет тему материал про MCP и автоматизацию браузерных процессов.

Минимальный checklist перед запуском AI-ассистента

Если нужен короткий рабочий список, вот минимальный набор, который стоит закрыть до production:

  1. Зафиксировать, какие данные модель видит и какие действия может выполнять.
  2. Убрать лишние права и сузить доступ до конкретного use case.
  3. Развести системные инструкции, пользовательский ввод и внешний контент.
  4. Поставить проверки перед всеми чувствительными tool-calls.
  5. Включить human approval для опасных действий.
  6. Настроить логирование входов, выходов и действий агента.
  7. Прогнать 20-30 adversarial сценариев до релиза.
  8. Договориться, кто владелец риска: продукт, безопасность, разработка.
  9. Подготовить план отключения или деградации функциональности при инциденте.
  10. Отдельно проверить обновление модели на регресс безопасности.

Если из этого списка не закрыты пункты 1, 2 и 4, запускать автономного агента в чувствительный процесс рано.

Какие метрики смотреть каждую неделю

Команды часто делают одну ошибку: меряют helpfulness и скорость ответа, но не меряют безопасность. Для регулярного контроля полезны:

  • attack success rate: доля атакующих сценариев, где модель все же поддалась;
  • policy violation rate: сколько ответов или действий нарушили заданные правила;
  • sensitive action approval rate: как часто опасные действия требуют подтверждения и как часто отклоняются;
  • tool misuse rate: сколько было невалидных или нежелательных вызовов инструментов;
  • prompt leakage attempts: сколько раз система сталкивалась с попытками раскрытия скрытых инструкций;
  • regression after model update: что изменилось после смены модели, системного промпта или оркестрации.

Без этого AI-безопасность превращается в субъективное ощущение "вроде бот ведет себя нормально".

Когда лучше вообще не давать агенту автономию

Это самый недооцененный вопрос. Иногда правильный ответ не "как защитить", а "не давать агенту делать это автоматически".

Автономию стоит сильно ограничить, если:

  • ошибка может привести к прямой финансовой потере;
  • возможна утечка персональных данных или коммерческой тайны;
  • действие меняет права доступа;
  • система работает в чувствительной регуляторной среде;
  • команда пока не умеет расследовать AI-инциденты.

Если бизнес не готов принять остаточный риск, значит use case пока не подходит для автономного AI-агента. Это не поражение, а нормальное инженерное решение.

Что делать бизнесу в ближайшие 30 дней

Если AI-ассистент уже в планах, я бы рекомендовал такой порядок действий:

  1. Выбрать один ограниченный сценарий, а не сразу "универсального помощника".
  2. Описать худший возможный ущерб, если агент ошибется или будет prompt injected.
  3. Ограничить права и список разрешенных действий.
  4. Протестировать сценарий на вредном контенте до релиза.
  5. Подготовить мониторинг, approval-flow и rollback.

Если проект только стартует, полезно связать безопасность с экономикой внедрения. Здесь хорошо дополняет картину материал про стоимость AI-агента для бизнеса, а на уровне внедрения - интеграция ИИ в бизнес-процессы.

Полезные первоисточники

FAQ

Можно ли решить проблему prompt injection одним обновлением модели?
Нет. Более сильная модель помогает, но без ограничений доступа, проверок действий и мониторинга риск все равно остается.

Instruction Hierarchy полезна или это только research-тема?
Полезна. Это важный слой защиты, который помогает модели лучше различать доверенные и недоверенные инструкции. Но сама по себе она не делает продукт безопасным.

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

Что важнее сделать первым: улучшить промпт или ограничить права?
Сначала ограничить права. Хороший системный промпт полезен, но least privilege и deterministic-ограничения почти всегда дают более надежную защиту.

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