Урок курса
Что такое Prompt Injection и почему промпт не защищает
LLM Security PRO: Prompt Injection, утечки, tool-abusePrompt 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 не заменяет серверную авторизацию?
Продолжить с проверкой и прогрессом
Откройте интерактивный раннер с заданиями урока.
