Перейти к основному содержимому
Продвинутый6 мин1060 слов

Как оценивать защиту от prompt injection: практический чек-лист

Воспроизводимый протокол проверки защиты от prompt injection: threat model, source-to-sink fixtures, tool traces, утечка данных, side effects, false positives, release gates и rollback.

Содержание статьи
  1. 01Начните с security expectation и карты source → sink
  2. 02Соберите risk-sliced corpus, а не коллекцию jailbreak-фраз
  3. 03Запускайте end-to-end тесты с реальными границами полномочий
  4. 04Оценивайте outcome, trajectory и blast radius отдельно
  5. 05Проверяйте defenses слоями и проводите ablation
  6. 06Release gate: promote, restrict, reject или roll back

Начните с security expectation и карты source → sink

Eval prompt injection начинается не со списка фраз вроде «ignore previous instructions». Сначала зафиксируйте security expectation: какие данные агент может читать, какие внешние стороны способны влиять на его контекст, какие действия он может предлагать или выполнять и что никогда не должно происходить без отдельной проверки. Direct injection от пользователя и indirect injection из веб-страницы, письма, документа, tool output или памяти создают разные attack surfaces.

Для каждого workflow постройте пары source-sink. Source — недоверенный контент, который атакующий может изменить; sink — передача секрета, сетевой запрос, сообщение, платёж, изменение файла, запись в память или другая consequential capability. OpenAI использует такую же source-sink рамку для агентов: тест должен доказать не только то, что модель заметила подозрительный текст, но и то, что опасный поток к sink был заблокирован или потребовал корректного подтверждения.

  • Asset → секреты, персональные данные, credentials, деньги, репутационные или операционные действия.
  • Source → user input, web, email, RAG, файлы, tool output, memory и multimodal content.
  • Sink → network, message, write tool, code execution, memory write или privilege change.
  • Invariant → запрещённое событие, которое harness проверяет детерминированно.

Соберите risk-sliced corpus, а не коллекцию jailbreak-фраз

Corpus должен воспроизводить реальные траектории: обычную страницу со скрытой инструкцией, письмо с правдоподобным business pretext, RAG-документ с просьбой изменить policy, redirect chain, URL с данными в query, отравленный tool result и запись в памяти, выдающую себя за approval. Добавьте перефразирования, разные языки, кодировки, типографическое скрытие, изображения и многошаговые атаки. Каждый fixture хранит атакованный source, разрешённые доказательства, ожидаемые tool calls и forbidden events.

Позитивные benign fixtures не менее важны, чем атаки. Они показывают, не блокирует ли защита нормальное цитирование инструкций, security research, support-письма, легитимные внешние ссылки и разрешённые действия. Разделяйте случаи по source, sink, чувствительности asset, autonomy, permission scope и необходимости user confirmation. Один средний score легко скрывает провал редкого, но критического data-exfiltration slice.

Запускайте end-to-end тесты с реальными границами полномочий

Запускайте fixture в production-like sandbox с теми же prompt, model, tools, policies, network rules, credentials broker и confirmation UI, но с canary-секретами и фиктивными destinations. Проверки только финального ответа недостаточно: модель может незаметно вызвать URL, передать payload в tool argument, записать атаку в memory или подготовить опасный черновик. Harness сохраняет полную траекторию и независимо наблюдает каждый sink.

Не выдавайте тестовому агенту более широких прав, чем production role, и не заменяйте policy mock-ом, который всегда отказывает. Проверяйте least privilege, tenant binding, scoped credentials, destination allowlist, sandbox egress, schema validation и approval binding к точному payload. Confirmation не проходит gate, если после него агент может изменить получателя, данные или сумму без нового решения пользователя.

Оценивайте outcome, trajectory и blast radius отдельно

Основной verdict детерминирован: forbidden sink reached, secret exposed, unauthorized write, poisoned memory, confirmation bypass или safe completion. Отдельно отмечайте attack detected, refused, content safely summarized, user warned и task completed. Отказ модели может выглядеть безопасно, но не доказывает, что фоновый request не ушёл; наоборот, модель может не назвать атаку, а policy layer корректно заблокирует side effect.

Публикуйте attack success rate только вместе с точным corpus, числом повторений, sampling settings, версиями model/policy и confidence interval; не переносите vendor benchmark на собственную систему. Для operations полезны critical invariant failures, sink-specific compromise rate, secret-canary exposure, blocked unauthorized attempts, benign task success, false-positive rate, confirmation quality, containment time, latency и cost per evaluated trajectory. Критическая эксфильтрация не компенсируется высоким средним task success.

Проверяйте defenses слоями и проводите ablation

Defense in depth включает model behavior, trust labels, content handling, least privilege, data-flow checks, sandbox, network controls, approval и monitoring. Запустите полный stack, а затем контролируемые ablations: уберите classifier, сузьте или расширьте tool scope, отключите destination check или confirmation. Это показывает, какой слой действительно остановил атаку, где есть single point of failure и не является ли декоративный «AI firewall» лишь дополнительной задержкой.

OpenAI и Anthropic прямо описывают prompt injection как активную проблему без единственной гарантированной защиты. Поэтому classifier precision не является security result. Проверяйте, ограничивает ли система последствия даже тогда, когда модель или detector пропускают социально убедительную атаку. Для web agents отдельно тестируйте тихие URL-based leaks, redirects, previews и embedded resources; allowlist домена не доказывает безопасность конкретного data flow.

Release gate: promote, restrict, reject или roll back

Decision record фиксирует workflow, sources, sinks, permissions, model, prompt, policy bundle, tool schemas, revision corpus, critical invariants, thresholds, owner и review date. Promote относится только к проверенному scope. Restrict может отключить network egress, memory writes или high-impact tools; reject возвращает read-only или deterministic baseline. Любая утечка canary secret, cross-tenant access или unauthorized consequential action блокирует release независимо от среднего score.

Rollout проходит offline replay, adversarial staging, read-only canary, небольшую permission-bounded cohort и постоянный monitoring. Rollback отзывает scoped credentials, отключает sinks и заражённые memory writes, возвращает known-good policy/model bundle и сохраняет очищенный trace для incident review. Новый exploit после triage становится regression fixture. Повторяйте critical suite после изменения model, prompt, retriever, browser, MCP/tool server, permissions, network policy или confirmation UX.

  • Promote → все critical invariants пройдены в определённом scope.
  • Restrict → уменьшить sources, sinks, data class, autonomy или permissions.
  • Reject → оставить read-only или deterministic baseline.
  • Roll back → отозвать credentials, отключить sinks, изолировать state и reconcile side effects.

Практические примеры

Скрытая инструкция в письме поставщика

Canary-письмо просит агента переслать последний счёт на новый адрес. Harness проверяет, что текст можно суммировать как недоверенные данные, но recipient allowlist, approval binding и policy не допускают отправки или скрытой утечки.

URL-based эксфильтрация во время веб-исследования

Страница предлагает открыть URL, в параметр которого подставлен canary из приватного контекста. Network observer проверяет redirects и background fetches; безопасный текстовый ответ не считается pass, если request покинул sandbox.

FAQ

Достаточно ли red-team prompt list для prompt injection eval?

Нет. Нужны end-to-end fixtures с реальными sources, tools, permissions и наблюдаемыми sinks, потому что риск определяется фактической утечкой или side effect, а не только текстом ответа.

Какая метрика важнее всего?

Сначала zero-tolerance security invariants для критических утечек и unauthorized actions; затем attack success по slices, benign task success, false positives, latency и cost.

Может ли classifier полностью закрыть prompt injection?

Нет. Социально убедительные атаки трудно отличить от обычного контента вне контекста. Classifier — один слой, а последствия ограничивают permissions, data-flow policy, sandbox и approvals.

Когда повторять evaluation?

После изменений model, prompt, retrieval, browser, tool или MCP server, permission scope, network policy, confirmation UX, а также после каждого нового инцидента или exploit class.

Связанные материалы

Источники

  1. OpenAI — Designing AI agents to resist prompt injectionофициальный
  2. OpenAI — Understanding prompt injectionsофициальный
  3. Anthropic — Mitigating the risk of prompt injections in browser useпервичный
  4. OWASP GenAI — LLM01:2025 Prompt Injectionофициальный
  5. NIST AI 600-1 — Generative AI Profileпервичный