steveh250/Prompt-Injection-Testing
GitHub: steveh250/Prompt-Injection-Testing
一个针对 LLM Agent 的 prompt injection 防御方案对比测试框架,通过共享数据集评估内联防火墙与内容隔离两种安全架构的检测效果。
Stars: 1 | Forks: 0
# Prompt 注入测试
## 目的
本仓库旨在测试并比较针对 **prompt injection 攻击**防御 AI agent 的不同方法,这类攻击将恶意指令嵌入在外部内容(文档、电子邮件、API 响应)中,试图劫持 LLM 的行为。
该研究起源于 **RFP Responder** 多 agent 解决方案,该方案从 RFP 文档中提取需求并将其提交给 LLM 进行回答。攻击者可能会在这些文档中嵌入 prompt injection payload,这使得提取 pipeline 的安全性至关重要。
## 仓库结构
```
Prompt-Injection-Testing/
├── README.md # This file
├── security_agent-Prompt_INJECTION_And_Benign_DATASET.jsonl # Shared test dataset
├── Ollama/ # LLM-based inline security agent
│ ├── README.md
│ ├── ARCHITECTURE.md
│ ├── security_agent.py
│ └── test_security_agent.py
└── MAF-FIDES/ # FIDES content-labelling approach
├── README.md
├── ARCHITECTURE.md
├── fides_security_agent.py
├── test_fides_agent.py
└── requirements.txt
```
## 共享数据集
`security_agent-Prompt_INJECTION_And_Benign_DATASET.jsonl`
一个精心策划的 **500 个已标注 prompt** 的数据集(250 个恶意,250 个良性),被两个测试框架使用以实现直接比较。
| 字段 | 描述 |
|---|---|
| `id` | 唯一标识符(例如 `pi-001`) |
| `prompt` | 要分类的原始文本 |
| `label` | `malicious` 或 `benign` |
| `attack_type` | `code_execution`、`obfuscation`、`jailbreaking`、`data_leakage`、`role_playing` 或 `none` |
| `context` | 对攻击或查询的可读性描述 |
| `response` | 预期的 agent 响应 |
**攻击类型分布:**
| 攻击类型 | 数量 |
|---|---|
| code_execution | 146 |
| obfuscation | 61 |
| data_leakage | 18 |
| jailbreaking | 17 |
| role_playing | 8 |
| none (benign) | 250 |
## 比较的方法
### 1. Ollama — 内联 LLM 防火墙
**文件夹:** `Ollama/`
一个**内联防火墙**,位于 RFP Responder pipeline 中文档提取步骤和下游执行 agent 之间。每个提取出的需求在被传递之前都会进行扫描。如果安全 agent 检测到 prompt injection 攻击,pipeline 将**立即中止** —— payload 永远不会到达可能对其执行操作的下游 LLM。
```
RFP document → extract requirements → [Security Agent] ──malicious──► ABORT
└──benign────► downstream agent
```
- LLM 接收原始内容并应用详细的威胁检测系统 prompt。
- 两阶段分析:节点扫描 + 针对拆分 payload 攻击的全结构扫描。
- 检测到恶意时:pipeline 停止(在独立模式下退出代码为 2;在 A2A 模式下为 `is_malicious: true`)。
- 判定为良性时:内容将传递到下一个 pipeline 阶段。
参见 [`Ollama/README.md`](Ollama/README.md) 和 [`Ollama/ARCHITECTURE.md`](Ollama/ARCHITECTURE.md)。
### 2. MAF-FIDES — 内容标记 + 隔离区隔离
**文件夹:** `MAF-FIDES/`
这是来自 [Microsoft Agent Framework](https://github.com/microsoft/agent-framework/tree/main/python/samples/02-agents/security) 的 Microsoft **FIDES** (Foundational Integration Defense for Execution Security) 方法的实现。
FIDES 不再要求 LLM 在原始内容中检测攻击,而是从结构上**防止**注入:
- 所有外部输入都被标记为 `UNTRUSTED`。
- 中间件层在不可信内容到达主 LLM 之前,将其**隐藏**在不透明的变量引用之后。
- 主 LLM 永远看不到原始的不可信文本;它只能看到 `[UNTRUSTED_CONTENT_REF: var_xxxxxxxx]`。
- 当需要进行分类时,agent 会调用一个 `quarantined_llm` 工具,该工具在完全隔离且没有任何工具访问权限的情况下处理隐藏的内容。
参见 [`MAF-FIDES/README.md`](MAF-FIDES/README.md) 和 [`MAF-FIDES/ARCHITECTURE.md`](MAF-FIDES/ARCHITECTURE.md)。
## 方法之间的关键区别
| 维度 | Ollama 方法 | FIDES 方法 |
|---|---|---|
| **Pipeline 角色** | 内联防火墙 — 检测到攻击时中止 pipeline | 内联网关 — 检测到攻击时阻止下游工具调用 |
| **检测到恶意时** | Pipeline 立即停止(中止 / 退出代码 2) | 下游 agent 操作被策略强制执行阻止 |
| **判定为良性时** | 内容传递到下一个 pipeline 阶段 | 内容通过;主 agent 正常继续执行 |
| **防御机制** | 概率检测 — LLM 对原始内容进行分类 | 结构预防(隐藏)+ 概率隔离区 |
| **主 LLM 是否看到原始内容** | 是 — 哨兵 LLM 读取原始 payload | 从不 — 原始 payload 在任何 LLM 看到之前都被隐藏 |
| **注入向量** | 哨兵 LLM 可能会被足够巧妙的 payload 欺骗 | 对主 agent 实现结构性封闭;隔离 LLM 是相互隔离的 |
| **分类方法** | 使用安全系统 prompt 的直接 LLM 分析 | 带有显式数据框架的隔离区 LLM |
| **假阴性风险** | 较高 — 新型攻击可能会欺骗哨兵 LLM | 较低 — 隔离区框架和隔离降低了易受攻击性 |
| **假阳性风险** | 中等 | 中等 |
| **可解释性** | 输出中有完整的草稿板推理过程 | 来自隔离区 LLM 的完整草稿板推理 + 中间件事件日志 |
## 运行比较
两个框架都会从同一个数据集中生成相同的指标集(准确率、精确率、召回率、F1、混淆矩阵),从而使结果具有直接的可比性。
```
# Ollama 方法
cd Ollama
python test_security_agent.py --limit 20 # quick test
python test_security_agent.py # full 500-prompt run
# FIDES 方法
cd MAF-FIDES
pip install -r requirements.txt
python test_fides_agent.py --limit 20 # quick test
python test_fides_agent.py # full 500-prompt run
```
这两个脚本都接受 `--limit N`、`--start N` 和 `--output path/to/results.json`。Ollama 框架还额外接受 `--force-json` 以在 LLM 调用时请求 JSON 模式(默认关闭 — 参见 [`Ollama/README.md`](Ollama/README.md#output-parsing))。
## 前置条件
- **Ollama** 在本地 `http://localhost:11434` 运行
- 已拉取 **Granite 4** 模型:`ollama pull granite4:latest`
- Python 3.11+,`pip install openai`
标签:AI安全, AI风险缓解, Chat Copilot, DLL 劫持, LLM防御, Petitpotam, 人工智能, 大语言模型, 安全测试, 攻击性安全, 用户模式Hook绕过, 逆向工具