3. OTA安全威胁建模

OTA(Over-The-Air)升级链路横跨云端、传输网络、车端网关、域控制器、ECU 以及升级代理等多个信任域,任何一环被突破都可能演变为批量车辆被控、固件被替换或密钥被窃取的重大事件。因此,OTA 安全不能只靠"打补丁式"的漏洞扫描,而应在设计阶段就引入结构化的威胁建模方法,把攻击者的视角前置到架构评审中。本节围绕 STRIDE、DREAD 与攻击树三种互补方法,说明如何识别 OTA 全链路威胁并排出治理优先级。

一、核心原理:三种方法各司其职

威胁建模的本质是回答三个问题:哪里可能被攻击、攻击会造成什么后果、应该先修什么。STRIDE 负责"分类发现",DREAD 负责"量化排序",攻击树负责"路径推演",三者组合形成从广度到深度的闭环。

  • STRIDE:微软提出的六类威胁分类法,包括仿冒(Spoofing)、篡改(Tampering)、抵赖(Repudiation)、信息泄露(Information Disclosure)、拒绝服务(Denial of Service)与权限提升(Elevation of Privilege),用于系统化枚举威胁,避免遗漏。
  • DREAD:从潜在损害(Damage)、可复现性(Reproducibility)、可利用性(Exploitability)、受影响用户(Affected Users)、可发现性(Discoverability)五个维度打分,输出风险优先级。
  • 攻击树:以"攻击者目标"为根节点,逐层分解为子目标与具体攻击手段,可标注成本、难度与前置条件,适合分析多步组合攻击。
实践要点:STRIDE 用于"画全地图",DREAD 用于"标红高危区",攻击树用于"验证最危险的几条路径是否真的可行"。三者不是替代关系,而是流水线关系。

二、方法流程:从数据流图到风险清单

标准流程通常分为五步:划定范围、绘制数据流图(DFD)、逐元素套用 STRIDE、用 DREAD 打分、对高分项构建攻击树并输出缓解措施。下图展示了 OTA 全链路威胁建模的结构化流程与关键对象。

OTA 全链路威胁建模流程与对象 云端 OTA 平台 签名/密钥/发布 传输通道 TLS/蜂窝/WiFi 车端网关/T-Box 鉴权/转发 OTA 代理 校验/回滚 目标 ECU 刷写/运行 ① STRIDE 分类发现(逐元素套用) S 仿冒 T 篡改 R 抵赖 I 信息泄露 D 拒绝服务 E 权限提升 示例:伪造云端下发指令(S)、篡改固件包(T)、刷写后无审计日志(R)、泄露车辆 VIN 与密钥(I)、升级服务被打瘫(D)、代理进程提权刷写安全域(E)。 ② DREAD 量化排序 D 潜在损害 9 R 可复现性 7 E 可利用性 6 A 受影响用户 10 D 可发现性 5 ③ 攻击树推演(根目标:非法刷写 ECU) 非法刷写 ECU 绕过签名校验 劫持升级通道 降级回滚攻击 叶子节点:弱密钥、中间人、旧版本漏洞、回滚保护缺失 ④ 输出:威胁清单 + 风险等级 + 缓解措施 + 验证用例 缓解示例:强制双签名与安全启动、TLS 双向认证、防回滚计数器、升级日志上链、代理最小权限、灰度发布与熔断。

在绘制 DFD 时,应把 OTA 链路上的外部实体(车主 App、诊断仪、第三方内容源)、处理过程(签名验证、差分还原、刷写调度)、数据存储(密钥库、版本清单、日志)与数据流(固件包、令牌、状态回执)全部标出,再对每条流和每个存储套用 STRIDE,才能覆盖"跨信任边界"的威胁。

三、案例场景:一次典型的 OTA 降级攻击建模

假设某车型支持"失败自动回滚"。建模时以攻击树展开:根目标为"让车辆运行含已知漏洞的旧固件"。第一层子目标包括:获取旧版签名包、绕过防回滚计数器、诱导代理执行回滚。继续分解可得到叶子节点——旧包从公开渠道泄露、计数器存储于可写分区、回滚接口未做二次鉴权。对应 STRIDE 分类为篡改(T)与权限提升(E),DREAD 打分中"受影响用户"为全量车队,得分极高,因此必须优先治理。

威胁记录示例(YAML 片段)
threat_id: OTA-T-014
stride: Tampering
target: ota_agent.rollback_handler
description: 回滚接口未校验版本单调性,可重放旧固件包
dread:
  damage: 9
  reproducibility: 7
  exploitability: 6
  affected_users: 10
  discoverability: 5
score: 37
mitigation: 引入单调递增版本计数器 + 回滚白名单 + 二次签名
verify: 重放旧包应被拒绝并产生安全告警日志

四、误区与复盘

常见误区一:只对"云端"建模,忽略车端代理与 ECU 的本地攻击面。实际上,物理接触、诊断口(OBD)与车内 CAN 总线往往是绕过云端防护的捷径。
常见误区二:把 DREAD 分数当作绝对真理。不同团队对"可发现性"的理解差异很大,应固定评分标尺并定期校准。
常见误区三:攻击树只画一层就结束。真正的风险常藏在第三、四层的组合路径中,例如"弱随机数 + 可预测令牌 + 无速率限制"。

复盘时应把每次真实漏洞或演练结果反哺回威胁模型:新增的威胁条目、被证伪的假设、评分偏差都要记录在版本化文档中。建议将威胁模型与需求管理、代码评审、渗透测试用例打通,使"建模—开发—验证"形成可追溯的闭环。

方法 核心作用 OTA 场景典型输出 使用时机
STRIDE 分类枚举威胁,保证覆盖面 六类威胁清单,按数据流元素归属 架构设计、需求评审
DREAD 量化风险,排出修复优先级 风险分值表与 Top-N 高危项 迭代排期、资源分配
攻击树 推演多步攻击路径与前置条件 根目标分解图、叶子攻击手段 高危项深挖、渗透用例设计

综上,STRIDE 提供广度、DREAD 提供排序、攻击树提供深度,三者结合才能把 OTA 全链路的威胁从"模糊担忧"转化为"可执行、可验证、可追踪"的治理项。下一阶段的工作,就是把这些威胁条目落到具体的加密、鉴权、监控与应急机制上。