TatarinBlack/ai-runtime-security-sandbox
GitHub: TatarinBlack/ai-runtime-security-sandbox
一个面向现场演讲演示的 RAG 聊天机器人安全沙盒,通过一键切换 Secure Mode 直观展示并防御 OWASP LLM Top 10 中的多种运行时攻击。
Stars: 13 | Forks: 8
# AI Runtime Security 沙盒
**一个完全本地、自包含的 RAG 聊天机器人,旨在实时向观众直观展示 Prompt Injection、Tool Abuse、Excessive Agency、Data Leakage 和 Insecure Output Handling。**
[](LICENSE)
[](requirements.txt)
[](app/main.py)
[](SECURITY.md)
[](https://github.com/TatarinBlack/ai-runtime-security-sandbox/stargazers)
[](CONTRIBUTING.md)
六个实时攻击场景,每个只需点击一次,并配有 `Secure Mode` 开关,可以实时展示完全相同的攻击是如何被拦截的——此外,应用内还提供 Architecture 视图和 Attack Flow 面板,让观众无需任何幻灯片即可轻松跟上演示进度。
本项目是演讲 *“AI Runtime Security: Breaking (and Defending) RAG Chatbots — Live”*(Azure OpenAI · RAG Agents · Process & Culture 分论坛)的配套沙盒。幻灯片位于 [`/slides`](slides/)。
## 目录
- [为何开发此项目](#why-this-exists)
- [快速开始](#quickstart)
- [架构](#architecture-short-version)
- [6 个演示场景](#the-6-demo-scenarios)
- [知识库](#knowledge-base)
- [故障排除](#troubleshooting)
- [幻灯片](#slides)
- [相关项目](#related-projects)
- [贡献指南](#contributing)
- [许可证](#license)
## 为何开发此项目
传统的安全控制旨在保护网络、endpoint、身份和应用程序。而 RAG 聊天机器人和 AI agents 开辟了全新的攻击面:prompt 成为了输入,model 成为了决策引擎,agent 负责执行操作,tool 则可以直接访问业务系统。借助内置的离线 mock 模型,这个沙盒能够让你在几分钟内,针对你选择的 Azure OpenAI、OpenAI、Anthropic Claude、Google Gemini 或任何本地 OpenAI 兼容模型,重现并演示 OWASP LLM Top 10 中的五个风险类别——且零设置成本。
## 快速开始
```
git clone https://github.com//.git
cd
python3 -m venv .venv && source .venv/bin/activate # optional but recommended
pip install -r requirements.txt
cp .env.example .env
python run.py
```
打开 **http://127.0.0.1:8000**。在左侧选择 `mock` provider 并点击任意场景卡片——无需 API key,也无需联网。
如果你希望针对真实模型进行演示,请填写 `.env` 文件:
- **OpenAI**: `OPENAI_API_KEY`
- **Claude**: `ANTHROPIC_API_KEY`
- **Gemini**: `GOOGLE_API_KEY`
- **自定义**: `CUSTOM_BASE_URL` + `CUSTOM_API_KEY` — 支持任何 OpenAI 兼容的 endpoint(Ollama、LM Studio、vLLM、Azure OpenAI 等)
`mock` provider 能够以 100% 的可靠性离线运行整个系统——这是彩排时最安全的默认选项,也可作为会场 Wi-Fi 故障时的实时备用方案。
## 架构(简述)
```
User message
→ [1] Input Guardrail (jailbreak pattern check on the raw message)
→ [2] RAG Retrieval (TF-IDF, top-3, offline)
→ [3] Retrieval Access Control (confidential chunks dropped in secure mode)
→ [4] Context Sanitization (instructions embedded in chunks are stripped)
→ [5] Instruction Hierarchy ("retrieved content is data, not commands")
→ [6] LLM call (OpenAI / Claude / Gemini / Custom / Mock)
→ [7] Output Guardrail / DLP (sensitive data patterns redacted)
→ [8] Output Link Guardrail (non-allowlisted markdown links/images stripped)
→ [9] Tool Authorization (tool calls sourced from untrusted content blocked)
→ Answer + Attack Flow + Retrieved Context + Security Log + Tool Events
```
在 `Secure Mode` 关闭的情况下,步骤 1、3、4、5、7、8 和 9 均被禁用——这是刻意设置的脆弱基线。点击顶部的 **⌗ System Architecture** 即可实时查看此 pipeline、知识库内容以及完整的“场景 → OWASP LLM Top 10”映射表,无需离开应用。
## 6 个演示场景
左侧面板中的每个场景卡片都会自动将攻击 prompt 填入聊天框(无需现场输入,避免拼写错误),并且一旦你点击它,就会在右侧打开 **Attack Flow** 标签页,向普通观众展示:
- 知识库中究竟哪个文档是攻击向量,以及它的分类
- 从攻击者的视角,逐步剖析攻击是如何到达模型的
- “PROTECTED”模式在机制上有何不同
- 演讲者脚本(该说什么,该点哪里)
| # | 场景 | OWASP LLM Top 10 | 目标文档 |
|---|---|---|---|
| 1 | Indirect Prompt Injection | LLM01 (Indirect) | `vendor_terms_poisoned.md` |
| 2 | Data Leakage | LLM06 | `confidential_salaries.md` |
| 3 | Excessive Agency — Tool Abuse (exfiltration) | LLM08 | `support_ticket_with_tool_injection.md` |
| 4 | Direct Jailbreak | LLM01 (Direct) | 无 — 用户即为攻击者 |
| 5 | Insecure Output Handling — Markdown Exfiltration | LLM02 | `marketing_newsletter_poisoned.md` |
| 6 | Excessive Agency — Destructive Tool Call | LLM08 | `it_maintenance_request_poisoned.md` |
建议每个场景的现场演示节奏:**点击卡片 → 在 Secure Mode 关闭的情况下发送(攻击成功)→ 打开 Secure Mode → 再次发送完全相同的消息(攻击被拦截)→ 指向 Security Log 标签页。**
选择 `mock` 时,一切都是 100% 确定性且可离线运行的。真实的 provider(OpenAI/Claude/Gemini/Azure OpenAI)表现得更“真实”,但可预测性较差——这种差异本身也值得在现场指出来。
## 知识库
`data/documents/*.md` — 每个文件都以一个简小的 frontmatter 块开头:
```
---
classification: public | internal | confidential
scenario: general | injection | leakage | agency | exfiltration | destructive_agency
---
```
## 故障排除
- **“No API key is configured”**:未填写 `.env`,或者修改后未重启服务器。无论如何,`mock` 始终可用。
- **`pip install` 构建 `pydantic-core` 失败**:你的 Python/平台没有对应锁定版本的预构建 wheel。出于这个原因,`requirements.txt` 刻意避免了严格的版本锁定——请运行 `pip install --upgrade pip` 后重试。
- **某个场景的表现与预期不符**:请使用场景卡片,而不是自由输入问题——TF-IDF 检索是针对每个卡片中的确切 prompt 措辞进行调优的。
- **8000 端口被占用**:在 `.env` 中修改 `APP_PORT`。
## 幻灯片
[`/slides/AI-Runtime-Security-RAG-Chatbot-Talk.pptx`](slides/) — 实时演讲的配套演示文稿:包含问题框架、Azure OpenAI RAG Agent 参考架构、作为演讲者提示卡的 4 个主要场景、沙盒 → Azure AI Agent 设计模式映射,以及治理要点。
每张幻灯片均内嵌了演讲者备注。
## 相关项目
本沙盒处于不断发展的 LLM 动手安全工具领域。还有几个值得关注的项目:
- **[OWASP PromptMe](https://owasp.org/www-project-promptme/)** —
一个映射到 OWASP LLM Top 10 的 CTF 风格漏洞应用程序,采用 flag 捕获模式。
- **Damn Vulnerable LLM Application** — 一个涵盖多种 LLM 攻击类别的更广泛的“刻意设计的脆弱”测试平台。
- **[PaulDuvall/owasp_llm_top10](https://github.com/PaulDuvall/owasp_llm_top10)**
— 每个 OWASP 风险对应极简的 `vulnerable.py` / `mitigated.py` 配对,面向研讨会。
- **Lakera Gandalf / HackAPrompt Playground** — 基于浏览器的 prompt injection 挑战,偏向于通用的 LLM 红队测试练习,而非专门针对 RAG。
**本项目的独特之处:** 它是专门为 *30-40 分钟的现场会议演讲演示*而构建的,而不是用于 CTF 或孤立代码片段库——只需点击一下,就会将完整的攻击者控制文档加载到真实的 RAG pipeline 中,通过一个 `Secure Mode` 开关,即可通过相同的 guardrail stack 重新运行完全相同的攻击,并且应用内的 Attack Flow 面板能为毫无背景知识的观众清晰地解说整个 检索 → 上下文 → tool 路径。
它还可以通过确定性的 mock provider 实现 100% 离线运行,因此演示绝不会依赖于会场 Wi-Fi 或实时的 API key。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。在你自己的计算机之外的任何地方使用或部署此项目之前,请参阅 [SECURITY.md](SECURITY.md)。
标签:Petitpotam, 零日漏洞检测