RAG Poisoning

RAG / retrieval poisoning — «отравление» базы знаний внедрением вредоносных документов: отравленные доки в индексе влияют на вывод и действия агента при поиске. Это форма косвенной Prompt Injection через слой retrieval. Особенно опасно самоотравление — когда выход агента пишется обратно в хранилище.

Суть

Атакующему достаточно внедрить малую долю вредных документов (порядка 0.1% индекса), чтобы поменять логику ответов. Когда retriever достаёт чанк, вместе с полезным текстом в контекст модели попадает скрытая инструкция — и агент может её исполнить.

Зачем это нужно

RAG в блокноте рассматривался как способ дать агенту актуальные данные (RAG, Agentic RAG); эта заметка добавляет к нему security-измерение: индекс — это тоже недоверенный вход. Без провенанса источников любой агент с веб-доступом или пользовательской загрузкой документов уязвим.

Как работает

Вектор:

  • Внедрение скрытого текста в документы, которые попадут в индекс (PDF, веб-страницы).
  • Самоотравляющиеся системы — отдельный риск: самообучающиеся агенты с графами знаний ходят в интернет и дописывают свою базу; если выход пишется обратно в хранилище, ошибочный/вредный контент закрепляется.

Защита — провенанс и изоляция:

  • Провенанс источников — вместе с чанком из векторной базы передаются метаданные: кто добавил документ, когда, через какой канал. Агент принимает решения не только по содержимому, но и по происхождению.
  • Trust-метки источников:
    • source: internal_wiki, trust: high
    • source: user_uploaded_pdf, trust: medium
    • source: scraped_web_page, trust: low
    • source: external_email, trust: untrusted
  • Изоляция недоверенного контента — не давать данным из низкодоверенных источников влиять на flow/вызовы инструментов без дополнительной проверки (spotlighting, см. Guardrails).
  • Retrieval filtering (DLP) — фильтровать результаты поиска до попадания в контекст: документ с зарплатами может быть найден, но не должен уйти в промпт (DLP for LLM).

Место риска во внешнем рейтинге

OWASP Top 10 for LLM Applications 2026 — редакция, впервые опирающаяся на статистику реальных инцидентов, — сохраняет отравление данных и моделей в первой пятёрке рисков. Наверху рейтинга не оно: первые места заняли инъекции промпта и раскрытие чувствительной информации, третье — избыточные полномочия агента (Tool Hijacking).

Читать это стоит не как «отравление менее опасно», а как разницу в частоте: инъекцию может провести любой пользователь через входные данные, а отравление базы знаний требует доступа к конвейеру индексации. Ущерб при этом устойчивее — отравленный документ действует до следующей переиндексации и на всех пользователей сразу, тогда как инъекция живёт в пределах одной сессии.

Как искать отравленное уже в индексе

Фильтрация на входе не закрывает вопрос: документ мог попасть до внедрения фильтра или пройти его. Ретроспективный поиск строится на трёх признаках, ни один из которых не требует знать заранее, что искать.

Аномалия в векторном пространстве. Отравленный документ часто затачивается под широкий класс запросов, поэтому оказывается подозрительно близок к необычно большому числу разных запросов. Практически: прогнать эталонный набор запросов по индексу и найти чанки, попадающие в топ-K для семантически несвязанных запросов, — нормальный документ так себя не ведёт.

Тот же скан, что на входе, но по всему индексу. Маркеры инструкций (ignore previous, обращения к системному промпту, скрытый текст) ищутся регулярками и классификатором (Injection Detection) ретроспективно — это дёшево и ловит массовый случай, хотя и не адресную атаку.

Расхождение с источником. Самый надёжный признак и единственный, который ловит подмену содержимого: сверка хеша чанка с текущим состоянием документа-первоисточника. Чанк, который в индексе есть, а в источнике его текста больше нет, — либо устаревший, либо внедрённый.

Отсюда же практика: версия индекса и хеш источника хранятся в метаданных чанка (RAG Observability) — без них ретроспективная сверка невозможна, а восстановить их задним числом нельзя.

Связано с

  • Model Poisoning — отравление на обучении: чинится не удалением документа, а переобучением

  • Embedding Attacks — три соседние механики: инверсия, глушение, вывод о членстве

  • Memory Poisoning — тот же класс атаки, но в доверенном слое памяти, а не во внешнем корпусе

  • Prompt Injection — RAG poisoning = косвенная инъекция через индекс

  • RAG — базовый механизм, к которому добавляется security-слой

  • Guardrails — изоляция недоверенного контента, «документы — это данные»

  • DLP for LLM — retrieval filtering на этапе поиска

  • Agent Security — место в модели угроз