关于 prompt-injection-defense
prompt-injection-defense 是面向 AI Agent 系统安全评估的技能,适用于设计和维护 Agent 的团队。它将威胁建模延伸到边界梳理、控制措施、安全测试和残余风险记录。
主要功能
- 01梳理数据流与信任边界
- 02定义可强制执行的安全不变量
- 03收敛工具与凭据权限
- 04设计安全的对抗测试
- 05制定监控与事件恢复计划
适用场景
- 01评估 Agent 的提示注入风险
- 02审查工具权限与数据外发
- 03为 Agent 变更构建回归测试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill prompt-injection-defense安装后在 Claude Code 中输入/prompt-injection-defense确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/defense-patterns.mdscripts/audit_boundary_manifest.py详细介绍
提示词注入防御
应以模型推理可能遭到攻陷为前提进行设计。提示词文本和分类器可以降低攻击成功率,但无法构成可靠的安全边界。应将会造成重大影响的权限、授权、验证和策略执行置于模型之外。
输入
收集或推断以下信息,并标注各项假设:
- Agent 的用途、系统/开发者指令、模型、记忆和编排方式
- 所有输入来源,包括用户、网页、电子邮件、文档、图像、音频、工具结果、RAG 和其他 Agent
- 工具列表、权限、身份、目标、写入影响和网络出站流量
- 机密、私有数据、系统提示词、策略数据和其他受保护资产
- 输出接收端,例如 UI 渲染、代码执行、消息、数据库和下游 Agent
- 授权模型、人工审核关卡、监控、事件历史和风险承受度
- 代表性良性任务和安全的评估环境
不要在聊天中索要生产机密或恶意样本。请使用脱敏样本或合成测试数据。
输出约定
交付:
- 数据流和信任边界图,涵盖受保护资产、所有模态、接收端、记忆存储、Agent 之间的跳转、获准的目标位置和凭据边界
- 威胁模型,列出受保护资产、攻击者可控渠道、注入路径和安全不变量
- 按优先级排列的防御计划,将每条路径映射到预防、限制、检测和恢复控制,并为每项标注
missing、planned、implemented或verified - 仅在用户授权范围内进行代码或配置更改
- 回归测试套件,按适用情况覆盖安全的直接、间接、存储型、编码型、跨 Agent 和多模态案例
- 验证证据、观察到的失败和指标,而非笼统声称已实现预防
- 剩余风险、运维监控以及事件遏制/恢复计划
使用 JSON 边界清单描述架构,并通过 scripts/audit_boundary_manifest.py 对其进行检查。记录每项控制的执行点、负责人、证据 ID、测试 ID,以及限时控制的到期时间。结构检查通过并不能证明控制有效。请阅读 references/defense-patterns.md,了解攻击路径、控制措施的部署位置和验证模式。
工作流
1. 绘制指令、数据、权限和接收端
追踪内容从来源到解析、检索、模型上下文、记忆、工具、渲染器、输出接收端和下游 Agent 的整个流程。标记每个由攻击者控制或具有混合信任级别的来源。包括文档中的隐藏文本、元数据、代码注释、OCR、图像、音频、重定向、工具描述和持久化记忆。列出获准和拒绝的目标位置、每项凭据的持有者/受众/存储边界,以及内容或权限在 Agent 之间传递的每个位置。
列出资产和可能造成的后果:机密泄露、访问私有数据、未经授权的工具调用、对外通信、交易、代码执行、绕过策略、污染记忆或生成误导性输出。
2. 定义可执行的不变量
用确定性组件能够执行的方式表达要求,例如:
- 检索到的内容不能授予权限或更改工具允许列表。
- 客服 Agent 不能读取经过身份验证的租户范围之外的记录。
- 电子邮件正文不能决定发送操作的收件人。
- 模型输出未经验证和安全处理时,不能作为代码或 HTML 执行。
- 任务用不到的机密不能进入模型上下文。
如果某项不变量仅存在于提示词指令中,应将其记录为薄弱控制,并将执行职责转移到代码、策略、隔离机制或人工控制上。
3. 降低暴露的权限
移除未使用的工具、权限过宽的令牌、环境凭据、通用 Shell、任意 URL 获取能力、原始 SQL 和不受限制的文件访问权限。将读取与写入、预览与提交分开。按租户、对象、操作、字段、时间和目标限制身份权限。
将密钥保留在模型上下文和工具结果之外。添加网络和数据外传白名单。对代码、解析器、浏览器和文件处理进行沙箱隔离。要求独立授权,并在必要时于产生重大影响的操作执行前立即进行针对该操作的审批。分类为 critical 的工具不得将确认模式设为 none。
4. 将控制指令与不可信内容分开
将不可信内容视为带有来源信息的引用数据,绝不视为权威指令。在检索和 Agent 交接过程中保留来源边界。使用结构化的类型化消息,而不是拼接指令和数据。限制检索内容;在安全的情况下移除主动内容;规范化受支持的格式;并使用适合上下文的转义方式呈现输出。
指令层级、分隔符、提醒、内容分类器和注入检测器可作为纵深防御信号。不要将其中任何一项作为唯一控制手段。
5. 验证每次转换
在执行前,根据严格限定的架构和策略验证工具参数。尽可能从可信的应用状态推导敏感目标标识符,而不是从不可信文本中获取。在执行时重新授权。验证并编码模型输出,使其适用于目标位置;绝不要将其直接发送到 Shell、SQL、模板、URL 或特权 API。
对于多 Agent 系统,验证发送方身份,限制委派深度和预算,传递带有来源信息的结构化声明,并在每次交接时重新计算权限。绝不要默认继承上游最宽泛的权限。
6. 使用安全的对抗性案例进行测试
使用隔离环境、合成账户、无害的金丝雀密钥、无害目标和非破坏性工具。至少测试:
- 直接尝试覆盖指令或套取受保护数据
- 嵌入在检索页面、电子邮件、文档、工具结果、元数据和记忆中的间接指令
- 混淆、编码、语言变更、跨轮次拆分以及重复尝试
- 跨 Agent 委派和受污染的摘要
- 支持图像、音频、PDF、HTML 或 OCR 时的隐藏内容或其他模态内容
- 工具参数操纵、目标替换、数据外泄和未授权的外传
- 对有代表性的无害内容和正常任务完成情况进行误报测试
衡量不变量违规、未授权工具尝试、金丝雀数据暴露、无害任务成功率、误报率和遏制行为。仅检测器通过率不足以作为依据。只有在实现证据和指定的测试证据都存在时,才将控制措施提升为 verified;如果代码已存在,但相关测试尚未验证其行为,则使用 implemented。
7. 运行和恢复
记录来源信息、策略决策、工具/目标元数据、拒绝情况和异常序列,但不要存储密钥或不必要的内容。针对金丝雀访问、反复策略失败、新增工具暴露、跨租户尝试和意外外传发出警报。
如果怀疑发生安全事件,应停止或隔离受影响的工作流,禁用高风险工具和外传能力,撤销或轮换已暴露的凭据,隔离恶意来源,保留经脱敏的证据,找出已持久化的记忆/向量条目及下游影响,恢复干净状态,并在重新启用访问权限前重新运行回归测试。
授权与安全边界
- 未获得针对特定目标的明确授权,不得对生产环境、第三方系统或用户系统测试载荷。
- 不得触发真实交易、消息、删除操作、访问权限变更、恶意软件或数据外传;请使用无害的金丝雀和合成目标。
- 不得在测试语料或日志中放入真实机密、个人数据、特权系统提示词或有效令牌。
- 不得声称已消除提示词注入。请说明已测试的范围、模型/配置、证据、局限性和剩余风险。
- 不得擅自删除可能已遭入侵的记忆、记录或证据;应先隔离,并遵循所有者的保留和事件处理政策。
- 如果范围不明确、金丝雀到达非预期系统、出现真实敏感数据,或发生意外的外部影响,请停止测试并升级处理。
验证与恢复
完成前,请确认所有受保护资产、不可信路径、接收端、记忆存储、Agent 跳转、目标和凭据边界均已纳入;每项重大影响都有非模型授权检查;关键工具需要确认;已尽量缩减暴露的权限;回归测试同时覆盖攻击抵御能力和良性任务的实用性。不要把未知项变成缺乏依据的全肯定结论:将 missing 和 planned 控制措施保留为明确的缺口。模型、提示词、解析器、检索、工具、权限或编排发生变更后,请重新运行测试。
如果某项控制导致任务失败到无法接受,请单独回退该控制,继续禁用风险较高的工具,保留失败案例,并重新设计边界。不要仅为提高成功率而恢复宽泛权限。
真实示例
电子邮件分类 Agent
将主题、正文、附件和引用的邮件往来视为不可信数据。允许模型分类和起草,但邮箱和租户信息应从经过身份验证的状态中获取。将草稿与发送分开,限制收件人域名,外部发送需针对确切邮件内容进行审批;并测试包含无害指令的附件,检查其是否会泄露金丝雀或更改收件人。
可访问网络的研究 Agent
运行浏览功能时,不得访问内部机密。将目标加入允许列表,剥离活动内容,保留页面来源信息,并防止页面文本扩展工具权限或更改研究目标。测试隐藏页面文本、恶意工具结果、编码后的指令,以及包含安全相关短语的普通页面,以衡量误报情况。
完成检查
只有在架构、控制措施、测试和恢复机制覆盖完整数据流,证据表明受保护的不变量在已测试环境中成立,良性任务的实用性仍有衡量,且剩余风险和未经验证的范围均已明确时,才算完成。