Пять документов ломают ваш RAG: где реальная уязвимость и что с ней делать

Пять документов ломают ваш RAG: где реальная уязвимость и что с ней делать

У RAG-систем есть фундаментальный парадокс доверия: пользовательские запросы считаются недоверенным вводом, а извлечённый из базы знаний контекст — доверенным, хотя и то, и другое попадает в один и тот же промпт.

Парадокс доверия в RAG

Если вы уже развернули систему генерации с дополнением из поиска (Retrieval-Augmented Generation, RAG), ваша команда безопасности, скорее всего, сосредоточилась на очевидном векторе атаки — вредоносных пользовательских запросах. Вы добавили проверку ввода, внедрили фильтры и, возможно, даже развернули классификатор промпт-инъекций. Дверь со стороны пользователя заперта.

Но есть и вторая граница доверия — и её часто оставляют без защиты.

RAG работает так: система извлекает релевантные документы из базы знаний и добавляет их в контекст большой языковой модели вместе с запросом. При этом возникает неявное разделение по уровню доверия: пользовательский ввод — недоверенный, а извлечённый контент — доверенный. В конце концов, он ведь из вашей собственной базы.

Именно это допущение становится архитектурной уязвимостью. Злоумышленник, способный повлиять на корпус документов — через загрузку, интеграции или скомпрометированные конвейеры — может внедрить вредоносные инструкции. Они обойдут все защитные механизмы, потому что попадают не через парадную дверь, а через доверенный корпус.

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

Математика атаки: пять документов среди миллионов

Согласно исследованию PoisonedRAG (Zou et al.), опубликованному на USENIX Security 2025, всего пять тщательно подготовленных документов могут манипулировать ответами ИИ с успешностью более 90%, даже в базе из миллионов документов.

Атака точечная и работает при двух условиях:

  • вредоносный документ должен быть семантически близок к целевому запросу, чтобы его стабильно извлекали;
  • попав в контекст, он должен направить модель к нужному ответу.

Когда оба условия выполняются, небольшая группа отравленных документов становится достаточно эффективной для манипуляции ценными запросами. Исследователи также показали, что существующие защитные меры часто не справляются — возможно, потребуются архитектурные изменения.

Векторные базы данных: созданы для скорости, а не для безопасности

В обновлённой версии OWASP Top 10 for LLM Applications за 2025 год появился новый пункт — LLM08:2025 Vector and Embedding Weaknesses. Он признаёт, что векторные базы данных и конвейеры построения эмбеддингов создают собственный класс уязвимостей.

Эмбеддинги — это многомерные числовые векторы, отражающие семантический смысл. Похожие документы группируются рядом в векторном пространстве. Именно это позволяет работать поиску по сходству. Но векторные базы проектировались для скорости и масштабируемости, а не для защиты от злоумышленников, которые активно пытаются влиять на результаты поиска.

Обратное восстановление эмбеддингов: ваши векторы раскрывают больше, чем кажется

Организации часто считают, что из эмбеддингов нельзя восстановить исходный текст. Это заблуждение.

Если злоумышленник получит доступ к векторам — через взлом, инсайдера или незащищенный API — он может обучить вспомогательную модель-декодер, которая восстановит значительную часть исходного текста.

Исследование, представленное на ACL 2024 (Huang et al.), показало, что такие атаки работают даже без доступа к исходной модели эмбеддингов. Уровень восстановления — 50–70% исходных слов. Имена, термины и уникальные фразы особенно уязвимы, так как занимают характерные области векторного пространства.

Для RAG-систем, работающих с конфиденциальными данными, это означает: при компрометации векторная база становится источником утечки. Даже если исходные документы защищены, эмбеддинги могут раскрыть чувствительную информацию — имена, номера счетов, коммерческую тайну.

Ошибки изоляции в многопользовательской среде

В системах, где несколько пользователей используют одну векторную базу, возможна утечка между контекстами. Если контроль доступа реализован некорректно, запрос одного пользователя может извлечь документы другого.

Например, в финансовой SaaS-платформе пользователь компании A может получить доступ к финансовым данным компании B, если векторы не изолированы по клиенту. Запрос не был вредоносным — вредоносной оказалась архитектура.

Традиционные механизмы контроля доступа плохо подходят для векторного поиска: запрос не обращается к конкретным документам, а ищет похожие. Хотя некоторые базы поддерживают фильтрацию по метаданным, на практике это часто реализуется на уровне приложения, а не на уровне базы.

Командам приходится либо разделять индексы по клиентам (с ростом затрат), либо строго контролировать каждый запрос фильтрами доступа. Оба подхода сложны в поддержке.

Когда теория встречается с продакшеном

Это не гипотетические угрозы. Реальные инциденты уже происходили.

Slack AI: непрямая промпт-инъекция через публичные каналы

В августе 2024 года исследователи обнаружили уязвимость в Slack AI. Злоумышленник публиковал в публичном канале сообщение с вредоносными инструкциями. Когда ИИ извлекал его как контекст, модель генерировала фишинговые ссылки, ведущие к утечке данных.

Slack признал проблему 20 августа и в тот же день выпустил патч. Атакующему требовалась учётная запись в том же рабочем пространстве, а поведение было проектным решением, а не ошибкой. Но паттерн ясен: как только ИИ воспринимает вредоносный контекст как доверенный, промпт-инъекция становится усилителем утечки.

Память ChatGPT: устойчивое шпионское ПО через отравленный контекст

В сентябре 2024 года исследователь Йоханн Ребергер продемонстрировал технику SpAIware. Обманом заставив пользователя проанализировать вредоносный документ, злоумышленник внедрял инструкции в память ChatGPT. Они сохранялись между сессиями и заставляли ИИ отправлять все последующие разговоры на сервер атакующего.

Эшелонированная защита для RAG-систем

Защита RAG требует контроля на трёх уровнях: загрузка данных, извлечение и генерация. Сбой на одном уровне не должен вести к полной компрометации.

Контроль на этапе загрузки данных: относитесь к документам как к коду

База знаний — теперь часть поверхности атаки. Каждый документ нужно проверять так же тщательно, как пользовательский ввод.

  • Проверка происхождения: данные принимаются только из доверенных источников. Ведите журнал аудита — что, когда и откуда попало в базу.
  • Предварительная обработка: сканируйте документы на паттерны промпт-инъекций — например, «игнорируй предыдущие инструкции». Используйте инструменты вроде PromptGuard от Meta.
  • Мониторинг целостности: регулярно аудируйте базу знаний. Реализуйте неизменяемое журналирование изменений.
  • Шифрование эмбеддингов: рассматривайте векторы как чувствительные данные. Шифруйте их при хранении и передаче.

Контроль на этапе извлечения: поиск с учётом прав доступа

  • Извлечение с учётом прав доступа: фильтруйте документы на основе пользовательских прав. Передавайте идентичность пользователя в процесс поиска.
  • Изоляция клиентов: в многопользовательских системах строго разделяйте данные. Не допускайте пересечения контекстов через поиск по сходству.
  • Обнаружение аномалий: отслеживайте необычные паттерны извлечения — например, документы, которые часто возвращаются для узкого круга запросов.
  • Аутентификация и аудит: каждый запрос к векторной базе должен быть аутентифицирован и записан. Ограничьте частоту запросов, чтобы предотвратить массовую выгрузку эмбеддингов.

Контроль на этапе генерации: защитные ограничения и мониторинг

Даже при защите на предыдущих этапах часть вредоносного контента может дойти до генерации.

  • Обнаружение инъекций в контексте: сканируйте собранный промпт перед отправкой в LLM. Используйте классификаторы, чтобы поймать инструкции, которые становятся очевидными только в комбинации с другими документами.
  • Мониторинг вывода: проверяйте ответы на наличие подозрительных элементов — внешних URL, запросов паролей, base64-строк. Блокируйте попытки эксфильтрации данных.
  • Атрибуция извлечения: сохраняйте информацию о том, какие документы повлияли на ответ. Это позволяет быстро находить и изолировать отравленные источники.

Парадокс доверия в RAG-системах создаёт пути атак, которые обходят традиционную проверку ввода. База знаний больше не является доверенным внутренним ресурсом — она стала частью поверхности атаки.

  • Отравление корпуса удивительно эффективно. Пять документов среди миллионов могут обеспечить успешность атаки выше 90%.
  • Векторные базы данных привносят собственные уязвимости. Атаки обратного восстановления эмбеддингов позволяют восстанавливать значительные фрагменты исходного текста.
  • Продакшен-системы уже сталкивались с такими проблемами. Инциденты в Slack AI и ChatGPT показывают, что эти паттерны атак — не теория.
  • Защита требует трёх уровней: контроль на этапе загрузки, извлечения и генерации. Каждый слой должен работать независимо.
Читать оригинал