一、威胁分析与风险评估(TARA):从方法论到实战落地
各位工程师朋友,咱们今天聊聊TARA。说实话,我刚入行那会儿,觉得TARA就是个形式化的文档工作——画几个图、填几张表,应付审核就完事了。直到有一次,我在实车测试中真抓到了一个被漏掉的攻击路径,才意识到:TARA不是走过场,它是整个安全测试的“导航地图”。
你想想看,一辆车上有上百个ECU、几千万行代码,如果没有系统性的威胁分析,你根本不知道从哪里下手。所以这一章,咱们把TARA的底牌翻个底朝天。
1.1 TARA方法论概述
TARA,全称Threat Analysis and Risk Assessment。说白了,就是回答三个问题:
- 什么东西值得保护?(资产识别)
- 谁会来搞破坏?(威胁分析)
- 搞成了后果多严重?(风险评估)
目前主流的TARA方法论,我接触过的有这几种:
| 方法论 | 来源 | 特点 |
|---|---|---|
| EVITA | 欧盟项目 | 偏重硬件安全,适合早期架构设计 |
| HEAVENS | 瑞典研究 | 量化程度高,适合安全等级评定 |
| ISO 21434 | 国际标准 | 流程完整,是目前行业主流 |
| STRIDE | 微软 | 简单粗暴,适合快速头脑风暴 |
我个人习惯用ISO 21434的框架,但具体分析时结合STRIDE来拆解威胁类型。为什么呢?因为ISO 21434告诉你“要做什么”,而STRIDE告诉你“怎么想”。
核心要点:TARA不是一次性工作。在概念阶段、开发阶段、生产阶段、运维阶段,都需要迭代更新。我见过不少团队只在项目启动时做一次TARA,后面就扔一边了——结果测试时发现新功能根本没覆盖到。
1.2 资产识别与损害场景
资产识别,是TARA的第一步,也是最容易出错的一步。嗯,这里要注意:资产不只是硬件和代码,还包括数据、功能、甚至通信信道。
举个例子,我在项目中遇到过这样一个案例:团队只把“网关ECU”列为资产,却忽略了“网关与T-Box之间的CAN报文”。结果呢?攻击者通过伪造CAN报文,成功绕过了网关的防火墙。你看,通信信道本身也是资产。
资产识别的一般步骤:
- 列出所有系统元素:ECU、传感器、执行器、通信总线
- 识别数据流:谁和谁通信?传什么数据?
- 标注安全属性:哪些数据需要保密?哪些功能不能中断?
- 定义损害场景:如果这个资产被攻击,会怎样?
损害场景的典型分类:
- 人身安全:比如刹车失灵、气囊误爆
- 财产损失:比如车辆被盗、电池损坏
- 隐私泄露:比如位置轨迹、通话记录被窃取
- 功能降级:比如导航不可用、空调失控
避坑指南:我曾经犯过一个错误——只分析了“最坏情况”。比如认为“刹车失灵”就是最严重的,结果忽略了“刹车响应延迟200ms”这种渐进式风险。实际上,后者在高速场景下同样致命。所以,损害场景要覆盖直接后果和间接后果。
1.3 威胁场景分析与攻击路径
资产和损害场景定好了,接下来就是“坏人会怎么干”。这里我推荐用攻击树(Attack Tree)来建模。为什么?因为它直观,而且能帮你发现组合攻击。
攻击树的基本结构:
- 根节点:攻击目标(比如“远程控制车辆”)
- 子节点:达成目标需要的步骤(比如“获取远程访问权限”→“绕过身份认证”→“发送控制指令”)
- 叶子节点:具体的攻击方法(比如“暴力破解PIN码”、“利用T-Box固件漏洞”)
举个例子,咱们分析一个“通过OBD接口攻击网关”的场景:
攻击目标:通过OBD接口控制车辆
├── 物理接入OBD端口
│ ├── 撬开车窗(物理入侵)
│ └── 通过诊断设备连接(合法但被滥用)
├── 绕过网关过滤规则
│ ├── 发送伪造的诊断请求
│ └── 利用CAN ID白名单漏洞
└── 发送控制指令
├── 解锁车门
└── 关闭发动机
你可能会问:“这些攻击路径怎么发现的?”说实话,没有捷径。我个人的经验是:多问“如果...会怎样”。比如:
- 如果攻击者物理接触了车辆?
- 如果攻击者能发送任意CAN报文?
- 如果攻击者拿到了云端服务器的私钥?
每个“如果”都可能引出一条新的攻击路径。
注意:攻击路径分析时,不要只盯着技术漏洞。社会工程学攻击(比如骗取维修人员的诊断账号)同样需要纳入考虑。我曾经参与的一个项目,攻击者就是通过钓鱼邮件拿到了TSP平台的登录凭证——这比破解任何加密算法都简单。
1.4 风险等级评定与处置决策
风险评定,说白了就是算一笔账:攻击发生的可能性 × 攻击造成的严重性。
ISO 21434中,风险等级通常分为四级:
| 等级 | 描述 | 处置策略 |
|---|---|---|
| Critical | 可能造成人员伤亡 | 必须消除或缓解到可接受水平 |
| Major | 可能造成重大财产损失或隐私泄露 | 必须缓解,可接受残余风险需审批 |
| Moderate | 可能造成功能降级或轻微损失 | 建议缓解,可接受残余风险 |
| Minor | 影响很小,几乎无后果 | 可记录但不强制处理 |
这里有个关键点:可能性怎么算?很多团队拍脑袋定“高/中/低”,这其实不科学。我建议从三个维度评估:
- 攻击门槛:需要专业设备吗?需要物理接触吗?
- 攻击成本:需要多少时间?多少资金?
- 攻击收益:攻击者能得到什么?值得冒险吗?
举个例子,一个需要“拆解ECU并焊接飞线”的攻击,可能性就很低——因为门槛太高,收益又不大。但一个“通过蓝牙广播漏洞远程攻击”的场景,可能性就很高——因为攻击者坐在车里就能干。
处置决策通常有四种:
- 消除:从架构上移除这个风险点(比如去掉不用的调试接口)
- 缓解:增加安全措施降低风险(比如加防火墙、加密通信)
- 转移:通过保险或合同转嫁风险
- 接受:风险很低,暂时不处理
我的建议:对于Critical和Major等级的风险,一定要有可验证的安全目标。比如“攻击者无法通过OBD接口发送未经授权的CAN报文”这个目标,后续要通过渗透测试来验证。别写那种“确保系统安全”的空话——没法测,等于白写。
好了,这一章咱们把TARA的骨架搭起来了。下一章,我会带大家手把手做一个完整的TARA案例——从资产识别到风险处置,每一步都有实战数据。到时候你会发现,TARA其实没那么玄乎,就是一套系统化的“找茬”方法。
记住:没有完美的安全,只有可控的风险。咱们做TARA的目的,不是消灭所有威胁——那不可能——而是把有限的资源投入到最需要的地方。