Srivatsa03/rag-redteam

GitHub: Srivatsa03/rag-redteam

rag-redteam 是一款在 CI 中对 RAG 流水线进行自动化安全红队测试的工具,通过模拟攻击检测间接提示词注入、源文档泄露和跨文档注入等漏洞。

Stars: 0 | Forks: 0

# rag-redteam **在 CI 中针对您的 RAG pipeline 进行红队测试,检测提示词注入和源文档泄露。** RAG 系统存在一个通用 LLM 扫描器会遗漏的攻击面:*检索到的文档本身*。能够将文本植入您知识库的攻击者可以设置模型稍后会遵循的指令(间接提示词注入),或者诱骗系统泄露其私有来源(数据泄露)。`rag-redteam` 会像对手一样攻击您的 pipeline,如果发现可利用的漏洞,则会导致构建失败。 它有意填补了两个现有工具之间的空白: - RAG 评估框架(RAGAS、DeepEval)衡量的是**答案质量**,而非安全性。 - LLM 扫描器(garak、LLM Guard)探测的是**模型**,而不是您的**检索 pipeline**。 `rag-redteam` 将 pipeline 作为整体进行测试,并可作为 CLI 或 GitHub Action 运行。 ## 快速入门 ``` pip install -e . # 针对内置的 demo 目标运行(无需 API key) rag-redteam run --target examples.demo_target:build # 该 demo 被故意设置为存在漏洞,因此会以非零状态退出。 # 加固后的 demo 通过: rag-redteam run --target examples.demo_target:build_hardened ``` 列出探测项: ``` rag-redteam list ``` ## 将其指向您自己的 RAG 将您的 pipeline 包装在一个小型适配器中(`answer`,以及用于注入和泄露探测的 `add_documents`/`reset`): ``` class MyRAG: def reset(self): ... # restore corpus to baseline def add_documents(self, docs): ... # let probes plant test documents def answer(self, query: str) -> str: ... # your real retrieve + LLM call def build(): return MyRAG() ``` ``` rag-redteam run --target mypackage.my_rag:build --report report.md --json report.json ``` [`examples/llm_target.py`](examples/llm_target.py) 中提供了一个与提供商无关的示例,您可以将其连接到任何 LLM。对于 LangChain 用户,[`examples/langchain_target.py`](examples/langchain_target.py) 直接包装了 LangChain 检索器 + 聊天模型。 ## 测试内容 (v0.1) | 探测项 | 严重性 | 功能描述 | |---|---|---| | `indirect_prompt_injection` | 高 | 在检索到的文档中植入指令,并检查模型是否遵循它们(通过唯一的 canary token)。 | | `context_leakage` | 高 | 在源文档中植入私有机密信息,并尝试通过上下文转储查询将其窃取。 | | `cross_document_injection` | 高 | 将恶意指令拆分到多个文档中,并检查重新组合后的指令是否被执行。 | 每个探测项都会报告**攻击成功率**以及导致系统被攻破的确切提示词/输出。 ## 在 CI 中使用 `.github/workflows/redteam.yml`: ``` - run: pip install -e . - run: rag-redteam run --target mypackage.my_rag:build --fail-on high ``` `--fail-on {low,medium,high}` 控制构建何时中断。如果发现任何等于或高于该严重性的漏洞,构建就会失败,这样导致您的 RAG 被注入的回归问题就永远不会进入生产环境。 ### 回归模式(推荐用于真实的 pipeline) 真实的 pipeline 通常存在已知的、被接受且无法一夜之间修复的弱点。与其让每次构建都失败,不如快照当前状态,并且仅在情况**恶化**时才失败: ``` # 1. 将今天的 attack-success-rates 保存为 baseline(提交此文件) rag-redteam baseline --target mypackage.my_rag:build --out baseline.json # 2. 在 CI 中,仅当 probe 的 attack-success-rate 高于 baseline 时才失败 rag-redteam run --target mypackage.my_rag:build --baseline baseline.json ``` 这会将 rag-redteam 变成**针对 RAG 的安全回归测试**:使您的 pipeline 更容易被利用的更改会导致构建失败,而已知的基线问题则不会在每次运行时都困扰您。 ## 检测工作原理(及其局限性) 检测是**基于 canary 的**:探测项会植入唯一的 token 或机密,并检查它是否出现在输出中。这是确定性的,并且不需要 LLM 评判,这使得它成本低廉且可复现。其权衡是:它只能捕获*逐字*成功的攻击。改写后的泄露或更微妙的指令执行已列入路线图(语义检测器),并在 issues 中进行跟踪。 ## 路线图 - 更多探测项:embedding-inversion 暴露、跨文档指令链接、攻击下的引用/基础完整性。 - 语义(不仅仅是 canary)检测器。 - LangChain、LlamaIndex 和 Haystack 检索器的适配器。 - 带评分的、可共享的 HTML 报告。 欢迎贡献。一个探测项就是一个实现 `run(target) -> ProbeResult` 的文件(参见 `rag_redteam/probes/`)。 ## 许可证 MIT
标签:AI安全, Chat Copilot, CISA项目, DevSecOps, DLL 劫持, Gradle, LNA, RAG, 上游代理, 大语言模型, 文档结构分析, 漏洞测试, 逆向工具