Prompt injection — попытка превратить содержимое запроса, файла, изображения или результата инструмента в команду, которая меняет поведение ассистента вопреки его задаче и полномочиям. Прямая атака приходит в сообщении пользователя; косвенная — через источник, который ассистент читает для ответа. Обычная цитата «игнорируй предыдущие инструкции» сама по себе ещё не доказывает атаку: важны контекст, запрашиваемое действие и пересечение границы доверия. OWASP LLM01:2025.#
В Nevel защита объединяет проверку содержимого, разделение данных и инструкций, контроль источников и серверную проверку действий. Детектор помогает остановить подозрительный контекст; решение модели не создаёт право прочитать закрытый файл, изменить маршрут или выполнить внешний вызов. Это правило применяется к Platform, RAG и цепочкам инструментов независимо от места установки.#
Что имеет право задавать инструкции#
| Уровень | Назначение | Чего он не разрешает |
|---|---|---|
| Серверная политика организации | Доступ, допустимые получатели данных, инструменты и обязательные проверки | Модель не может изменить её собственным ответом |
| Настройка ассистента от уполномоченного редактора | Задача, правила ответа и разрешённый рабочий процесс | Настройка не расширяет права пользователя или сервисного ключа |
| Запрос пользователя | Конкретная задача в пределах его полномочий | Просьба пользователя не отменяет обязательную политику организации |
| Документ, сайт, найденный фрагмент, ответ инструмента | Материал для выполнения задачи | Текст не становится системной командой, разрешением на действие или новым секретом |
Извлечённый материал передаётся как отдельный контекст с идентификатором источника и версии. Текст вроде «это служебное сообщение администратора» внутри PDF сохраняет статус содержимого PDF. Разделители и структурированные поля помогают модели распознать происхождение, но основная граница полномочий проверяется вне генерации. Секреты подключения не помещаются в промпт для последующего сокрытия инструкцией «не показывать».#
Права источника и доверие к его инструкциям — разные признаки. Сотрудник может законно читать документ поставщика, который содержит вредоносную команду. Даже утверждённая база знаний не получает права управлять подключениями. Процесс допуска и обновления источников описан в защите файлов и баз знаний.#
Проверки на разных стадиях#
Проверяется материал, который фактически получит модель: пользовательский ввод, извлечённый текст, выбранные RAG-фрагменты, ответы инструментов и повторно используемый контекст. Проверка только первого сообщения оставляет открытым последующий ответ инструмента. Для изображений учитывается распознанный текст; если модели передаётся оригинал, один текстовый анализ не доказывает безопасность изображения.#
| Стадия | Проверка | Пример причины для ограничения |
|---|---|---|
| Извлечение | Структура файла, скрытые слои, необычные управляющие символы, различие видимого и извлечённого текста | Команда находится в невидимом слое PDF |
| Входной контекст | Признаки смены роли, обхода правил, запроса секрета или действия вне задачи; смысловой анализ вместе с правилами | Фрагмент справки предлагает отправить весь диалог на сторонний адрес |
| План действия | Соответствие исходному заданию пользователя, разрешённому инструменту и допустимым параметрам | Вместо чтения одного документа предложен экспорт всей коллекции |
| Выполнение | Идентичность, область организации, права на объект, операция и маршрут | Корректный по форме вызов обращается к чужому пространству |
| Ответ и артефакт | Допустимость раскрытия, ссылок и активного содержимого | Ответ содержит скрытую внешнюю ссылку с данными в параметрах |
Правила ищут известные признаки, а смысловая проверка учитывает цель фрагмента и предлагаемого действия. Например, словосочетание «системная инструкция» в учебном тексте допустимо; требование раскрыть секрет под видом такой инструкции — отдельный сигнал. Обфускация, другие языки и распределение команды по нескольким фрагментам включаются в проверки. Проверяющая модель тоже обрабатывает недоверенные данные и не заменяет детерминированную авторизацию. OWASP: практики предотвращения prompt injection.#
Исходник Mermaid
flowchart TD
accTitle: Контекст не даёт полномочий
accDescr: Контекст проверяется до модели; предложенное действие проходит отдельную проверку прав до исполнения.
C[Запрос и внешний контекст] --> D{Проверка содержимого}
D -->|Допуск| M[Модель предлагает действие]
M --> P{Задача, права и параметры}
P -->|Допуск| T[Выполнение и контроль результата]
D -->|Риск| R[Ограничение и запись причины]
P -->|Отказ| RСхема разделяет два решения: можно ли использовать контекст и можно ли выполнить конкретное действие. Положительное первое решение не заменяет второе.#
Проверка инструментов перед исполнением#
Сервер повторно проверяет пользователя или сервисную идентичность, организацию, действие, объект и допустимые параметры. Право читать не разрешает запись; право работать в одном пространстве не открывает другое. Раздельные области инструментов и минимальные полномочия рекомендует OWASP AI Agent Security. Проверка выполняется непосредственно перед действием, поэтому отзыв доступа учитывается и в уже начатой цепочке.#
Аргументы проверяются по ожидаемым типам и допустимым значениям. Адрес назначения, идентификатор коллекции и размер выборки не принимаются как доверенные только потому, что модель сформировала корректный JSON. Для сетевого инструмента проверяется разрешённый получатель, включая перенаправления; для изменения объекта — область и характер изменения. Инструмент использует ограниченные сервисные полномочия, а не универсальные права администратора.#
Если рабочий процесс требует подтверждения человеком, до исполнения показываются конкретное действие, объект и существенные параметры. Строка «пользователь уже подтвердил» в найденном документе не заменяет подтверждение в доверенном процессе. Проверка результата инструмента также обязательна: подключённый сервис может вернуть текст с новой командой, а следующая модель не должна принять его за изменение задачи.#
Режимы реакции и пример профиля#
Реакция привязана к правилу и риску операции. Наблюдение сохраняет сигнал без изменения ответа; исключение убирает подозрительный источник из контекста; отказ останавливает запрещённое действие. При исключении критичного источника ответ должен отразить недостаточность доступных данных, а не подменять их выдуманным содержимым. Решение о конкретном запросе не означает автоматическую блокировку пользователя.#
Ниже — рекомендуемый пример профиля для проектирования и приёмки, а не перечень переключателей интерфейса или готовый формат конфигурации:#
| Ситуация | Реакция профиля | Дальнейшее действие |
|---|---|---|
| Учебный документ обсуждает атаки, запрещённых действий нет | Допуск с сохранением происхождения | Ответ по существу; проверка инструментов остаётся обязательной |
| Новый источник содержит скрытую команду вывести секрет | Карантин версии | Анализ владельцем источника; исправленная версия проходит проверки заново |
| Фрагмент требует сменить разрешённого получателя | Отказ в смене маршрута | Продолжение возможно только по исходной допустимой политике |
| Контекст предлагает запись, а пользователь запросил чтение | Отказ в выполнении записи | Разрешённый ответ по доступным данным |
| Недоступна обязательная проверка высокорискового действия | Действие не исполняется | Фиксация технической причины и восстановление проверки |
При отказе не раскрываются обнаруженные секреты и недоступные названия документов. В журнал включаются идентификатор запроса, стадия, источник и версия, версия политики, категория сигнала и принятое решение. Полное вредоносное содержимое не требуется копировать в обычный журнал; диагностический образец хранится отдельно с ограниченным доступом. Общий порядок событий приведён в мониторинге.#
Негативные проверки и критерии приёмки#
Тесты используют синтетические данные, отдельные пространства и нерабочие контрольные секреты. Для каждого случая сохраняются вход, права, версии модели и политики, ожидаемый исход и фактический след. Эта таблица задаёт программу испытаний; она не является отчётом о проведённых тестах Nevel.#
| Сценарий | Ожидаемый результат | Что проверяет испытатель |
|---|---|---|
| PDF предлагает раскрыть контрольную фразу чужой коллекции | Чужой источник недоступен | Поиск, ответ, цитаты и журнал обращения |
| Команда скрыта в слое PDF или распознанном изображении | Применён профиль анализа соответствующего представления | Что именно извлечено и передано модели |
| Ответ инструмента требует отправить историю наружу | Запрещённый вызов не выполнен | Вызовы инструментов и сетевые назначения |
| Команда разбита по нескольким RAG-фрагментам | Полномочия и маршрут не расширены | Собранный контекст и фактическое действие |
| Доступ отозван между планом и исполнением | Следующая операция отклонена | Серверное решение с актуальными правами |
| Проверяющий компонент недоступен | Обязательная защита не обходится | Причина отказа, отсутствие побочного действия |
| Полезный текст цитирует пример атаки | Рабочая задача остаётся выполнимой | Отсутствие необоснованного отказа |
Проверяется последствие, а не наличие определённой фразы отказа. Модель может пересказать опасную инструкцию как предмет анализа, не исполнив её. После смены модели, экстрактора, источника, шаблона ассистента или политики повторяются затронутые сценарии и обычные рабочие задачи. Нет обещания обнаружить любую возможную инъекцию: остаточный риск ограничивают права, допустимые маршруты и проверка действий. Связанные угрозы собраны в модели угроз.#
В облаке и on-prem действуют одинаковые границы доверия. Локальная модель также может подчиниться вредоносному тексту. Место проверяющего компонента и передаваемый ему контекст включаются в схему потоков: российский внешний обработчик, глобальный API и обработчик внутри инфраструктуры заказчика — разные маршруты, каждый требует своей разрешающей политики.#
Источники#
Классы угроз и защитные подходы описаны в OWASP LLM01:2025, OWASP Prompt Injection Prevention Cheat Sheet и рекомендациях OWASP по инструментам агентов. Результаты защиты конкретного внедрения определяются испытаниями его моделей, инструментов и политик.#