我的开源项目:一套中文提示注入攻防工具链
上一篇做了自我介绍,这篇介绍我这一年主要在维护的东西:一套围绕 LLM 提示注入(Prompt Injection) 的开源工具链。它们不是五个孤立的小玩具,而是互相咬合的一条链:语料 → 攻 → 判 → 守。
先上全家福:
| 项目 | 一句话定位 | 链上的位置 |
|---|---|---|
| prompt-corpus-zh | 中文提示注入攻击语料库 | 语料层 |
| InjectArena | 中文可自部署的提示注入攻防闯关靶场 | 攻 |
| injectarena-judge | 确定性判分引擎 | 判 |
| prompt-audit | AI 层安全审计与回归门禁 | 守 |
| bounty-guard | AI 代码安全审查助手 | 守(代码侧) |
起点一:中文语料几乎是空白(prompt-corpus-zh)
做提示注入研究时最先撞上的墙不是技术,是语料:chinese prompt injection 相关的公开语料几乎一片空白,英文数据集倒是不少,但中文的人设、话术、绕过习惯完全不同。
于是有了 prompt-corpus-zh:中文提示注入攻击语料的独立资产层,npm 包和 HuggingFace dataset 同步发布,代码 MIT、数据 CC-BY 4.0。它不直接面向用户,而是给下面几个项目当”弹药库”。
攻:攻心 · InjectArena
InjectArena 是整个链路里最好玩的一个:中文可自部署的 LLM 提示注入闯关靶场,思路类似 Gandalf 和 Damn Vulnerable LLM Agent,但多了两个自己的东西:
- 全中文:关卡剧情、守阵者人设、文档全中文;
- 攻防双向评分:普通靶场只考攻方,这里守方也能上场——每关有”布防插槽”,你写防护提示词,系统用与关卡同源的攻击语料库逐条攻打,产出拦截率 / 泄露率 / 误杀率报告。攻防在同一套关卡上对打,各上各的榜(攻方比最短 payload,守方比拦截率)。
目前六道关,攻击面覆盖:直接注入、数据窃取、对抗防护、间接注入(RAG 投毒)、工具调用滥用、MCP 工具投毒——最后两个是针对 Agent 时代的新攻击面。项目已收录进 OWASP VWAD(漏洞靶场目录,LLM 类目)。
技术上刻意做了轻量:Node.js ≥ 22.13 零原生依赖,npm start 就能跑,也支持 Docker 一键自部署;API key 自备(BYOK),任何 OpenAI 兼容接口都能接。
判:injectarena-judge
评测最忌讳的事是”用 LLM 当裁判”——它会幻觉、会漂移,今天的判定和明天不一样。injectarena-judge 是一个纯逻辑的确定性判分引擎:只看输出里是否出现受控标记,同样的输入永远得到同样的判定。整个攻防评分的可信度都压在它身上。
守:prompt-audit
有了靶场和语料,就可以”守”了。prompt-audit 站在靶场和代码审查中间,审的是 AI 应用自身:system prompt、MCP 配置、工具描述——这些东西在传统扫描器眼里是”普通文本”,实际上 prompt 就是程序,工具描述能操纵 agent。
它管两件事:
- AI 资产扫描:把 AI 配置当代码审,扫投毒话术、隐藏字符、危险权限组合;
- prompt 回归门禁:prompt 的改动也该像代码一样跑回归——PR 里改了守阵者提示词?自动用注入语料回归测试,拦截率低于基线就红灯。
四个设计原则:中文语料、diff 驱动(只审新增行,控成本)、工作流原生(CLI / GitHub Action / MCP Server)、确定性判定(绝不用 LLM 当裁判)。已上架 npm,npx prompt-audit 即用。
守:bounty-guard
bounty-guard 是这条链上最早出生的项目,起点是一次真实踩坑:修 XSS 的时候被扫描器提示 Math.random 弱随机——提示是对的,但我更在意的是,为什么没有工具在我提交那行危险代码的时候就拦住我?
它只做一件事:盯住每一行新增代码。规则引擎初筛 + LLM 复核降噪,结果留在 PR 评论里。几条我比较得意的原则:
- 只审新增行——成本控制的根基;
- LLM 永远只复核、不发明——每条告警必须挂在真实代码行上(防幻觉);
- 无 API Key 优雅降级——纯规则模式完整可用,CI 零成本;
- 严重度只降不升——提示词禁止上调,解析层丢弃上调建议,双保险。
真实验证:把它对准当年那个 XSS 项目回滚到修复前版本,129 行新增里精准命中那个存储型 XSS,0 误报。已上架 npm 和 GitHub Marketplace。
语料飞轮
这条链最有意思的是闭环:靶场攻防产生的真实 payload 回流成审计回归语料;审计扫出的真实投毒样本反哺靶场新关卡。两个项目共用同一套 corpus/ schema,互相喂数据——打得越多,防得越准。
写在最后
这套东西对个人安全学习者来说已经能跑通全流程,但还差很多:靶场关卡会持续加、回归门禁还在打磨、语料库等着真实流量喂大。仓库都在 GitHub,欢迎来玩、来提 issue、来破阵。
靶场传送门:InjectArena —— 攻心为上,攻城为下。