SuperAPI AI 工具集

prompt-injection-defense

安全与审计

查看项目

更新于 10-15 14:12

技能介绍

用途

本技能用于缓解直接与间接的提示注入(Prompt Injection)攻击,适用于聊天应用、智能体(Agentic)工作流和 RAG 管道。当你在构建或加固任何 LLM 驱动的应用、设计会摄入不可信文档的 RAG 管道、实现具备工具调用能力的智能体工作流、响应已报告的提示注入漏洞,或对 AI 集成产品进行安全审查时,可使用本技能。

前置条件

  • Python 3.10+,使用 re、hashlib、json 标准库
  • 可访问 LLM 应用的源代码或配置
  • 理解应用的提示架构(system/user/tool 边界)
  • 具备包含代表性用户输入和文档的测试环境

攻击面

  • 用户输入试图覆盖系统指令
  • 检索上下文中不可信的文档/网页
  • 工具输出夹带恶意指令
  • 通过共享上下文窗口造成的跨租户泄露
  • 渲染输出中的 Markdown 或 HTML 注入
  • 逐步改变上下文的多轮攻击

纵深防御模式

  1. 指令层级强制:system > developer > user > tool output。
  2. 上下文隔离:将不可信文本与控制指令隔离。
  3. 工具权限:按任务和租户设置显式允许列表。
  4. 输出策略检查:校验 schema、脱敏密钥、阻止不安全操作。
  5. 人工审批:高影响操作必须人工批准。

主要能力

输入清洗

提供 prompt_sanitizer.py,包含:

  • detect_injection(text):扫描已知注入模式,返回 detected、patterns、risk_score(0.0–1.0)等。
  • sanitize_input(text, max_length=4096):截断长度、去除空字节与控制字符、清理 Unicode 同形字(零宽字符、BOM、不换行空格等)、归一化空白。
  • sanitize_retrieved_context(documents, source_label):为检索文档包裹清晰的边界标记,并附文档哈希引用,降低文档内注入指令被当作系统或用户消息解释的可能。
  • validate_tool_call(tool_name, args, allowed_tools):依据显式允许列表校验工具调用,支持 max_ 与 allowed_ 前缀约束。

内置的注入模式包括忽略先前指令、DAN/越狱、SYSTEM OVERRIDE、伪造 system 标记、[INST]、<|im_start|>system 等。

金丝雀令牌系统

提供 canary_tokens.py,通过 CanaryTokenManager 注入并监控金丝雀令牌以检测数据外泄:

  • generate_token(context):为特定上下文生成唯一令牌。
  • inject_into_system_prompt(system_prompt, context):向系统提示注入令牌并返回令牌以便监控。
  • check_output(output):检查模型输出中是否出现令牌,返回触发告警。
  • inject_into_documents(documents, context):向每篇检索文档注入唯一令牌。

多层防御配置

提供 prompt-defense-config.yaml,包含六层:

  • layer_1_input_validation:输入长度、注入检测、检测后是否阻断、模式文件。
  • layer_2_context_isolation:包裹检索文档、边界标记、文档数量与长度上限、剥离 HTML。
  • layer_3_instruction_hierarchy:系统提示前缀规则与角色优先级。
  • layer_4_tool_permissions:默认拒绝策略、允许工具及其约束、需人工审批的工具、被阻止的工具。
  • layer_5_output_validation:脱敏模式、阻断模式、输出长度上限。
  • layer_6_monitoring:记录检测、金丝雀触发告警、告警 webhook、指标端点。

输出校验

提供 output_validator.py:

  • validate_output(output, config):检测密钥泄露(OpenAI API key、AWS access key、GitHub token、密码、金丝雀令牌)、系统提示泄露迹象、长度超限,返回 safe、issues 及脱敏后的输出。
  • redact_secrets(text):将检测到的密钥替换为 [REDACTED]。

红队测试用例

提供 injection-test-cases.yaml,覆盖直接覆盖、经文档的间接注入、工具输出注入、数据外泄、多轮升级等场景,并给出预期结果(如 blocked、summary_only、refusal 等)。

安全指标与监控

关注指标包括:提示注入检测率、不安全工具调用阻止率、注入尝试的遏制时间、对安全提示的误报率、金丝雀令牌触发率、输出脱敏频率。提供 Prometheus 告警规则示例,涵盖高注入检测率、金丝雀令牌触发、工具滥用被阻止等告警。

使用方式

按资料,使用流程为:配置多层防御 YAML;在应用输入侧调用 sanitize_input 与 detect_injection;对检索文档调用 sanitize_retrieved_context;在智能体循环中于工具执行前调用 validate_tool_call;向系统提示与文档注入金丝雀令牌;对模型输出调用 validate_output 与 check_output;用红队测试用例验证;通过监控指标与告警持续观测。

适用场景

  • 构建或加固 LLM 应用
  • 处理不可信文档的 RAG 管道
  • 具备工具调用能力的智能体工作流
  • 响应已报告的提示注入漏洞
  • AI 集成产品的安全审查

限制与注意事项

  • 检测基于正则模式,可能产生误报;资料建议初期仅记录日志,调优后再切换为阻断。
  • 单轮检测无法覆盖多轮攻击,需实现会话级分析与跨轮风险评分。
  • 工具校验必须在工具执行之前运行,否则阻止无效。
  • Unicode 同形字绕过需扩展 confusable_map 或使用 unicodedata.normalize('NFKC', text)。
  • 金丝雀令牌若未在输出校验中脱敏,可能对用户可见。
  • 资料未提供具体收费、价格、平台支持范围等信息。

相关技能

  • ai-agent-security:智能体威胁模型与控制
  • llm-app-security:端到端 LLM 应用加固
  • security-automation:自动化策略响应工作流