TARA与网络安全测试:正向驱动与反向回写的双行道 TARA 和网络安全测试之间到底有没有依赖关系这个问题看起来简单但我在项目评审里听过完全相反的答案。做 TARA 的人说测试是下游执行依赖关系当然存在做测试的人则反问你 TARA 里写的那一堆威胁场景这么抽象我连测试目标都找不到拿什么去依赖两边一争论项目就滑向两个极端要么测试没等 TARA 更新就开了工测了一堆对不上的东西报告交上去就吃灰要么 TARA 做完了测试计划迟迟不动等项目进入收尾期才慌慌张张补一轮渗透发现的问题根本排不进迭代计划。在飞斯柯罗参与过的几个整车网络安全项目里我算是把这种别扭状态看了个遍。今天这篇文章不打算绕弯子直接把 TARA 和网络安全测试之间的依赖拆开来讲先对齐两边到底在做什么、产出什么再讲正向和反向两条依赖链路然后聊两个典型的脱钩项目最后给出我在实际项目里验证过的落地做法。内容主要面向正在做 ISO/SAE 21434 落地、或者被 R155 审核逼着做威胁分析和渗透测试的团队也适合刚入行、对 TARA 和测试边界还比较模糊的安全工程师。1. 先讲清楚两边的“输入输出”依赖关系才谈得上先别急着回答“有没有依赖”这个问题之所以争论不休根子在于两边对彼此的产出物理解不一致。TARA 是一套分析和决策过程测试是一套验证和执行过程两者在组织里往往还分属不同团队。如果不先把输入输出对齐后面的依赖讨论全是空谈。1.1 同一个项目里TARA 和测试往往在两个世界我见过太多项目TARA 由安全分析组或功能安全组的人负责他们会用 Excel 或者专门的 TARA 工具拉出一堆资产列表、威胁场景和风险矩阵而网络安全测试则由测试实验室或者外聘的第三方安全公司负责他们的工作语言是测试用例、缺陷单、渗透测试报告。两拨人很少坐在一起开会。这种组织分工本身没有问题问题在于数据传递。TARA 的产出如果停留在“一份通过评审的文档”那测试团队真正拿到的只有 PDF 或者是会议纪要里的一句话——“根据 TARA 结果请对车机执行网络安全测试”。至于到底测哪些接口、用什么攻击思路、做到什么深度、通过标准是什么全部需要测试团队自己猜。反过来说测试团队反馈回来的成果往往也是一份漏洞列表写着哪个端口开放、哪个协议能重放、哪个服务存在缓冲区溢出。这些结论回到 TARA 那边安全分析工程师也不知道该把它挂到哪条威胁场景下面更不知道风险值需要怎么调整。两边的工作流是断的依赖关系自然就变成了一句口头禅。所以我觉得回答“依赖关系是否存在”之前先要做的一步是把双方的交付物放到同一张桌子上。这个动作听起来很简单但能做到的项目并不多。1.2 TARA 的产出清单里哪些是测试真正用得上的按我自己的习惯TARA 的产出物大致可以分成五类。每一类和测试的关系都不一样不能一概而论。第一类是资产清单和资产标识。TARA 首先会识别出与网络安全相关的资产比如车机、网关、T-Box、OTA 升级包、用户个人信息、诊断服务等。这份清单对测试来说是制定测试范围的基础但它本身还不够因为资产清单只是告诉你“有什么”没告诉你“重点在哪里”。第二类是损害场景和影响评级。损害场景描述的是安全事件对人员安全、财产、隐私和运营造成的影响比如“攻击者远程控制车辆制动系统”“攻击者非法获取车主位置数据”。影响评级就是给这些损害场景打一个严重程度分。测试人员拿这个可以判断如果某个被测对象出了安全问题最坏会造成什么后果这对评估漏洞严重程度非常重要。第三类是威胁场景和攻击路径。这是 TARA 里最核心的产出它描述的是攻击者可能通过什么方式、利用什么弱点、沿着什么路径到达目标资产。比如“攻击者通过蓝牙接口发送精心构造的报文获取车机 root 权限进而读取车内敏感数据”。这一部分和测试的关系最直接几乎每条威胁场景都可以转化为一组测试思路。第四类是风险值。经过攻击可行性分析和影响分析每条威胁场景会得到一个风险等级通常用高、中、低或者 CAl 等级来表达。这个值直接决定测试资源应该优先投放到哪里是排查优先级划分的依据。第五类是安全需求和已经采取的安全措施。TARA 之后通常会推导出安全需求比如“OTA 升级包必须验证签名”“诊断服务需要做访问控制”。测试的通过标准往往就依托在这些安全需求上。没有这层东西测试团队很难回答“什么算测过”。1.3 网络安全测试的输入清单跟 TARA 输出逐条对齐反过来看网络安全测试要执行得规范至少需要几样输入测试范围、测试目标、测试用例设计依据、测试优先级、通过标准、测试环境。把这些输入和 TARA 的产出逐条对照依赖关系就很清楚了。测试范围主要对应资产清单和攻击面分析。你测哪些部件、哪些对外接口、哪些总线协议首先要明确范围。没有 TARA 的话范围通常是拍脑袋定的这会导致高风险对象没覆盖到低风险对象反而被反复测。测试用例设计依据主要对应威胁场景和攻击路径。测试人员不是凭空想攻击方法而是从 TARA 里的威胁场景出发去设计具体如何把场景再现出来。比如 TARA 里写了“通过诊断服务默认会话获取未授权写入权限”测试就可以设计一组诊断会话切换和请求构造的用例。测试优先级对应风险值。高风险威胁对应的攻击路径需要做深度验证甚至要做渗透测试级别的尝试低风险威胁做一轮基础验证就可以。测试深度不应该是统一的否则效率会非常低。通过标准对应安全需求。TARA 里推导出来的安全需求比如“未授权用户无法通过诊断接口执行写入操作”这就是测试结论的判定基准。凡是安全需求明确的地方测试报告不应该只给“发现漏洞”这种结论而应该直接对应“XX 需求未满足”。所以你看依赖关系其实不是理论问题而是工程问题。两边只要把输入输出定义清楚依赖关系就自然浮出水面。2. 正向依赖TARA 直接决定测试做什么、做到什么程度正向依赖是最容易理解的一条链路TARA 输出驱动测试计划。这里面的关键不在于“TARA 做完了要安排测试”这种大道理而在于每一步怎么落地。我重点说三个层面风险到优先级的换算、攻击路径到测试步骤的推导以及一个完整实例。2.1 风险值到测试优先级的换算逻辑很多团队在 TARA 里辛辛苦苦算出风险等级然后测试计划里还是“所有功能都测一遍”这就把正向依赖丢掉了。风险值存在的意义就是让有限测试资源向高风险集中。一般 TARA 会用风险矩阵把损害严重度和攻击可行性两个维度组合成高、中、低风险。落到测试计划上我会建议这样换算高风险威胁场景对应的组件需要安排专项渗透测试和模糊测试至少覆盖所有识别出的攻击路径中风险对应做安全功能验证和用例抽样测试重点验证安全需求是否生效低风险做配置检查和合规检查即可。这里想说一个容易被忽视的点风险值不是一次性固定下来的。项目早期的 TARA 可能数据不充分风险值只是初步判断到了开发后期随着攻击面越来越具体风险值可能从低变高也可能从高变低。测试优先级必须跟着风险值更新不能一份测试计划用到底。2.2 从一条攻击路径推导出可执行的测试步骤把 TARA 里的攻击路径转化成测试步骤是正向依赖里最考验功力的一步。不少团队卡在这里是因为攻击路径写得太粗。比如“攻击者通过 OBD 接口发送恶意诊断报文绕过网关安全策略”这一条测试人员拿到后往往不知道从哪里下手。我习惯的做法是先把攻击路径拆解成几个要素攻击前提、攻击入口、利用方式、到达目标、预期影响。然后用这些要素反推测试步骤和测试工具。拿刚才那条路径来举例。攻击前提是“攻击者能够物理接触 OBD 接口且有诊断工具或者自制设备”。测试的时候就要构造一个能连接 OBD 的测试环境用一个可编程诊断仪向网关注入诊断报文。利用方式里包含“绕过网关安全策略”这个环节那么测试就先枚举网关支持的所有诊断服务再看哪些服务在非安全会话下可以执行接着尝试用已知的 OEM 诊断会话口令或者重放攻击来探测访问控制边界。这样一来抽象的攻击路径就变成了具体的测试动作。这个转化不是直觉而是方法。测试人员如果只看威胁场景的文字描述不去拆解攻击步骤测试用例设计就会很浅。2.3 一个车机 OTA 场景的完整推导链用一个实例把正向依赖串起来。假设项目里有一个车机 OTA 升级系统TARA 阶段识别出一条典型的威胁场景攻击者在升级包下载或传输过程中实施中间人攻击替换升级包导致车辆安装了被篡改的软件。这条威胁场景经过分析损害严重度较高因为篡改软件可能影响车辆关键功能攻击可行性如果考虑攻击者需要接入车机网络并且能劫持通信链路可能定为中高最后综合风险值为高。TARA 接着推导出安全需求升级包必须经过数字签名校验签名校验失败时升级流程必须终止回滚机制必须保证失败后能够恢复到上一个可用版本整个升级过程需要有防降级保护。这些需求落到测试环节就对应一组非常具体的测试用例构造一个被篡改的升级包改动一个字节验证安装包是否被拒绝去掉签名或者使用错误证书签名验证系统是否提示校验失败并终止升级在升级过程中断电或者模拟网络中断验证系统是否进入回滚流程尝试把一个已经发布过的低版本套件伪装成高版本验证系统是否允许回退。这条链路走完你再看测试报告它就不再是“测得如何如何”这种描述而是逐条回应 TARA 里推导出的安全需求。这恰恰就是正向依赖的真正价值测试结果可以直接回答“TARA 识别的风险是否被控制住”。3. 反向依赖测试结果不回流TARA 就是一次性纸面工作正向依赖之外还有一条反向依赖链路这条链路经常被忽略但实际上对项目的安全有效性非常关键。所谓反向依赖就是网络安全测试的发现要反馈回 TARA推动资产清单、威胁场景和风险值的更新。如果这条链路断了TARA 就会慢慢和实际安全状态脱节蜕变成一堆纸面工作。3.1 测试发现的新攻击面如何回来更新资产清单网络安全测试尤其是渗透测试和模糊测试几乎总会发现一些 TARA 分析时没有识别到的东西。我举几个真实的例子测试发现车辆 T-Box 的调试串口在量产固件里没有关闭某个供应商控制器存在隐藏的诊断服务不在官方诊断规范里车载信息娱乐系统通过 USB 口暴露了一个未文档化的文件传输协议。这些东西都意味着攻击面比 TARA 分析时更大。正确做法是把这些新发现作为新的资产入口或者新的攻击路径补进 TARA 的资产清单和威胁场景列表然后重新评估风险。这一步很多项目没有做因为测试报告交完就归档了TARA 那边没有任何触发机制提醒它去吸收测试结果。反向依赖做得好不好直接决定安全工作的闭环程度。你测出来一个隐蔽后门如果不回到 TARA 里去评估它的影响、风险等级和是否需要增加安全需求那这个漏洞即使被修复了也只是“修了一个点”没有真正影响整个系统的安全决策。3.2 漏洞修复后的风险重置与威胁场景修订测试发现漏洞之后研发团队通常会做修复。修复完成并不意味着这条威胁场景就结束了TARA 需要跟着做一次风险重置。举个例子测试发现车机蓝牙服务存在未授权连接漏洞攻击者可以借此发送特定指令。TARA 原始分析里这条威胁场景的风险值如果是高修复之后需要重新评估。如果修复方式是增加配对授权和指令白名单那么攻击可行性会降低风险值大概率会从中高降到低。但这里有个关键风险值的降低需要确认修复确实是有效的而且没有引入新的安全弱点。这个过程本身就是测试和 TARA 之间的反复确认。另外修复方式也会影响威胁场景的描述。如果原来是“未授权攻击者直接发送指令”修复后变成“授权攻击者通过白名单内指令执行操作”威胁场景的文字描述、攻击路径和可能的影响都要同步修订。否则TARA 里的描述跟系统的真实状态就是两张皮。3.3 回写机制在项目里失效的三个典型原因反向依赖失效几乎都是机制问题而不是态度问题。我在项目里观察到的失效原因主要有三个第一TARA 和测试由两拨人使用两套工具。TARA 记录在 Excel 或专门工具里测试缺陷记录在 Jira 或者禅道里两条数据链没有映射测试报告里的漏洞号和 TARA 里的威胁场景 ID 对不上。这是最普遍的失效原因。第二TARA 的更新没有触发机制。TARA 通常被当成一个阶段性的输入评审完就算结束。项目后来发生了架构变更、新增功能、供应商更换组件这些事件不会自动触发 TARA 更新测试团队更不知道 TARA 已经过期。第三时间压力下团队选择先跳过回写。项目进入冲刺收尾阶段测试发现的漏洞急需修复研发忙于改代码安全工程师被拉去处理新问题没有时间把测试结果逐条回写 TARA。这种“先欠着”的做法通常最后就是不了了之。所以反向依赖要想成立不能靠个人自觉要靠工作流。具体怎么建我在后面第 5 节会展开。4. 两种“脱钩”项目让我印象最深代价都挺大理论讲了一大堆不如看两个真实翻车场景。我在飞斯柯罗和其他项目里都遇到过类似情况虽然细节不同但问题结构高度相似。4.1 没有 TARA 做“全覆盖测试”测完却无法定性有家供应商做了一个 T-Box 产品的安全测评项目时间紧没做完整的 TARA直接请了第三方安全公司去做渗透测试。第三方公司很敬业对着 T-Box 的每个对外接口做了一堆测试最终报告列了二十多个发现包括串口调试开在带外环境、某个协议栈存在拒绝服务风险、某些诊断请求在外部接口可以执行。拿到报告之后项目组内部陷入了混乱。这些发现看着都挺重要但没有 TARA 的风险值做依据他们没法回答几个核心问题哪个漏洞会直接被外部远程攻击利用哪个漏洞需要物理接触和特殊设备修复优先级怎么排哪些功能可以带着漏洞上线渗透测试报告里没有损害场景分析也没有结合车辆的使用场景去做影响判断所以每条发现的“严重程度”只是测试公司按 CVSS 给的通用评分和这个产品在真实车上的安全语义完全脱节。最后项目组只能对所有发现“一刀切”全部要求修复结果把研发时间拖爆了而且其中两个发现因为在真实场景里根本不可达白白浪费了开发力量。这个项目的问题不在于测试做得不好而在于测试缺少 TARA 这个上下文。没有风险作为排序依据测试结果就是一堆没有重量的信息。4.2 有 TARA 却没有测试用例承接评审过关但心里发虚另一个项目正好反过来。这个项目有完整的 TARA资产、威胁场景、风险评估、安全需求齐全也顺利通过了内部安全评审。但进入开发测试阶段后测试团队拿到的测试计划里没有任何 TARA 转化的安全测试用例。测试工程师依然是按功能需求做测试安全测试只安排了“找一个外部公司做一次渗透测试”这么一项。结果TARA 里列出的那些关键威胁场景比如“攻击者通过远程攻击面获取 root 权限”“升级包被篡改安装”根本没有对应的专项测试去验证。这个项目的表现就是评审会上大家都觉得安全工作做得很全面但真问测试团队“车机 root 有没有测过”“签名校验有没有做对抗测试”没人能给出正面回答。到后来外部审核组抽查追溯矩阵时TARA 里的威胁场景和测试用例对不上只能临时补用例、补执行记录项目差点延期。这种脱钩比前一种更隐蔽因为文档体系是完整的看起来每个环节都有人负责实际上依赖链条是断的。4.3 什么样的项目信号说明依赖链条已经断了结合这两个案例我总结出几个高危信号。如果你的项目出现这些信号大概率 TARA 和测试已经脱钩了测试计划里没有从 TARA 威胁场景直接引用的测试用例测试缺陷单里找不到任何与威胁场景 ID 或者资产 ID 的关联字段TARA 评审和测试执行之间时间隔了很久中间没有增量更新渗透测试报告交上去之后没有触发资产清单或风险值的变更记录安全测试的粒度在所有组件上都是一样的没有高风险组件和低风险组件的区别。这些信号出现任何一个都值得停下来把依赖链路重新对一遍。5. 把这种依赖关系落到工作流里我总结的五个做法前面讲了依赖关系的原理和脱钩的代价最后这部分直接给可操作的做法。这些方法是基于我在项目里踩坑之后总结出来的不敢说放之四海皆准但至少在多个项目上验证过是能用的。5.1 项目计划阶段把 TARA 当测试计划的输入第一件事在项目计划阶段就要把依赖关系写进排期。TARA 的关键交付节点必须早于测试计划启动并且在项目计划里明确标注“测试计划需要 TARA 输出作为前置依赖”。这一点听起来是废话但很多项目排期时就把 TARA 和测试并行安排导致测试团队只能先用自己的猜测做计划。我建议在项目计划里设置几个依赖检查点TARA 初步完成后测试团队要基于初步结果起草测试策略TARA 基线版本发布后测试计划才能正式定稿后续 TARA 每次更新测试计划里相关的用例范围和优先级都要同步复查。5.2 迭代开发里 TARA 增量更新与测试轮次同步在敏捷迭代项目里TARA 如果只在项目启动时做一次后面又脱节了。我建议把 TARA 也改成增量模式每个迭代只更新和本次迭代相关的那部分资产和威胁场景不必每次全量重做。这样测试团队在每个迭代都能拿到最新的威胁场景清单新增功能涉及的攻击面在迭代内就能安排安全检查。TARA 增量更新的频率和测试轮次对齐怎么强调都不过分这是让依赖关系持续生效的重要机制。5.3 用追溯矩阵把威胁场景和测试结论绑死防止脱钩最直接的手段就是建立威胁场景和测试用例之间的追溯关系。追溯矩阵不需要做得特别复杂但至少要有这几列威胁场景 ID、攻击路径描述、风险等级、对应安全需求、测试用例 ID、测试执行结果、缺陷单号、是否闭环。有了这张表评审时只需要看两件事第一所有风险等级为中高以上的威胁场景是否都有关联的测试用例第二测试用例执行结果是否与预期一致不一致的缺陷是否已经回写 TARA 重新评估。这两条检查通过依赖关系基本上就立住了。5.4 人员分工上让两边互相“挑刺”最后一点人员层面的安排。我会建议不要把所有 TARA 工作只分配给一个人也不要把测试工作完全外包给第三方就不管。关键在于让 TARA 分析师和测试工程师有交集。一个实用的做法是TARA 分析师至少要参加一次测试用例评审测试工程师至少要参加一次 TARA 结果复核。让做分析的人看到测试执行中的实际情况让测试的人理解威胁场景的推导逻辑。这种交叉评审不需要很多时间但对消除两边认知错位很有帮助。项目里如果能把这几条做到TARA 和网络安全测试之间就不再是“有关系但说不清”而是真正变成一条驱动安全工作的双行道。做测试的人拿着 TARA 的输出设计用例做 TARA 的人拿着测试结果更新风险两边互相咬合安全工作才真正转动起来。飞斯柯罗那边后来复盘时最认可的一个改造就是把这个追溯闭环重新建立起来效果也是从迁移到新项目以后才真正体现出来的。说到底网络安全不是一个文档问题也不是一个测试问题它是一连串决策和执行之间的接力接力棒交得顺不顺才是项目安全质量的关键。