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权限运行?
我的小技巧: 我习惯把STRIDE做成一张Excel表格,每个威胁类型对应一列,然后针对AI系统的每个组件(数据管道、训练脚本、推理服务)逐行填写。做完这张表,攻击面基本就清晰了。

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 对抗样本

对抗样本,就是给模型输入一些人类看起来正常、但模型会完全认错的数据。比如在一张熊猫图片上加上肉眼几乎不可见的噪声,模型就把它识别成了长臂猿。

为什么会这样?说白了,模型学到的决策边界太「锐利」了。攻击者只要找到边界上的脆弱点,轻轻一推,模型就掉坑里了。

攻击面在哪里?

  • 输入预处理管道:图片缩放、裁剪等操作可能被利用
  • 模型推理接口:直接接收原始输入,没有做输入校验
  • 物理世界部署:比如自动驾驶的路牌识别,贴几张贴纸就能让模型把「停止」牌认成「限速」牌
我的经验: 对抗样本防御没有银弹。我常用的组合拳是:对抗训练 + 输入净化 + 集成推理。对抗训练让模型见过更多「坏样本」,输入净化过滤掉异常像素,集成推理用多个模型投票降低误判率。三者结合,能把攻击成功率从90%降到10%以下。

好了,这一章的内容就到这。STRIDE模型帮你建立威胁清单,攻击树帮你梳理攻击路径,三个关键攻击面则是你重点防守的阵地。下一章,我们会进入实操环节,手把手教你做一次完整的AI系统渗透测试。