danielduongg/prompt-injection-lab

GitHub: danielduongg/prompt-injection-lab

轻量级的 prompt injection 检测器与 LLM jailbreak 鲁棒性评估框架,用于量化分类器防御在分布偏移下的真实有效性。

Stars: 0 | Forks: 0

# Prompt-Injection 实验室 **一个轻量级的 prompt-injection 检测器 + LLM jailbreak 鲁棒性评估测试框架 —— 坦率审视廉价防御在何处失效。** 本仓库是一个小型、完全可复现的测试平台,用于关于 prompt injection 的 AI 安全研究。它 (1) 训练了一个透明的输入过滤器分类器,(2) 对受保护的目标模型运行分类的攻击套件以测量 **攻击成功率 (ASR)**,并 (3) 在 **分布偏移** 下对过滤器进行压力测试,以展示分布内指标能有多大的误导性。它支持端到端 **离线运行,无需 API 密钥**,只需修改一行即可切换至真实模型 (Anthropic / OpenAI / 本地 HuggingFace)。 ## 项目初衷 基于分类器的输入过滤器(例如 Anthropic 的 *Constitutional Classifiers*)是对抗 prompt injection 和 jailbreak 的第一道防线。它们很容易在纸面上表现得完美无缺,但在实际中却很容易被欺骗。本项目通过围绕无害的 **canary** 构建的干净、无需判断器的方法论来量化这一差距:只有当受保护的模型泄露了无意义的秘密 token 或偏离任务时,攻击才算“成功”——因此这里的每一个 prompt 都是无害的,可以安全发布。 ## 结果概览 **检测器 —— 分布内 vs. 分布偏移** | 评估 | Precision | Recall | F1 | ROC-AUC | |---|---:|---:|---:|---:| | 分布内 (见过的家族) | 1.000 | 1.000 | 1.000 | 1.000 | | 偏移 (预留家族 + 对抗性扰动) | 0.697 | 0.221 | 0.335 | 0.856 | **过滤器作为防御手段 (144 次攻击,140 个良性对照组)** | 条件 | 总体 ASR | 见过的家族 | 预留家族 | 良性误拦截 | |---|---:|---:|---:|---:| | 无防御 | 45.1% | 50.0% | 37.0% | — | | + 检测器过滤器 | 10.4% | 0.0% | 27.8% | 3.6% |


## 快速开始 ``` pip install -r requirements.txt python scripts/run_all.py # build data -> train detector -> evaluate -> figures python tests/test_smoke.py # fast end-to-end sanity check ``` 输出结果将保存在 `results/`(指标 JSON 文件,逐项 CSV 文件)和 `results/figures/` 中。 所有流程均设置了随机种子以保证可复现性 (`SEED = 20260617`)。 ### 评估真实模型 ``` # scripts/03_run_eval.py from src.models import get_model target = get_model("anthropic", model="claude-3-5-sonnet-latest") # needs ANTHROPIC_API_KEY # target = get_model("openai", model="gpt-4o-mini") # 需要 OPENAI_API_KEY # target = get_model("hf", model="meta-llama/Llama-3.2-3B-Instruct") ``` ## 工作原理 - **`src/data_gen.py`** — 可复现地生成带有标签的检测器数据集(5 个 *见过的* 攻击家族 + 良性样本)、一个预留的 **OOD 测试集**(3 个 *未见过的* 家族 + 新颖的 payload + 同形异义字 / 零宽空格 / 改写扰动),以及一个用于测试框架的分类化 `attack_suite.json`。 - **`src/detector.py`** — 词级+字符级 TF-IDF → 逻辑回归分类器以及 `DetectorFilter` 包装器;透明且几秒钟即可完成训练。 - **`src/models.py`** — 可插拔的目标接口。`MockModel` 是一个确定性的、离线的受保护助手,它持有一个 canary,并能“看透”词汇过滤器无法察觉的混淆。真实后端包括:`AnthropicModel`、`OpenAIModel`、`HFModel`。 - **`src/harness.py`** — 运行攻击(可选择在过滤器保护下),并计算总体 / 分类 / 见过-vs-预留 的 ASR,以及良性误拦截率。 - **`src/refusal.py`** — 通过 canary 进行精确的、无需判断器的成功检测。 ``` prompt-injection-lab/ ├── README.md ├── report/REPORT.md # the research write-up (public output) ├── requirements.txt ├── src/ # data_gen, detector, models, harness, refusal, plots ├── scripts/ # 01_build_data → 02_train_detector → 03_run_eval → 04_make_figures (+ run_all) ├── data/ # generated datasets + attack suite ├── results/ # metrics, CSVs, figures/ └── tests/test_smoke.py ``` ## 负责任的使用 所有攻击均针对 **无害的 canary / 偏离任务** 的目标;这里没有任何内容试图获取危险或违规内容。本仓库仅供 **防御性** prompt-injection 研究使用。 ## 参考文献 - Anthropic — *Constitutional Classifiers* (arXiv:2501.18837): https://arxiv.org/abs/2501.18837 - deepset — *prompt-injections* 数据集: https://huggingface.co/datasets/deepset/prompt-injections - *JailbreakBench* (NeurIPS 2024): https://jailbreakbench.github.io/ - NVIDIA — *garak* LLM 漏洞扫描器: https://github.com/NVIDIA/garak ## 许可证 MIT — 见 [`LICENSE`](LICENSE)。
标签:AI安全, Apex, Chat Copilot, DLL 劫持, Petitpotam, Python, 大语言模型, 提示注入, 无后门, 机器学习, 逆向工具, 集群管理, 鲁棒性评估