nikolas-reges/llm-security-lab
GitHub: nikolas-reges/llm-security-lab
一个基于规则模拟 LLM 的 Prompt Injection 攻防实操实验室,为零成本学习 OWASP LLM01 及 CLLMSP 相关越狱与防御技术提供交互式环境。
Stars: 0 | Forks: 0
# Prompt Injection 实验室
一个演示 **OWASP LLM01 (Prompt Injection)** 及相关越狱技术的实操模拟器 —— 作为 **Certified LLM Security Professional (CLLMSP)** 认证的实战配套而构建。
本项目不调用真实的 LLM API。它使用一个小型的基于规则的“模型”来模拟 LLM,因此重点完全放在攻击和防御*模式*上,而不是任何特定供应商的 API —— 并且它完全免费,零设置成本。
## 本项目为何存在
认证证明了你学习过理论。而本项目证明了你能将其付诸实践:攻击一个脆弱的系统,然后构建阻止它的防御层。
## 它演示了什么
| 技术 | 所在位置 | OWASP / CLLMSP 映射 |
|---|---|---|
| 直接 Prompt Injection | 聊天面板 | LLM01 |
| DAN / “开发者模式”越狱 | 聊天面板 | Domain 3 — 越狱分类 |
| Skeleton Key (授权上下文框架) | 聊天面板 | Domain 3 — 越狱分类 |
| Prompt Leaking | 聊天面板 | Domain 3 — Prompt Leaking |
| Token Smuggling (Base64 / leetspeak 启发式) | 聊天面板 | Domain 3 — Token Smuggling |
| Crescendo 攻击 (多轮升级) | 聊天面板 (跨轮次累积风险评分) | Domain 3 — Crescendo |
| 通过投毒 RAG 文档进行的间接 Prompt Injection | RAG 演示面板 | LLM01 / Domain 6 |
| 纵深防御 (Input Guardrail → Instruction Hierarchy → Model → Output Filter) | Pipeline 追踪可视化 | Domain 3 — Guardrail 架构 |
| Canary token 检测 | Output filter 层 | Domain 3 — Prompt 加固 |
## 工作原理
该应用为同一个模拟助手 **NeoBank Support** 提供了两种模式:
- **脆弱模式** —— 没有 guardrail。如果消息中包含常见的 injection/越狱短语,bot 会盲目服从并泄露一个秘密的“管理员覆盖代码”。这反映了学习指南中描述的真实故障模式:模型在可信指令和不可信输入之间没有架构边界。
- **受保护模式** —— 每条消息在生成回复之前都会经过一个分层的 pipeline:
1. **Input Guardrail** —— 对直接 injection、越狱角色设定、prompt 泄露尝试和 token smuggling 进行模式和启发式检测。
2. **Instruction Hierarchy (多轮次)** —— 累积的风险评分,即使每条单独的消息看起来无害,它也能标记出 Crescendo 式攻击。
3. **Model** —— 在脆弱模式中使用的相同的预设响应器。
4. **Output Filter** —— 最后一道防线检查,在返回生成的回复之前,扫描其中是否包含 canary token,无论之前有哪些层被突破。
实时的**防御 pipeline 追踪**可以准确显示消息通过了哪个检查点或在何处被拦截,而**检测日志**会记录下每一次尝试,包含时间戳、判定结果和技术标签 —— 其构建采用了与 [mini-siem](https://github.com/nikolas-reges) dashboard 相同的监控理念。
**间接 injection 演示**允许你粘贴一个要求助手进行总结的“文档”,从而模拟被投毒的 RAG 来源 —— 该文档可以包含隐藏指令,就像恶意网页或电子邮件附件那样。
## 在本地运行
```
git clone https://github.com/nikolas-reges/prompt-injection-lab.git
cd prompt-injection-lab
pip install -r requirements.txt
python app.py
```
在浏览器中打开 `http://localhost:5004`。
## 自己动手尝试
1. 切换到**脆弱模式**并点击“Direct Injection”快速攻击标签 —— 观察 bot 交出秘密代码。
2. 切换到**受保护模式**并发送相同的消息 —— 观察它如何在 Input Guardrail 处被拦截,并在 pipeline 中实时追踪。
3. 在受保护模式下,依次发送三条听起来无辜的关于“规则”、“代码”和“秘密”的消息 —— 观察 Crescendo 检测器如何捕获累积模式,即使没有任何单条消息单独触发它。
4. 在两种模式下,尝试使用包含隐藏 `[ignore all previous instructions...]` 子句的文档进行 RAG 演示。
## 技术栈
Python · Flask · 原生 JS/HTML/CSS —— 除了 Flask 之外,不需要任何外部 API key 或依赖。
## 免责声明
专为教育和作品集目的而构建,针对的是一个自包含的模拟助手,没有真实的后端、数据或第三方模型。所引用的所有技术均记录在公开的 OWASP 和学术安全研究中(参见 CLLMSP 学习指南参考资料)。
Blue/Red Team 实践系列的一部分 —— 另请参阅:[mini-siem](https://github.com/nikolas-reges/mini-siem)、[netrecon-](https://github.com/nikolas-reges/netrecon-)、[password-analyzer](https://github.com/nikolas-reges/password-analyzer)、[phishing-detection-engine](https://github.com/nikolas-reges/phishing-detection-engine)。
标签:AI安全防护, DNS 反向解析, 多模态安全, 大语言模型安全, 安全教育, 安全靶场, 数据可视化, 机密管理, 逆向工具