StackedTEN/prompt-injection-range

GitHub: StackedTEN/prompt-injection-range

一个针对 SOC Agent 的间接 Prompt 注入攻防靶场,内置分层 Guardrail 引擎,用于演示和训练防御多类注入攻击的纵深防御能力。

Stars: 0 | Forks: 0

# Prompt 注入靶场 **一个用于针对 SOC agent 进行 prompt 注入攻击的交互式靶场 —— 以及试图捕获这些攻击的 guardrail 层。** 安全团队正在将 LLM agent 接入到 SOC 中,以实现对告警的分流、工单汇总以及阅读收件箱。问题在于:这些 agent 整天都在读取由攻击者控制的文本。隐藏在告警、邮件或日志中的几句话,就足以劫持 agent —— 将真实的告警篡改为“良性”,迫使其泄露自身配置,或调用特权操作。这就是*间接 prompt 注入*,对于任何汇总不受信任数据的 agent 来说,这都是主要风险。 这个靶场让风险变得具体可见。选择一次攻击;观察未设防的 agent 是如何被劫持的;然后观察一个真实的、确定性的 guardrail 层如何在相同的输入和输出上运行。关键不在于 guardrail 有多神奇——恰恰相反。**自动化的 guardrail 只能缩小爆炸半径;它们无法取代人类。**有些攻击会被拦截,有些只能在事后被捕获,而有一个则会被完全漏掉并转交给人工处理。这种残留风险正是核心教训所在。 ![靶场在输出层捕获混淆的 exfiltration](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b9768d46ab011220.png) ## 三层架构的故事 内置的攻击武器库旨在让结果真实地教会你什么是纵深防御: | 结果 | 含义 | 集合中的示例 | | --- | --- | --- | | **BLOCKED · INPUT** | 模式检测器在 agent 看到之前就捕获了 payload。 | “ignore previous instructions…”、role hijacks、forged delimiters、tool-abuse | | **BLOCKED · OUTPUT** | Agent *确实*被劫持了,但 canary/泄露检测器在输出时捕获了它。 | 绕过输入过滤器的 base64-wrapped exfiltration | | **FLAGGED · HUMAN** | 两层自动化防护都漏掉了它;决策被移交给人工处理。 | 降低真实告警级别的无关键字社会工程学 | | **CLEAN** | 合法数据,被正确分流 —— 没有误报。 | 对照组告警 | 混淆的 exfiltration 案例是最真实的核心部分:输入 guardrail 只能**标记**不透明的 base64 blob(它无法读取内部内容),因此 agent 仍然会泄露 —— 而系统 prompt 中植入的 *canary* 负责在输出端捕获泄露。这就是你需要这两层防护的原因,也是为什么任何一层单独使用都不够的原因。 ## 运行它(零配置) ``` npm install npm run dev # http://localhost:3000 ``` 确定性的 guardrail 引擎和 agent 模拟器完全在客户端运行 —— **无需 API key**。模拟器对已记录的劫持行为进行了建模,因此任何人只要克隆它,靶场就能正常运行。 ### 可选:对接实时模型运行 设置一个 API key(在本地或在 Vercel 中),将 payload 发送给真实的模型,而不是模拟器: ``` cp .env.example .env.local # add ANTHROPIC_API_KEY npm run dev ``` Guardrail 层是确定性的,因此它们会以完全相同的方式检查实时模型真实的输入和输出。现代模型能够抵御许多此类攻击 —— 当它们做到这一点时,这是一个发现,而不是一个 bug。 ## 部署到 Vercel 推送代码仓库并在 [vercel.com/new](https://vercel.com/new) 导入。它会作为一个标准的 Next.js 应用程序部署,无需任何配置。仅在需要实时模式时才将 `ANTHROPIC_API_KEY` 添加为环境变量。 ## 构建方式 ``` lib/attacks.ts # the injection arsenal, each wrapped in a realistic SOC artifact lib/guardrails.ts # the detector engine: input + output layers, with a system-prompt canary lib/agent.ts # the SOC triage agent (simulator) + the run orchestration app/api/triage/ # optional live-model route; falls back to the simulator with no key app/page.tsx # the range UI tests/ # the engine's behavior is pinned by tests ``` 核心实质是 `lib/guardrails.ts` —— 该层是真实代码,可以对你提供给它的任何文本(包括你自己的文本)运行。其他的一切都是为了让其行为更加易于理解而存在的。 ## 测试 ``` npm test ``` 测试套件证明了检测器会在每个攻击类别上触发,对干净的对照组**不会**误报,只会标记(绝不信任)混淆的内容,并且端到端的结果会落在正确的层级 —— 包括混淆的 exfiltration 绕过了输入层但会在输出层被捕获。 ## 本项目的定位 它**是**一个可用的、带有主观倾向的参考,用于针对安全 agent 的分层 guardrail,并内置了 human-in-the-loop 路由。它**不是**一个完整的 prompt 注入防御方案 —— 模式检测器在设计上就是可以被绕过的,这正是 FLAGGED · HUMAN 通道所承认的事实。这些 payload 是用于防御性研究的自然语言操纵;不包含任何漏洞利用代码。 ## License MIT —— 见 [LICENSE](LICENSE)。
标签:AI安全, Chat Copilot, DLL 劫持, DNS 反向解析, 大语言模型, 安全靶场, 自动化攻击