prompt-security/RAG_Poisoning_POC

GitHub: prompt-security/RAG_Poisoning_POC

演示通过向向量数据库投毒文档实现 RAG 系统中的隐蔽提示注入攻击的概念验证项目。

Stars: 12 | Forks: 2

prompt-icon The Hidden Parrot: RAG Poisoning POC prompt-icon

# 隐藏的鹦鹉:通过向量数据库嵌入在 RAG 系统中进行隐蔽的提示注入与投毒
[阅读完整技术深度解析](https://prompt.security/blog/the-embedded-threat-in-your-llm-poisoning-rag-pipelines-via-vector-embeddings) ## 摘要 检索增强生成(RAG)系统因能用外部、最新的知识增强大语言模型(LLM)而日益普及。这些系统通常依赖向量数据库来存储和检索相关的文档嵌入,以增强用户的提示。本文揭示了常见 RAG 架构中的一个关键漏洞:即通过看似无害的嵌入进行隐蔽提示注入和数据投毒的可能性。我们展示了,通过在摄入到向量数据库的文档中嵌入恶意指令,攻击者可以操纵 LLM 的下游行为。我们的概念验证(PoC)利用开源 RAG 技术栈(例如 LangChain, Chroma/Weaviate),成功演示了如何通过检索被投毒的文档,迫使 RAG 系统采用特定的人设(例如,“像海盗一样回答”)。这项研究突显了 RAG 部署中一个重大且易于被利用的攻击面,并呼吁紧急关注缓解策略。 ## 技术栈 ``` flowchart TD %% Application Layer A[Application Layer
rag_poisoning_demo.py] --> B[Orchestration
LangChain v0.1.0] %% Core Components B --> C[Language Model
Phi-3.5-mini-instruct] B --> D[Embedding Model
all-MiniLM-L6-v2] B --> E[Vector Database
ChromaDB v0.4.24] %% Data Flow F[Documents] --> G[Text Splitting] G --> D D --> H[Embeddings] H --> E %% Query Flow I[User Query] --> D D --> J[Query Embedding] J --> E E --> K[Retrieved Docs] K --> C C --> L[Response] %% Styling style A fill:#e3f2fd style B fill:#e8f5e9 style C fill:#fff3e0 style D fill:#fff3e0 style E fill:#ffebee style F fill:#f3e5f5 style I fill:#f3e5f5 style L fill:#e3f2fd ``` ### 组件详情 - **语言模型**: Phi-3.5-mini-instruct (Q4_K_M 量化, 4096 token 上下文) - **嵌入模型**: `sentence-transformers/all-MiniLM-L6-v2` (384 维向量) - **向量数据库**: ChromaDB (SQLite 后端), 相似度搜索 (top-k=3) - **编排**: LangChain RetrievalQA chain (使用 "stuff" chain 类型) - **环境**: Python 3.11+ 配合 uv 包管理器 ## 文件结构 ``` ragpoc/ ├── README.md # This file ├── requirements.txt # Python dependencies ├── setup.sh # Environment setup script ├── test_setup.py # Setup verification script ├── src/ # Source code │ ├── config.py # Configuration │ ├── utils.py # Utilities │ ├── llm_factory.py # LLM creation │ ├── rag_system.py # RAG components │ ├── attack_demo.py # Attack logic │ ├── rag_poisoning_demo.py # Main orchestration (refactored) │ └── rag_poisoning_corpus.py # Additional corpus utilities ├── data/ # Data storage │ └── chroma_db/ # Vector database storage ├── logs/ # Application logs └── models/ # Downloaded Model storage ├── embedding/ # Downloaded Embedding models └── llm/ # Downloaded Language models ``` ## 快速开始 ### 本地 LLM 推理(完整设置 + LlamaCpp 推理) ``` # 使设置脚本可执行并运行 chmod +x setup.sh ./setup.sh # 激活虚拟环境 source .venv/bin/activate # 测试设置(支持 --no-local 以仅进行远程推理) python3 test_setup.py ``` ### 仅远程推理 (DeepSeek/Ollama) 如果您计划仅使用 DeepSeek 或 Ollama 进行推理,且不需要本地 LLM 模型: ``` # 跳过本地 LLM 下载以节省约 4GB 磁盘空间 chmod +x setup.sh ./setup.sh --no-local # 激活虚拟环境 source .venv/bin/activate # 测试设置(支持 --no-local 以仅进行远程推理) python3 test_setup.py --no-local ``` ### 3. 运行隐藏的鹦鹉攻击演示 #### 本地 LLM 推理 ``` # 使用本地 Phi-3.5-mini-instruct 模型运行(默认) python3 src/rag_poisoning_demo.py ``` #### 远程推理选项 **使用 Ollama:** ``` # Ollama 配置位于 .env 文件中(URL 和模型名称) # 无需额外设置 - 直接运行: python3 src/rag_poisoning_demo.py --infer ollama ``` **使用 DeepSeek API:** ``` # 复制示例 keys 和 env 文件并添加你的 API keys/配置 cp .keys.example .keys cp .env.example .env # 编辑 .keys 文件并添加你的 DeepSeek API key # 使用 DeepSeek 运行演示 python3 src/rag_poisoning_demo.py --infer deepseek ``` #### 特定平台推理 ``` # 强制指定特定平台/设备 python3 src/rag_poisoning_demo.py --infer cpu # Force CPU python3 src/rag_poisoning_demo.py --infer cuda # Force CUDA (if available) python3 src/rag_poisoning_demo.py --infer darwin # Force Apple Silicon (MPS) ``` ## 主要研究贡献 1. **攻击向量**: 首次演示通过向量数据库嵌入进行的提示注入 2. **实践实现**: 使用 LangChain 和 Chroma 的工作概念验证 3. **安全分析**: 全面的威胁模型和缓解策略 4. **可复现结果**: 完整的实验设置和代码可用性 ## 文档章节 完整的研究论文包含在 `research_paper/index.qmd` 中,并按章节组织在 `research_paper/chapters/` 下。论文包括: - **摘要与引言**: 问题动机与研究概述 - **背景**: RAG 架构、向量数据库及相关工作 - **威胁模型**: 攻击者能力与目标 - **方法论**: 实验设计与“海盗攻击”实现 - **结果**: 攻击成功率指标与分析 - **讨论**: 安全影响与检测挑战 - **缓解措施**: 防御策略与对策 - **未来工作**: 研究方向与开放性问题 - **附录**: PoC 实现参考与文档示例 ## 需求 ### 代码执行 - Python 3.11+ - uv 虚拟环境支持 - 约 2GB 磁盘空间(用于模型和依赖项) - **本地 LLM 额外需求:** 约 4GB 额外空间用于 Phi-3.5-mini-instruct 模型 ### 远程推理 - **Ollama:** Ollama 服务器(本地或远程),并在 `.env` 中配置 URL 和模型 - **DeepSeek:** 在 `.keys` 文件中配置有效的 API 密钥(从 `.keys.example` 复制) - 两个选项都显著减少了本地存储需求 **⚠️ 负责任研究声明**: 本工作旨在用于合法的安全研究和教育目的。请负责任地使用这些技术,并遵守适用的法律和道德准则。
标签:Adversarial Machine Learning, AI漏洞, AI红队, AI风险缓解, ChromaDB, Cybersecurity, DNS 解析, LangChain, LLM, Phi-3, RAG安全, Red Canary, Unmanaged PE, Weaviate, 向量数据库攻击, 大语言模型安全, 嵌入层攻击, 文档安全, 机密管理, 权限管理, 检索增强生成, 模型越狱, 深度学习, 知识库污染, 轻量级, 逆向工具