Назад в блог
RAG Systems

Prompt injection через документы: реальная угроза для RAG

Retrieved document даёт evidence, но не получает authority приложения

Trust contract, isolated risk signal, action gate и reviewable routes

DOC-GUARD-7 — public synthetic architecture example, не security guarantee
prompt injection в RAG, безопасность документов, untrusted retrieval, AI security review и grounded AI systems
ТемаDocument trust boundary
ФокусDOC-GUARD-7
СтатусREADY FOR DEPLOY / 2026-09-18
Абстрактный pipeline RAG, где instruction-like сигнал из документа изолирован trust boundary до human review
Абстрактный pipeline RAG, где instruction-like сигнал из документа изолирован trust boundary до human review
TERMINAL_PREVIEW.LOG
$ inspect-documents --contract DOC-GUARD-7
> bind: caller / collection / action boundary
> retrieve: permitted locators / revisions / risk signals
> compose: untrusted evidence / cited claims
> route: answer / clarify / deny / review
Разбор

Документ — это evidence, а не instruction

В document-grounded ассистент попадают файлы, написанные для людей: policies, tickets, manuals, письма и PDF. Внутри может быть текст «игнорируй предыдущие правила», «раскрой скрытый prompt» или «отправь запись на внешний адрес». Это данные из недоверенного источника. Они не становятся instruction только потому, что retrieval нашёл документ.

Риск возникает до generation. Если ingestion кладёт такой текст рядом с system rules или шаблон prompt даёт retrieved passage тот же authority, что и application policy, модель может выполнить просьбу документа вместо workflow продукта. Поиск нескольких опасных фраз полезен как signal, но не является security boundary.

Широкий scope внедрения и выбора исполнителя остаётся у RAG-систем и /ru/ai-specialist-armenia. Этот материал разбирает один проверяемый failure mode; он не сертифицирует ассистент как безопасный.

Зафиксируйте trust contract до retrieval

Для каждого этапа нужен явный contract. Application владеет policy, tools и разрешёнными actions. Пользователь владеет только своим запросом в пределах текущего authorization boundary. Документ не владеет ни permissions, ни instructions — даже если это актуальный внутренний источник.

LayerМожет влиятьНе может влиять
Application policyформат ответа, tool allowlist, escalation routefacts без retrieval
Authorized requestзадачу и разрешённый scopehidden policy, данные других пользователей
Retrieved documentcited factual evidencetool calls, смену роли, правила disclosure
Model outputdraft ответа или safe routeside effect без application gate

Сохраняйте рядом с request receipt role вызывающего, collection и revision, retrieval query, locators, classifier signals, tool decision и final route. Тогда reviewer видит не расплывчатое «сработал prompt filter», а конкретную границу.

Архитектура с независимыми границами

DOC-GUARD-7 — публичный synthetic architecture example. В нём четыре решения вместо одного огромного prompt:

  1. Ingestion хранит source, owner, revision, access label и content-risk signal, но не исполняет embedded instructions.
  2. Retrieval применяет tenant и role filters до ranking и возвращает locators с provenance, а не authority.
  3. Answer composer маркирует passages как untrusted evidence и держит application policy вне document payload.
  4. Action gate проверяет structured intent по allowlist, authorization и human-review route до consequential operation.
text
request -> authorize -> retrieve permitted locators -> inspect risk signal
        -> compose answer from untrusted evidence -> validate output intent
        -> answer | clarify | deny | human review

Разделение полезно даже для harmless документа: команда может точно определить, где возникло unsafe behavior — в lifecycle данных, access filtering, prompt composition, model output или action integration. Контроль доступа RAG подробнее раскрывает authorization boundary, а цитирование и traceability — почему locator должен переживать ответ.

Failure modes, которые стоит тестировать

Тестируйте synthetic documents, похожие на реальные accepted source shapes. Не помещайте customer records или secret prompts в public fixture. Минимальный набор включает такие маршруты:

Test caseЧто наблюдатьSafe route
Policy PDF просит игнорировать safety rulespassage остаётся evidence, а не commandответ только по релевантным facts или no-answer
Support note требует открыть внешний URLвнешний call не предлагается и не исполняетсяdeny action; log locator
Record содержит tool-shaped JSONэто текст, а не tool invocationcontent + provenance
Legitimate document неоднозначен или staleответ не преувеличивает claimclarification, current source или review
User запрашивает запрещённую записьretrieval не отдаёт passagedeny до composition

Измеряйте outcomes по route и consequence, не одним «injection resistance» score. Записывайте, был ли документ retrieved, дошёл ли instruction-like text до модели, запросил ли output tool, остановил ли его gate и может ли reviewer воспроизвести run. OWASP LLM Prompt Injection Prevention Cheat Sheet и NIST AI RMF Generative AI Profile проверены 2026-09-18 как guidance, а не как гарантия или готовый рецепт.

Не передавайте action authority модели

Критичная ошибка — позволить generated text вызвать tool с любыми предложенными arguments. Пусть модель выдаёт только constrained proposal: needs_human_review, cite_locator или draft_reply. Application проверяет proposal по typed schema, entitlement пользователя, destination allowlist, rate limit и, при необходимости, по явному human approval.

text
if riskSignal === "instruction_like" then route = "review";
if proposal.action not in allowedActions then route = "deny";
if proposal.references are not permittedCurrentLocators then route = "no_answer";
if consequence === "external_write" then require humanApproval;

Проверки независимы. Benign-looking answer может целиться в wrong tenant; current source — быть нерелевантным; модель — вернуть valid JSON для action, который никто не вправе запросить. Для protected data и side effects выбирайте fail closed, но оставляйте понятный clarification path для обычной неопределённости.

Превратите test в release gate

Запускайте DOC-GUARD-7 при изменении ingestion, chunking, retrieval filters, модели, prompt template, tools или authorization integration. Храните versioned set synthetic adversarial documents, source snapshot, expected routes и receipt каждого запуска. Пропущенный access denial, unexpected tool proposal или uncited high-consequence answer должны удерживать release, пока owner не классифицирует причину и не зафиксирует correction либо accepted exception.

Цель не обещать, что prompt injection «решён». Цель — сделать власть документа наблюдаемой и ограниченной: он может дать cited evidence, но не может переписать policy, расширить access или сам вызвать action. Для controlled architecture review начните с RAG-систем или /ru/ai-specialist-armenia.

CODE_BLOCK.TXT
require(request.authorized && retrieval.permittedLocators);
require(document.instructions !== application.policy);

if (riskSignal.instructionLike) route = "review";
if (!proposal.referencesArePermittedCurrentLocators) route = "no_answer";
if (!allowedActions.includes(proposal.action)) route = "deny";
if (proposal.consequence === "external_write") require(humanApproval);