Урок курса

Что такое Prompt Injection и почему промпт не защищает

LLM Security PRO: Prompt Injection, утечки, tool-abuse

Prompt injection — атака, при которой недоверенный текст пытается изменить поведение LLM-приложения. Пользователь может написать «игнорируй предыдущие инструкции», спрятать команду в длинном тексте или заставить агента вызвать инструмент не по назначению.

Почему это не обычная SQL-инъекция

SQL-параметры можно отделить от кода строгим синтаксисом. Для LLM системные инструкции, пользовательский запрос и содержимое документа в итоге представлены токенами в одном контексте. Роли сообщений помогают модели расставлять приоритеты, но не создают непроницаемую границу безопасности.

Direct prompt injection приходит непосредственно от пользователя. Indirect injection находится во внешнем источнике: веб-странице, PDF, email или документе, который агент прочитал через RAG. Модель может принять найденную инструкцию за часть задачи.

Поэтому фраза в system prompt «никогда не раскрывай секрет» не является контролем доступа. Секрет вообще не должен попадать в контекст, если он не нужен для ответа.

Какие меры действительно помогают

Защита строится вокруг модели:

  • минимальные полномочия для каждого tool;
  • allowlist операций и серверная проверка аргументов;
  • авторизация по реальному пользователю внутри backend;
  • подтверждение действий с побочным эффектом;
  • отделение данных от инструкций в формате и prompt;
  • фильтрация и маркировка внешнего контента;
  • ограничение числа шагов, времени и бюджета;
  • журналирование tool calls и тесты атак.

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

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

Модель угроз для LLM-приложения

Сначала перечислите активы: персональные данные, API-ключи, закрытые документы, деньги и возможность изменять системы. Затем источники недоверенного ввода и доступные инструменты. Опасность определяется не красотой jailbreak, а тем, может ли результат привести к реальному ущербу.

Полезные тесты:

  • запрос раскрыть system prompt или скрытые данные;
  • инструкция в загруженном документе;
  • подмена параметров tool call;
  • повтор опасной операции;
  • попытка получить документ другого tenant;
  • длинный ввод, вытесняющий ограничения из контекста.

Приложение должно безопасно отказать, не выполнить действие и оставить понятный audit trail. Даже если модель сгенерировала запрещённый вызов, серверный слой обязан его отклонить.

Главный принцип: LLM предлагает текст и действия, но доверенная система решает, какие данные ей показать и что разрешено выполнить.

Попробуйте решить

Почему запрет в system prompt не заменяет серверную авторизацию?

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку