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)五个维度打分,输出风险优先级。
- 攻击树:以"攻击者目标"为根节点,逐层分解为子目标与具体攻击手段,可标注成本、难度与前置条件,适合分析多步组合攻击。
二、方法流程:从数据流图到风险清单
标准流程通常分为五步:划定范围、绘制数据流图(DFD)、逐元素套用 STRIDE、用 DREAD 打分、对高分项构建攻击树并输出缓解措施。下图展示了 OTA 全链路威胁建模的结构化流程与关键对象。
在绘制 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: 重放旧包应被拒绝并产生安全告警日志
四、误区与复盘
常见误区二:把 DREAD 分数当作绝对真理。不同团队对"可发现性"的理解差异很大,应固定评分标尺并定期校准。
常见误区三:攻击树只画一层就结束。真正的风险常藏在第三、四层的组合路径中,例如"弱随机数 + 可预测令牌 + 无速率限制"。
复盘时应把每次真实漏洞或演练结果反哺回威胁模型:新增的威胁条目、被证伪的假设、评分偏差都要记录在版本化文档中。建议将威胁模型与需求管理、代码评审、渗透测试用例打通,使"建模—开发—验证"形成可追溯的闭环。
| 方法 | 核心作用 | OTA 场景典型输出 | 使用时机 |
|---|---|---|---|
| STRIDE | 分类枚举威胁,保证覆盖面 | 六类威胁清单,按数据流元素归属 | 架构设计、需求评审 |
| DREAD | 量化风险,排出修复优先级 | 风险分值表与 Top-N 高危项 | 迭代排期、资源分配 |
| 攻击树 | 推演多步攻击路径与前置条件 | 根目标分解图、叶子攻击手段 | 高危项深挖、渗透用例设计 |
综上,STRIDE 提供广度、DREAD 提供排序、攻击树提供深度,三者结合才能把 OTA 全链路的威胁从"模糊担忧"转化为"可执行、可验证、可追踪"的治理项。下一阶段的工作,就是把这些威胁条目落到具体的加密、鉴权、监控与应急机制上。