Bảo mật RAG: Hướng dẫn đầy đủ
Securing Retrieval-Augmented Generation systems against document poisoning, retrieval manipulation, and embedding attacks
Updated: August 2026 • Một phần của OWASP LLM08
RAG là gì?
Retrieval-Augmented Generation (RAG) is an AI architecture that combines large language models with external knowledge retrieval. Enterprise LLM deployments now use RAG extensively, making its security critical.
1. Truy vấn của người dùng
Người dùng gửi câu hỏi hoặc lời nhắc đến hệ thống
2. Nhúng
Truy vấn được chuyển đổi sang dạng nhúng vectơ
3. Truy xuất
Các tài liệu tương tự được lấy từ vector DB
4. Tăng cường
Ngữ cảnh được truy xuất được thêm vào lời nhắc
5. Thế hệ
LLM tạo phản hồi bằng cách sử dụng ngữ cảnh
Nghịch lý tin cậy
RAG systems have a fundamental security flaw: user queries are treated as untrusted input, but retrieved context is implicitly trusted - even though both enter the same prompt. This creates a significant attack surface that traditional security doesn't address.
Vectơ tấn công
1. Ngộ độc tài liệu
Đưa nội dung độc hại vào các tài liệu được lưu trữ trong kiến thức cơ sở.
Cách hoạt động
- Kẻ tấn công tải lên hoặc tiêm các tài liệu độc hại
- Tài liệu được nhúng và lưu trữ trong vector DB
- Khi truy vấn có liên quan, tài liệu bị nhiễm độc sẽ được truy xuất
- LLM kết hợp bối cảnh độc hại vào phản hồi
Tác động
- 90% success chỉ với 5 tài liệu bị nhiễm độc
- Hoạt động ngay cả trong cơ sở dữ liệu với hàng triệu tài liệu
- Có thể gây ra kết quả đầu ra có hại, sai lệch hoặc không chính xác
- Khó phát hiện sau khi triển khai
2. Thao tác truy xuất
Thao tác những tài liệu nào được truy xuất để tác động đến kết quả đầu ra.
Cách hoạt động
- Kẻ tấn công tạo ra các truy vấn để kích hoạt truy xuất cụ thể
- Khai thác điểm yếu của thuật toán xếp hạng
- Sử dụng sự tương đồng về ngữ nghĩa để chiếm quyền truy xuất
- Thao tác của nhiều người dùng trong các hệ thống dùng chung
Tác động
- Buộc truy xuất nội dung do kẻ tấn công kiểm soát
- Có thể ngăn chặn nội dung hợp pháp
- Cho phép thao tác có chủ đích
- Phá vỡ niềm tin vào chất lượng truy xuất
3. Nhúng Đảo ngược
Khôi phục dữ liệu gốc từ vectơ nhúng.
Cách hoạt động
- Kẻ tấn công có quyền truy cập vào cơ sở dữ liệu vectơ
- Sử dụng kỹ thuật đảo ngược trên các phần nhúng
- Tái tạo văn bản gốc từ vectơ
- Khôi phục dữ liệu nhúng nhạy cảm
Tác động
- Recover 50-70% of input words
- Lộ dữ liệu nhạy cảm trong phần nhúng
- Vi phạm quyền riêng tư
- Các vấn đề về tuân thủ (GDPR, v.v.)
4. Các cuộc tấn công giữa nhiều người thuê
Khai thác cơ sở hạ tầng RAG dùng chung trong hệ thống nhiều người thuê.
Cách hoạt động
- Kẻ tấn công là một trong những đối tượng thuê của hệ thống dùng chung
- Tiêm nội dung ảnh hưởng đến những người thuê khác
- Khai thác cơ sở dữ liệu vectơ dùng chung
- Truy xuất dữ liệu từ những người thuê khác
Tác động
- Rò rỉ dữ liệu giữa các đối tượng thuê
- Truy cập trái phép vào dữ liệu của đối thủ cạnh tranh
- Vi phạm tuân thủ
- Thiệt hại về danh tiếng
CVE trong thế giới thực
Các lỗ hổng được ghi lại trong hệ thống RAG.
| CVE ID | Sản phẩm | Mô tả | Mức độ nghiêm trọng | CVSS |
|---|---|---|---|---|
CVE-2025-68700 |
RAGFlow | RCE via Canvas CodeExec component - untrusted data parsed with eval() | Critical | 9.1 |
CVE-2025-69286 |
RAGFlow | Insecure API key generation allows mutual token derivation (authentication bypass) | Critical | 8.9 |
CVE-2025-25282 |
RAGFlow | IDOR vulnerability allowing cross-tenant access and unauthorized user addition | High | 8.1 |
CVE-2025-69286 |
RAGFlow | Token generation using same URLSafeTimedSerializer for API keys | High | 8.9 |
GHSA-8xw3-v6c2-j84j |
RAGFlow | RCE via stdout parsing in CodeExec component | High | 8.5 |
Chiến lược phòng thủ
1. Bảo mật giai đoạn xâm nhập
Xác thực tài liệu
- Quét tất cả tài liệu để tìm phần mềm độc hại
- Xác thực định dạng và cấu trúc tài liệu
- Kiểm tra các mẫu nội dung đáng ngờ
- Giới hạn loại tài liệu được phép
Lọc nội dung
- Xóa PII trước khi nhúng
- Lọc các mẫu dữ liệu nhạy cảm
- Chặn các mẫu độc hại đã biết
- Triển khai danh sách cho phép/chặn
Kiểm soát truy cập
- Xác thực nguồn tài liệu
- Triển khai RBAC để nhập
- Dấu vết kiểm tra cho tất cả nội dung tải lên
- Cách ly tài liệu mới
2. Bảo mật giai đoạn truy xuất
Xử lý truy vấn
- Xác thực và làm sạch các truy vấn của người dùng
- Phát hiện các nỗ lực tiêm nhiễm
- Giới hạn độ phức tạp của truy vấn
- Giới hạn tỷ lệ
Lọc truy xuất
- Triển khai bảo mật sắp xếp lại
- Tham khảo chéo với các nguồn đáng tin cậy
- Phát hiện các mẫu truy xuất bất thường
- Giới hạn số lượng tài liệu
Cách ly nhiều người thuê
- Các không gian tên vectơ riêng biệt
- Ranh giới nghiêm ngặt đối với đối tượng thuê
- Ngăn chặn truy vấn nhiều bên thuê
- Mã hóa cho mỗi đối tượng thuê
3. Bảo mật giai đoạn thế hệ
Xác thực đầu ra
- Xác thực đầu ra LLM
- Kiểm tra nội dung được chèn
- Kiểm tra tính xác thực dựa trên các nguồn
- Lọc nội dung
Xác minh bối cảnh
- Xác minh tính xác thực của nội dung được truy xuất
- Phát hiện các nỗ lực thao túng
- Gắn cờ các mẫu ngữ cảnh bất thường
- Ghi lại tất cả việc sử dụng ngữ cảnh
Con người trong vòng lặp
- Xem xét các đầu ra nhạy cảm
- Phê duyệt các hành động có rủi ro cao
- Khả năng ghi đè thủ công
- Đường dẫn leo thang
4. Bảo mật dữ liệu
Mã hóa
- Các vectơ mã hóa ở trạng thái nghỉ
- TLS cho dữ liệu đang truyền
- Các phương pháp hay nhất về quản lý khóa
- Xem xét mã hóa đồng cấu
Bảo mật Vector DB
- Xác thực mạnh
- Cách ly mạng
- Kiểm tra bảo mật thường xuyên
- Quản lý bản vá
Bảo vệ quyền riêng tư
- Giảm thiểu dữ liệu
- Phát hiện và loại bỏ PII
- Chính sách lưu giữ
- Hỗ trợ quyền xóa
Phương pháp thử nghiệm
Danh sách kiểm tra kiểm tra bảo mật RAG
- Thử nghiệm chèn tài liệu
- Kiểm tra thao tác truy xuất
- Nhúng các nỗ lực đảo ngược
- Kiểm tra cách ly nhiều người thuê
- Kiểm tra rò rỉ PII
- Kiểm tra tràn ngữ cảnh
- Kiểm tra thao túng xếp hạng
- Kiểm tra bỏ qua xác thực
- Kiểm thử chèn API
- Thử nghiệm từ chối dịch vụ
- Kiểm tra lọc dữ liệu
- Kiểm tra tuân thủ
Công cụ kiểm tra
Ví dụ về mã
Ví dụ xác thực tài liệu
```python
import re
from typing import List
class RAGDocumentValidator:
SUSPICIOUS_PATTERNS = [
r"ignore previous instructions",
r"system prompt:",
r"{{.*}}",
r"you are now dan",
]
PII_PATTERNS = [
r"\b\d{3}-\d{2}-\d{4}\b", # SSN
r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", # Email
r"\b\d{16}\b", # Credit card
]
def validate_document(self, content: str) -> dict:
"""Validate document before embedding."""
warnings = []
blocked = False
# Check for suspicious patterns
for pattern in self.SUSPICIOUS_PATTERNS:
if re.search(pattern, content, re.IGNORECASE):
warnings.append(f"Suspicious pattern: {pattern}")
blocked = True
# Check for PII
for pattern in self.PII_PATTERNS:
if re.search(pattern, content):
warnings.append(f"PII detected: {pattern}")
return {
"valid": not blocked,
"warnings": warnings,
"pii_detected": len([w for w in warnings if "PII" in w]) > 0
}
```