2. 车载OTA安全威胁建模

车载OTA的安全治理不能停留在“加个签名”的层面。要真正把风险管住,必须先把攻击者可能走的路径拆开来看。STRIDE 是一套成熟的威胁分类框架,它把威胁分为六类:Spoofing(仿冒)、Tampering(篡改)、Repudiation(抵赖)、Information Disclosure(信息泄露)、Denial of Service(拒绝服务)、Elevation of Privilege(权限提升)。本节把密钥窃取、签名伪造、回滚攻击、中间人攻击这四类典型威胁,映射到 STRIDE 分类上,再用攻击树把“攻击者要达到什么目标、需要哪些前置条件、走哪条路径”结构化地表达出来。

四类威胁的STRIDE映射

先看映射关系,这决定了后续防护措施落在哪个安全属性上。

威胁STRIDE分类被破坏的安全属性典型入口
密钥窃取Information Disclosure + Elevation of Privilege机密性、授权边界HSM/SE调试口、密钥明文落盘、日志泄露
签名伪造Spoofing + Tampering完整性、真实性弱算法、密钥泄露后重签、签名校验绕过
回滚攻击Tampering + Repudiation完整性、版本可信旧版本重放、版本号可写、防回滚计数器缺失
中间人攻击Spoofing + Tampering + Information Disclosure真实性、完整性、机密性伪基站、DNS劫持、TLS降级、证书校验缺失

可以看到,四类威胁并非彼此孤立。密钥窃取往往是签名伪造的前置条件;中间人攻击如果配合回滚,就能把车端“降级”到一个已知存在漏洞的旧固件。因此威胁建模不能逐个孤立分析,而要看到它们之间的因果链。

攻击树:从攻击者目标反推路径

攻击树以“攻击者最终目标”为根节点,向下分解为子目标,叶子节点是可执行的具体动作。节点之间用 AND/OR 连接:OR 表示任选一条路径即可,AND 表示必须同时满足。下面这张图把四类威胁整合成一棵攻击树,根目标是“让车辆运行未授权或降级固件”。

根目标:车辆运行未授权/降级固件 G0(OR) G1 密钥窃取 Information Disclosure G2 签名伪造 Spoofing + Tampering G3 回滚攻击 Tampering + Repudiation 调试口/JTAG 读取密钥 日志/内存转储 提取明文密钥 利用G1密钥 重签恶意固件 绕过签名校验 (弱算法/逻辑缺陷) 重放旧版固件 (版本号可写) 篡改防回滚 计数器 G4 中间人攻击(MITM) Spoofing + Tampering + Information Disclosure 可放大/配合 伪基站/DNS劫持 劫持下载通道 TLS降级/证书 校验缺失 替换固件包 注入恶意载荷 攻击树节点语义 OR 任一子路径达成即可实现父目标(如 G0 下 G1/G2/G3/G4 任选其一) AND 所有子路径必须同时满足(如 G2 需“拿到密钥”且“绕过校验”同时成立)

从图中可以读出几条关键因果链。第一,G1(密钥窃取)是 G2(签名伪造)的 AND 前置条件之一——攻击者拿到密钥后,才能对恶意固件重新签名,使其通过车端校验。第二,G4(中间人攻击)用虚线连到 G2/G3,表示它既可以独立替换固件包,也可以配合回滚攻击把车端降级。第三,G3 的两个叶子节点中,“篡改防回滚计数器”一旦成立,攻击者就能让车端误以为旧版本是“新版本”,这是回滚攻击最隐蔽的路径。

攻击树到防护措施的映射

攻击树的价值在于:每个叶子节点都对应一个可落地的防护点。把叶子节点逐条转成控制措施,就得到下面的对照关系。

叶子节点(攻击动作)对应防护措施验证方式
调试口/JTAG读取密钥量产阶段熔断调试口,密钥仅存于HSM/SE内部尝试连接调试口应失败;密钥不可导出
日志/内存转储提取明文密钥禁止密钥进入日志;内存中密钥加密存储抓取日志与内存镜像,搜索密钥特征串
利用G1密钥重签恶意固件签名密钥分级,固件签名密钥与诊断密钥隔离用诊断密钥签固件应被拒绝
绕过签名校验使用Ed25519/ECDSA-P256,校验逻辑不可跳过篡改固件1字节后校验必须失败
重放旧版固件版本号单调递增,写入受签名保护刷入低版本应被拒绝并记录事件
篡改防回滚计数器计数器存于OTP/eFuse或HSM单调计数器尝试写计数器应失败或触发告警
伪基站/DNS劫持OTA通道强制TLS 1.2+,证书固定(pinning)使用自签证书代理应连接失败
TLS降级/证书校验缺失禁用弱套件,校验服务端证书链与主机名降级到TLS 1.0应被拒绝
替换固件包端到端签名校验,下载后先验签再安装替换包内容后安装应失败

建模时的实操要点

做 STRIDE 分析和攻击树构建时,有几个容易踩的坑。第一,不要只画“攻击者→车辆”的单层图,要把前置条件(AND 节点)显式画出来,否则会漏掉“密钥窃取+签名伪造”这类组合攻击。第二,攻击树的叶子必须是可执行动作,不能写成“攻击者很厉害”这种无法验证的表述。第三,每个叶子都要能对应到一条可测试的验证用例,否则防护措施就是纸面文章。

建议在建模时同步维护一张“威胁—叶子—防护—验证”四列表。每新增一个叶子节点,就立即补上防护措施和验证方式,避免攻击树画完却落不了地。
回滚攻击常被低估。很多团队只做了签名校验,却把版本号放在可写的普通分区里。攻击者只要把版本号改大,就能让旧固件“合法”安装。防回滚计数器必须放在 OTP、eFuse 或 HSM 单调计数器中,且写入操作本身要受签名保护。

把四类威胁放进同一棵攻击树后,可以看到它们共享若干关键节点:密钥、签名校验逻辑、版本控制、传输通道。治理的重点就是把这四个节点做扎实——密钥不出安全边界、签名算法与校验逻辑不可绕过、版本单调且防篡改、传输通道强制加密与证书固定。这四条守住了,攻击树上的大部分路径就会被切断。