文章整理自:https://yeasy.gitbook.io/ai_security_guide
一、提示词注入
LLM 的交互接口本身即可接收指令,提示注入防御是整个安全体系的基础。
提示词注入攻击者通过恶意指令影响模型执行路径,绕过系统规则。
包括如下:
- 直接注入
- 间接注入
- 工具返回注入
防护思路:
- 指令层与数据层分离:明确哪些是输入、哪些是系统规则
- 外部内容来源标记与降权:对来自 RAG、Web 搜索等外部渠道的内容降低权重
- 工具调用前置策略校验:调用工具前,用独立的分类器或规则引擎进行意图验证
二、敏感信息泄露
模型输出或上下文处理过程泄露隐私、密钥、或跨租户数据。
泄露路径:训练记忆泄露、上下文回显、日志误采集、系统提示泄露
防护思路:
- 输入侧:通过脱敏和 PII 检测防止敏感数据被无意中送入 LLM
- 输出侧:通过 DLP 和脱敏规则防止 LLM 的输出包含机密信息
三、供应链风险
模型、数据集、依赖库、插件、镜像、推理服务任一环节被污染都可影响系统。
防护思路:
- 来源可追溯(签名/校验):建立模型、依赖与镜像的来源校验机制
- 依赖锁定与漏洞扫描:在构建时锁定依赖版本,定期扫描已知漏洞(CVE)
- SBOM 与变更审计:为每个部署生成 SBOM,记录完整的变更链条便于事后追溯
四、数据与模型投毒
攻击者污染训练/微调/检索数据或模型工件,诱导系统长期偏离预期行为。
防护思路:
- 数据摄入白名单与分级审核:建立受信任的数据来源清单,对新增数据进行内容和来源审核
- 异常样本检测与回滚机制:使用统计异常检测识别可疑样本,部署快速回滚流程
- 模型版本基线与行为回归测试:维护历史版本,定期运行回归测试套件验证模型输出分布的稳定性
五、输出处理不当
从"LLM 控制权"到"系统破坏权",在 Agent 和工具调用场景中,LLM 的输出直接变成了:
- 数据库查询语句(SQL 注入)
- 系统命令(命令执行)
- 文件路径(路径遍历)
- API 调用参数(二阶注入)
将 LLM 输出直接用于 SQL、Shell、模板渲染或 API 参数,触发传统安全漏洞。LLM 的输出被下游系统当作"代码"而非"数据"。
防护思路:
- 输出永不直连执行面:所有 LLM 输出都经过参数化处理,永不直接进入 SQL 引擎、Shell 或模板渲染
- 参数化调用与 schema 校验:使用白名单限制可用的工具和参数范围,生成的参数必须通过 schema 验证
- 高危操作二次确认:修改、删除等破坏性操作需要用户明确的、脱离上下文的确认
六、过度自主权
智能体被授予过多权限后,可能执行越权调用、批量外发或破坏性操作。
防护思路:
过度自主权问题根本上源于"给与"和"使用"的不对称------权限设计时是"长期、静态、宽泛的",但执行时应该是"当前、动态、最小化的"。在 Agent 架构中,需要从多个维度进行权限约束:
- 功能维度:定义每个 Agent 的能力范围(调用哪些工具)
- 参数维度:限制工具参数的有效范围(只能操作特定数据、用户或时间段)
- 时间维度:使用短期令牌而非长期凭证,减少凭证泄露的影响
- 行为维度:监控权限的使用情况,异常调用立即告警
七、系统提示泄露
攻击者诱导模型泄露系统提示、策略约束或内部流程信息:
- 系统的约束与策略(知道了"防线在哪")
- 模型的工具列表与权限(知道了"能做什么")
- 可能的内部流程与数据流(知道了"怎么做")
防护思路
- 系统提示中不存放密钥:所有敏感信息(API 密钥、数据库凭证、工具列表细节)存在外部密钥管理系统,通过安全的 API 查询
- 对"提示提取类"请求做专门过滤:识别常见的提取提示词(如"repeat your instructions"、"what are your rules"),并结合输出过滤进行阻
- 用测试集持续回归"抗提取能力":定期运行红队测试,验证系统提示是否被泄露,纳入 CI/CD 流水线
八、向量与嵌入弱点
- 向量数据库的访问控制薄弱:没有行级权限隔离,用户 A 可能检索到用户 B 的私密数据
- 文档注入攻击:恶意者上传一份"表面无害,实则包含隐藏指令"的文档,当它被检索到时,就会进行间接提示注入
- 检索排名操纵:通过精心设计,让恶意内容排名靠前,被模型优先"吸取"
防护思路:
- 文档摄入阶段需要内容审核和注入检测,防止恶意文档植入
- 嵌入和索引阶段需要确保数据的机密性和完整性
- 检索阶段需要行级权限隔离,防止跨用户数据泄露
- 重排阶段需要评估检索结果的可信度,防止恶意内容排名靠前
九、错误信息
模型输出错误但看似可信的信息,在高敏场景可能造成现实损害。
防护思路:
- 通过 RAG 强制模型引用具体来源,用户可验证信息的真实性
- 在金融、医疗、法律等高敏场景,部署事实性验证和人工复核
- 教导用户理解 LLM 的局限性,对输出保持适度的怀疑态度
十、无边界消耗
攻击者通过高并发、长上下文和高复杂度请求消耗预算与算力。
防护思路:
- 在用户维度,限制单个用户的日/月消耗量
- 在请求维度,限制单个请求的 Token 数、推理步数、工具调用次数
- 在全局维度,设置总体的成本上限和服务降级策略