用途
本技能用于缓解直接与间接的提示注入(Prompt Injection)攻击,适用于聊天应用、智能体(Agentic)工作流和 RAG 管道。当你在构建或加固任何 LLM 驱动的应用、设计会摄入不可信文档的 RAG 管道、实现具备工具调用能力的智能体工作流、响应已报告的提示注入漏洞,或对 AI 集成产品进行安全审查时,可使用本技能。
前置条件
- Python 3.10+,使用 re、hashlib、json 标准库
- 可访问 LLM 应用的源代码或配置
- 理解应用的提示架构(system/user/tool 边界)
- 具备包含代表性用户输入和文档的测试环境
攻击面
- 用户输入试图覆盖系统指令
- 检索上下文中不可信的文档/网页
- 工具输出夹带恶意指令
- 通过共享上下文窗口造成的跨租户泄露
- 渲染输出中的 Markdown 或 HTML 注入
- 逐步改变上下文的多轮攻击
纵深防御模式
- 指令层级强制:system > developer > user > tool output。
- 上下文隔离:将不可信文本与控制指令隔离。
- 工具权限:按任务和租户设置显式允许列表。
- 输出策略检查:校验 schema、脱敏密钥、阻止不安全操作。
- 人工审批:高影响操作必须人工批准。
主要能力
输入清洗
提供 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:自动化策略响应工作流