2. AI系统威胁建模与攻击面梳理
为什么先画数据流图,而不是先列威胁清单
威胁建模的核心不是“想到多少攻击”,而是先看清系统里有哪些数据流、信任边界和可被外部触达的接口。对 AI 应用而言,攻击面往往不在传统 Web 层,而藏在提示词拼接、检索增强、插件调用、模型权重与训练数据这些环节。因此本例以一个“企业知识库问答助手”为具体对象,先画出它的数据流图(DFD),再沿每条流与每个存储标注攻击面,最后落成一份可评审的威胁建模报告。
目标系统与信任边界
假设目标应用为 KB-Assistant:员工通过 Web 前端提问,后端将问题与检索到的知识片段拼成提示词,调用云端大模型 API,模型可能触发“查询工单”插件,最终返回答案。系统涉及四类信任边界:
- 边界 B1(互联网→企业内网):Web 前端与后端 API 之间,用户输入不可信。
- 边界 B2(内网→第三方云):后端与外部大模型 API 之间,提示词与检索内容会离开企业控制。
- 边界 B3(应用→数据层):后端访问向量库与训练/微调数据。
- 边界 B4(应用→内部业务系统):插件调用工单系统,属于高权限动作。
数据流图与攻击面标注
下图用数据流图呈现 KB-Assistant 的主要处理过程、数据存储、外部实体与四条信任边界,并在每条流旁标注对应攻击面编号(AS-01~AS-09),便于后续逐条评估。
攻击面清单与威胁建模报告要点
沿数据流图逐条评估后,形成如下攻击面清单。每条包含位置、攻击者视角、影响与建议控制,可直接作为威胁建模报告的“攻击面”章节。
| 编号 | 攻击面 | 所在流/边界 | 典型威胁 | 建议控制 |
|---|---|---|---|---|
| AS-01 | 用户输入 | 用户→P1,B1 | 提示注入、越狱 | 输入过滤、指令隔离、输出审查 |
| AS-02 | 会话与身份 | P1→P2 | 会话劫持、越权访问 | 强会话绑定、最小权限 |
| AS-03 | 提示词模板 | P2→P3 | 系统提示泄露 | 模板与数据分离、敏感指令不下发 |
| AS-04 | 模型 API 出站 | P3→模型提供方,B2 | 数据外传、供应商留存 | 脱敏、合同约束、私有化部署评估 |
| AS-05 | 向量检索 | P2↔D1 | 检索投毒、越权召回 | 文档权限过滤、来源可信度评分 |
| AS-06 | 训练/微调数据 | D2→P2 | 数据污染、后门植入 | 数据溯源、投毒检测、版本审计 |
| AS-07 | 插件调用 | P3→P4 | 工具滥用、参数注入 | 白名单、参数校验、人工确认 |
| AS-08 | 业务系统接口 | P4→工单系统,B4 | 越权操作、横向移动 | 服务账号最小权限、操作审计 |
| AS-09 | 插件回传结果 | P4→P3 | 结果篡改、二次注入 | 结果签名、结构化解析、二次审查 |
报告建议按“系统描述→数据流图→信任边界→攻击面清单→风险评级→缓解措施→残余风险”组织。攻击面编号(AS-xx)应与数据流图一一对应,评审时可直接指图核对,避免遗漏。
常见误区:只关注模型本身而忽略插件与检索链路。实际案例中,AS-07/AS-08 这类“模型触发高权限动作”的路径往往比提示注入造成更直接的业务损失,应优先评估。
可复用的威胁建模报告骨架
1. 系统概述
- 应用名称 / 业务目标 / 用户角色
2. 数据流图(DFD)
- 外部实体、处理过程、数据存储、数据流
- 信任边界 B1~Bn
3. 攻击面清单
- 编号 AS-xx | 位置 | 威胁 | 影响 | 控制措施
4. 风险评级
- 可能性 × 影响 = 风险等级(高/中/低)
5. 缓解措施与责任人
6. 残余风险与复评计划
完成以上步骤后,你应得到一张带攻击面编号的数据流图和一份可评审的攻击面清单。下一步可针对 AS-01、AS-05、AS-06 等高风险项设计具体测试用例,验证控制措施是否有效。