4. 威胁建模与攻击面分析:STRIDE模型在AI系统中的应用、攻击树构建、关键攻击面识别
好,咱们进入第四章。这一章我特别想跟你聊聊。
为什么?因为很多AI安全工程师,上来就拿着扫描器乱扫,或者盯着日志看半天。说实话,这效率太低了。我个人的习惯是,动手之前,先做威胁建模。你想想看,连敌人在哪、用什么武器都不知道,你怎么防守?
这一章,我们就来拆解AI系统特有的威胁。我会用STRIDE模型帮你梳理攻击面,再教你画攻击树,最后聚焦三个最要命的关键点:数据投毒、模型窃取、对抗样本。
4.1 STRIDE模型:给AI系统做个体检
STRIDE是微软提出的威胁分类法。六个字母,代表六类威胁。我刚开始用的时候也觉得有点教条,但用久了发现,它就像一张检查清单,能帮你把脑子里的盲区扫干净。
| 威胁类型 | 英文 | 在AI系统中的典型表现 |
|---|---|---|
| S - 身份欺骗 | Spoofing | 攻击者伪造模型API调用身份,冒充合法用户查询模型 |
| T - 篡改 | Tampering | 篡改训练数据、修改模型权重、污染特征工程 |
| R - 抵赖 | Repudiation | 攻击者否认发起了恶意查询,日志缺失导致无法溯源 |
| I - 信息泄露 | Information Disclosure | 模型参数泄露、训练数据被成员推断攻击还原 |
| D - 拒绝服务 | Denial of Service | 大量对抗样本导致模型推理速度骤降,GPU资源耗尽 |
| E - 权限提升 | Elevation of Privilege | 通过模型漏洞获取底层系统shell,控制训练集群 |
嗯,这里要注意。STRIDE不是让你死记硬背的。我建议你每次审计一个新AI系统时,就拿这张表过一遍。比如你审计一个图像识别API,你就要问自己:
- S:API密钥会不会被偷?
- T:上传的图片会不会被篡改后喂给模型?
- R:用户查询有没有完整日志?
- I:模型返回的置信度分数会不会暴露训练数据信息?
- D:如果每秒发一万张超大尺寸图片,模型扛得住吗?
- E:模型服务进程有没有以root权限运行?
4.2 攻击树构建:像黑客一样思考
STRIDE帮你找到了「有什么威胁」,但没告诉你「攻击者具体怎么干」。这时候就需要攻击树了。
攻击树,说白了就是一棵倒着长的树。根节点是攻击者的最终目标,叶子节点是具体的攻击步骤。我曾在一次红蓝对抗中,用攻击树成功预测了对手的攻击路径,提前布了防。
举个例子,攻击者的目标是「窃取我司的推荐模型」。攻击树可以这样画:
根节点:窃取推荐模型
├── 1.0 通过网络窃取
│ ├── 1.1 嗅探推理API流量
│ │ ├── 1.1.1 中间人攻击(MITM)
│ │ └── 1.1.2 抓取HTTPS解密后的明文
│ ├── 1.2 利用模型提取攻击
│ │ ├── 1.2.1 基于标签的模型窃取(Label-Only)
│ │ └── 1.2.2 基于置信度的模型窃取(Logit-Based)
│ └── 1.3 利用API未授权访问
│ └── 1.3.1 枚举API端点,绕过鉴权
├── 2.0 通过内部人员窃取
│ ├── 2.1 社工攻击
│ │ └── 2.1.1 钓鱼邮件获取训练平台账号
│ └── 2.2 物理访问
│ └── 2.2.1 从训练服务器硬盘拷贝模型文件
└── 3.0 通过供应链攻击
├── 3.1 植入恶意依赖包
│ └── 3.1.1 在PyPI上传同名恶意包
└── 3.2 污染预训练模型
└── 3.2.1 从Hugging Face下载被篡改的模型
画完这棵树,你就能清晰地看到:哪些叶子节点最容易实现?哪些节点有防护措施?哪些节点是盲区?
4.3 关键攻击面识别:三个最要命的地方
好了,STRIDE和攻击树都讲完了。现在咱们聚焦到AI系统最脆弱的三个点。说实话,这三个点我几乎在每个项目里都遇到过。
4.3.1 数据投毒
数据投毒,就是攻击者在训练数据里掺沙子。你想想看,模型学到的全是错误关联,能不出问题吗?
我曾经审计过一个NLP情感分析系统。客户反馈说模型对某些特定词汇的反应很奇怪。我一查,发现训练数据里被人恶意插入了大量「正面评价+负面词汇」的样本。比如「这部电影真烂,但我喜欢」。模型学了半天,把「烂」和「喜欢」关联起来了。这就是典型的数据投毒。
攻击面在哪里?
- 数据采集阶段:爬虫抓取的数据可能被污染
- 数据标注阶段:众包标注平台可能有恶意标注者
- 数据存储阶段:训练数据集被未授权修改
4.3.2 模型窃取
模型窃取,说白了就是攻击者通过反复查询你的API,克隆出一个功能相似的黑盒模型。你辛辛苦苦花了几个月、烧了几十万GPU算力训练出来的模型,别人花几百块钱的API调用费就偷走了。
攻击面在哪里?
- 推理API:返回的置信度分数太详细,给了攻击者太多信息
- 模型大小:模型太大,导致推理速度慢,攻击者可以慢慢提取
- 访问频率:没有限制单IP的调用频率
我建议你在API层面做几件事:限制返回的top-k概率、对异常高频调用进行限流、对查询结果加入微小噪声。这些措施不能完全阻止窃取,但能大幅提高攻击者的成本。
4.3.3 对抗样本
对抗样本,就是给模型输入一些人类看起来正常、但模型会完全认错的数据。比如在一张熊猫图片上加上肉眼几乎不可见的噪声,模型就把它识别成了长臂猿。
为什么会这样?说白了,模型学到的决策边界太「锐利」了。攻击者只要找到边界上的脆弱点,轻轻一推,模型就掉坑里了。
攻击面在哪里?
- 输入预处理管道:图片缩放、裁剪等操作可能被利用
- 模型推理接口:直接接收原始输入,没有做输入校验
- 物理世界部署:比如自动驾驶的路牌识别,贴几张贴纸就能让模型把「停止」牌认成「限速」牌
好了,这一章的内容就到这。STRIDE模型帮你建立威胁清单,攻击树帮你梳理攻击路径,三个关键攻击面则是你重点防守的阵地。下一章,我们会进入实操环节,手把手教你做一次完整的AI系统渗透测试。