
RAG (Retrieval-Augmented Generation) — самый популярный способ «научить» LLM вашим данным: модель во время ответа подтягивает документы из базы знаний. Удобно — и рискованно: именно эти документы становятся каналом атаки. В OWASP Top 10 для LLM это отдельная угроза (LLM08). Разбираем, как ломается RAG и как его защитить.
Как устроен RAG и где слабые места
Конвейер: документ → разбивка на фрагменты (chunks) → эмбеддинги → векторная база → поиск похожих по запросу → подстановка в контекст → ответ. Атаковать можно каждое звено.
1. Косвенная инъекция через документы
Любой документ в базе во время ответа попадает в контекст модели. Скрытая инструкция в нём может выполниться — особенно когда документы загружают сами пользователи (тикеты, резюме, договоры). Исследование ConfusedPilot (2024) показало: достаточно подсунуть в корпоративную базу знаний документ с инструкцией — и RAG-ассистент начинает выдавать всем сотрудникам ложную или вредоносную информацию как «официальную».
2. Утечка чужих документов (нарушение изоляции)
Самый частый и опасный баг RAG. Если фильтр доступа стоит после поиска (или в промпте, или в UI) — пользователь получает фрагменты документов, к которым не имеет прав. В multi-tenant это прямая cross-tenant утечка — по сути IDOR на уровне базы знаний.
# ❌ УЯЗВИМО: ищем по всей базе, фильтруем потом (или в промпте)
chunks = vector_db.search(query, top_k=10) # по ВСЕМ тенантам
# ✅ БЕЗОПАСНО: фильтр доступа встроен в сам запрос к базе
chunks = vector_db.search(query, top_k=10,
filter={"tenant_id": user.tenant_id}) # только свои данные3. Слабости эмбеддингов и векторной базы
Из эмбеддингов можно частично восстановить исходный текст (embedding inversion — активная тема исследований), а отравление базы «авторитетными» фрагментами стабильно смещает ответы модели в нужную атакующему сторону.
Как защитить RAG-систему
- Контроль доступа на уровне данных. Фильтр по правам — внутри векторного поиска, а не после и не в промпте.
- Фильтрация загружаемого контента. Документы — недоверенные: убирайте скрытый текст, невидимые символы, HTML-комментарии на этапе индексации.
- Изоляция арендаторов: отдельные namespace/коллекции; не смешивайте чувствительные данные в общей.
- Защита хранилища: контроль доступа, шифрование, мониторинг аномальных запросов к базе.
- Provenance источников: контролируйте, что и кем попадает в базу, — против отравления.
- Вывод модели — недоверенный (экранирование перед показом/исполнением).
Экспертное наблюдение: почти в каждом втором RAG-проекте изоляция документов держится «на честном слове» — фильтр по тенанту стоит в UI или в промпте, но не в самом векторном поиске. Достаточно чуть переформулировать запрос — и в контекст лезут чужие данные. Это находится в первые часы теста и почти всегда квалифицируется как критичная утечка.
Как мы это тестируем
Главный тест RAG — из одного аккаунта достать чужие документы и провести инъекцию через загруженный файл, доведя до реального влияния на ответы другим пользователям. Это тестирование безопасности RAG-систем; для приложения целиком — пентест ИИ.
Ваш ИИ отвечает на основе корпоративной базы знаний?
Проверим изоляцию документов между пользователями и устойчивость к инъекциям через загружаемый контент (сценарий ConfusedPilot).
Читайте также: Prompt-инъекции, OWASP Top 10 для LLM.