ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

功能安全与网络安全协同之道:汽车电子安全流程整合

功能安全与网络安全协同之道:汽车电子安全流程整合 做汽车电子开发的人尤其是像我这样从传统嵌入式转过来的通常都会有一种很明显的感觉功能安全和网络安全以前是两条平行线现在被迫拧成一股绳了。ISO 26262里的故障树还没画完ISO/SAE 21434的威胁分析与风险评估又压过来。很多团队把这两套标准当成两个项目做结果需求互相打架、评审翻车、测试用例重叠最后交付文档厚得像字典可真正能支撑安全决策的证据链却断成渣。我今天想聊的就是怎么把这两套工程流程协调起来让一辆车的功能安全和网络安全不是两张皮而是一套可追溯、可复用、可验证的工程闭环。这篇文章适合功能安全工程师、网络安全工程师、系统工程师也适合刚入行做汽车电子嵌入式开发、正准备搭建安全流程的朋友。1. 功能安全与网络安全为什么必须协调1.1 两套体系不是双胞胎而是性格相反的搭档功能安全和网络安全虽然都带着“安全”两个字但出发点完全不同。功能安全遵循ISO 26262核心是防止车辆在运行中因为“故障”而导致人身伤害包括系统性故障和随机硬件故障。它关心的是传感器漂移、软件写错、芯片失效这类问题用HARA危害分析与风险评估去识别危害事件再用ASIL等级A到D去控制开发强度。网络安全遵循ISO/SAE 21434核心是防止攻击者利用车辆的漏洞窃取数据、篡改指令、干扰正常功能。它关心的是CAN总线被注入伪造报文、UDS诊断接口被暴力破解、OTA升级包被篡改这类问题用TARA威胁分析与风险评估去识别威胁场景再用CAL等级去描述攻击影响程度。看起来两者各管一摊实际上在智能网联汽车里根本分不开。现代汽车已经不是一个封闭的电子系统外部接口越来越多蓝牙、Wi-Fi、4G/5G、OBD、云端调度、无钥匙进入这些都是攻击者的入口。一个网络安全漏洞可以变成功能安全危害比如攻击者通过OBD口注入伪造的制动信号直接导致车辆非预期减速反过来一个功能安全故障也可能削弱网络安全控制比如安全监控模块误报把车身控制器的通信彻底关掉反而给攻击者制造了拒绝服务的机会。我简单列个对比方便大家理解两者定位维度功能安全ISO 26262网络安全ISO/SAE 21434保护对象人身安全资产、数据、功能连续性主要威胁来源系统性故障、随机硬件故障、软件缺陷恶意攻击、漏洞利用、人为破坏核心分析HARA危害分析与风险评估TARA威胁分析与风险评估等级体系ASIL A-DCAL 1-4典型输出安全目标、安全案例网络安全目标、网络安全案例关键验证手段故障注入、HIL测试、失效模式分析渗透测试、模糊测试、漏洞扫描很多团队把这两列当成“两道菜”请两个不同的人分别做最后再拼盘。但真正的问题在于同一个功能、同一个信号、同一个通信链路同时被两套体系索要不同的属性。功能安全要求“关键信号只在特定安全状态可改”网络安全要求“关键信号必须经过加密认证才能写”功能安全要求“故障响应要快”网络安全要求“认证不能省略”。如果不在流程层面替它们搭一座桥后面全是返工。1.2 智能网联让“安全漏洞”可以变成“物理危害”过去我们认为网络安全是IT领域的事汽车里无非是收音机被干扰、导航地图被篡改大不了娱乐系统中个病毒。但随着智能驾驶、线控底盘、OTA升级普及网络安全已经直接作用于物理运动。举个例子一个自适应巡航系统依靠前方毫米波雷达和前视摄像头来感知车辆如果攻击者通过车外蓝牙模块入侵了通信网关向总线发送伪造的“前车距离变小”信号ACC就会认为前车突然减速随即触发紧急制动。这不只是数据错误而是直接改变了车轮的扭矩和制动力导致车内乘员受伤甚至追尾。ISO 26262虽然在用例中考虑过“合理可预见的误用”但严格来说它并没有充分覆盖“故意构造的恶意输入”。攻击者不是随机失效也不是偶发误操作他会主动寻找安全机制的薄弱点绕过限速逻辑篡改安全状态机。网络安全TARA要回答的问题恰恰是功能安全HARA覆盖不到的那部分谁能进来、从哪条路径进来、进来之后能造成多大破坏。所以一个完整的安全体系必须同时具备“防故障”和“防攻击”的能力。网络安全不用什么都会但要能识别攻击意图并触发对应的安全响应功能安全不用去对抗所有黑客但要能在网络攻击导致某个组件失效时让车辆按照安全目标进入降级模式或安全停车。这决定了HARA和TARA必须互相引用、互相校验而不是各出一份独立报告。1.3 如果两组流程各做各的项目会踩哪些坑我在不少项目现场见过类似的情况这里总结几个典型坑看看大家是否也遇到过第一安全机制被网络安全措施削弱。某个团队为了保证总线数据的完整性给关键CAN报文加了SecOC认证但没算好加解密时间结果从报文到达ECU到安全逻辑触发动作延迟超过了功能安全容忍的时间窗。功能安全评审一查直接宕机。第二网络安全控制被功能安全机制误伤。安全监控模块检测到某个传感器信号异常按功能安全要求切换到安全状态并关闭对外通信但这个“关闭通信”的动作恰好也把网络安全团队用来做攻击溯源的日志通道关掉了。事后分析攻击路径时日志空缺束手无策。第三评审会变成“各说各话”。功能安全工程师说这个故障能控制风险可接受网络安全工程师说这个攻击路径无法复现因为测试环境里没有CANoe脚本。两边都没有错但都没有站在对方的场景里看问题导致最后测试用例缺了一大片。第四文档追溯断裂。安全需求走功能安全系统网络安全需求走另一个平台同一个信号在两套文档里用两个ID代码注释也不一致。交付审查的时候找不到一条完整的“需求-设计-测试”链。这些坑的根本原因不是大家不努力而是工程流程没有协调起来。下面我开始讲怎么协调。2. 工程流程协调的核心设计思路2.1 从“两个V”变成“一个V两条泳道”传统汽车电子开发喜欢用V模型左边是需求分析、软硬件设计右边是集成测试、验证确认。功能安全有自己的V模型网络安全也有生命周期流程但项目不能同时跑两个独立的V否则时间点永远对不上。我的做法是把两个流程画成“一个V两条泳道”左岸是功能安全活动右岸是网络安全活动中间用一条河隔开但每一个阶段都有一座桥。具体来说概念阶段功能安全做HARA网络安全做TARA。两者应该共享同一份“相关项定义”和“边界定义”不要把相关项定义做成两份不同描述。如果相关项里没列清外部接口、云端接口、诊断接口后面的分析一定失真。系统阶段功能安全输出安全目标网络安全输出网络安全目标。这两个目标集合在项目计划里要放在同一个“目标库”下便于双方讨论、增删和合并。软件/硬件设计阶段功能安全定义安全机制比如多路冗余、自检、看门狗网络安全定义安全基础设施比如安全网关、SecOC、密钥管理、安全启动。设计评审时要逐条检查确保安全机制不会被网络安全手段挡住网络安全措施不会引入新的单点故障。集成与验证阶段功能安全用故障注入测试验证失效响应网络安全用渗透测试和模糊测试验证攻击响应。两边在同一个HIL台架上跑通统一时间戳统一日志格式。确认与发布阶段安全案例和网络安全案例互相引用作为同一份“安全证据包”的两个组成部分。这样做的关键不是把流程文档合并成一份而是让所有关键活动在时间轴上对齐让不同专业的人在同一个“节拍器”上工作。如果概念阶段只做了HARA没做TARA系统阶段才补TARA那么安全目标往往已经定型很难再融合。2.2 HARA与TARA建立“危害-威胁”联合矩阵这是协调的起点也是最容易出成果的地方。HARA和TARA按理说是两种不同分析但它们有很多交集同一个运行场景功能安全看到的是“传感器失效导致危害”网络安全看到的是“攻击者篡改传感器数据导致危害”。两个危害可能是同一条物理后果只是诱因不同。我建议项目组做一个“危害-威胁”联合矩阵行是HARA识别出的危害事件列是TARA识别出的威胁场景交叉格子里标记“有关联”或“需进一步分析”。这个矩阵不用大而全先把双方已经识别出的条目摆在一起然后讨论以下问题这个危害事件会不会被某个威胁场景主动引发这个威胁场景如果成功是否会影响安全目标的实现有没有哪些安全机制其本身会成为攻击目标有没有哪些网络安全控制其失败模式需要纳入功能安全考虑举个例子对于电动助力转向系统HARA可能会识别出“车速大于100km/h时转向助力突然丢失造成驾驶员控制困难”ASIL等级通常不低。TARA则会识别“攻击者通过OTA固件更新通道注入恶意转向控制固件篡改目标转向角”。两个条目看起来不同但联合矩阵里它们共同指向一个核心需求“转向扭矩输出必须可靠且不可被篡改”。矩阵一旦建立后续所有安全需求和网络安全需求的来源就清晰了。评审会上我们不再争论“这是功能安全的事还是网络安全的事”而是直接查矩阵看有没有遗漏组合。2.3 安全目标与网络安全目标统一收纳逐条映射功能安全的产出通常是“安全目标”比如“防止非预期加速”“保证制动请求在失效模式下能被安全响应”。网络安全的产出则是“网络安全目标”比如“防止通过诊断接口修改标定数据”“防止总线报文被伪造或重放”。这两类目标在语义上经常互补。我的做法是在需求管理工具中建立一个“目标区”不区分部门只区分目标类型。功能安全目标网络安全目标关联原因防止非预期加速防止攻击者通过UDS写入扭矩标定值两项都作用于扭矩生成链保证制动请求真实可靠防止CAN制动报文被伪造或重放攻击可导致物理制动在通信中断时进入安全状态防止安全状态机被网络报文反复唤醒攻击者可能制造持续滥用每一条目标都要编号但编号者不一定是同一人。安全目标和网络安全目标之间通过“关联矩阵”建立双向追溯后续需求变更时可以同时评估影响范围。这样一来当网络安全团队修改口令更新策略时系统会自动提醒功能安全团队评估该改动对可用性的影响避免“改了A结果B崩了”。需要强调一点ASIL和CAL是两种不同的等级。ASIL由严重度、暴露概率、可控性决定CAL由影响程度和风险等级决定。它们不能直接画等号。但在需求条目上可以同时标注两个属性比如一条需求标“ASIL B, CAL 2”说明它同时承担两类义务。这种标注在合并流程时特别有用能够快速识别哪些需求需要两拨人共同签字。3. 实操落地从项目启动到交付的协同流程3.1 团队组织与职责分配流程协调的第一步不是买工具而是把人组织好。我不建议把功能安全工程师和网络安全工程师分别放在两个部门里“远程协作”至少在项目核心周期内应当形成一个联合安全团队。我习惯这样设计职责系统架构师负责维护“相关项定义”给两种分析提供一致的输入。功能安全工程师主导HARA、安全目标、故障树分析、FMEA。网络安全工程师主导TARA、威胁建模、漏洞分析、渗透测试。软件和硬件工程师负责把安全目标和网络安全目标分解为可实现的需求。测试工程师负责在HIL环境里执行故障注入和网络安全测试。项目经理负责把两类活动排进同一个里程碑计划。同时指定一名“联合安全经理”通常是既懂功能安全流程、又了解网络安全基础的人。这个人不一定最精通某个领域但要有能力组织跨域评审并且对双方术语都懂一点。实际操作中我们给每个需求条目增加两个责任字段“FuSa负责人”和“Security负责人”。如果某条需求同时涉及两边两个人都要审批缺一个都不准进入实现阶段。3.2 项目关键节点的双域检查项流程协调不仅靠人头还要把检查项固化到阶段评审中。我列一个最常用的节点检查清单项目启动相关项定义中是否包含了所有外部接口是否包含网络拓扑、数据流、诊断会话、OTA通道如果没有HARA和TARA的基础就不牢。概念评审HARA和TARA的联合矩阵是否完成每个“危害-威胁”交叉点是否都有负责人系统需求评审每个安全目标和网络安全目标是否都有唯一ID目标之间的映射是否双向可查ASIL和CAL属性是否完整软硬件设计评审安全机制和网络安全控制之间有没有冲突安全状态机能否被网络报文干扰HSM加解密时间预算是否满足安全响应时间集成测试评审故障注入用例是否覆盖了至少一条网络攻击路径渗透测试用例是否覆盖了至少一种安全机制触发条件最终发布评审安全案例和网络安全案例是否互相引用漏洞清单是否已关闭或经过风险接受这个清单不需要做得像军规一样僵硬但评审时一定要有人逐条打勾。很多翻车项目复盘时发现概念阶段没有把TARA放在和HARA同等位置后面补得再漂亮根基也是歪的。3.3 需求管理系统里的追踪和命名约定我见过不少团队需求管理工具也上了但功能安全和网络安全各建了一个工程里面各自维护需求和测试用例追溯关系完全靠“人肉记忆”。这种模式在项目早期还撑得住到了几百条需求的时候就彻底乱了。建议从项目第一天就规定命名和追溯规则需求ID前缀功能安全需求用“FS-”网络安全需求用“CS-”系统级联合需求用“SA-”或“CY-”均可但必须保持一致。安全目标ID功能安全目标用“FSC-”网络安全目标用“CSC-”这样一眼能看出类型。追溯属性每条底层需求至少有一个“来源”字段填HARA条目ID或TARA条目ID再设“关联目标”字段填安全目标或网络安全目标ID。变更影响分析任何需求变更都要在“影响分析”字段里同时评估Safety impact和Security impact哪怕这条需求表面上只影响一个方面。因为改动一个信号格式可能同时影响故障检测逻辑和报文防伪逻辑。举个具体例子一条需求“CS-ST-CAN-023对车速信号应用SecOC消息认证码防止重放攻击”它表面上是一条网络安全需求但它的SecurityImpact字段里写了“高”SafetyImpact字段里必须写“中”因为如果SecOC验签失败功能安全侧需要知道如何处理车速信号。这样功能安全工程师第一时间就能被拽进来而不是等测试阶段才发现车速信号被过滤了。我强烈建议在需求管理工具里做“双向追溯报告”每两周自动跑一次输出三个问题的结果是否有需求没有追溯来源是否有安全目标没有对应的实现需求是否有测试用例没有被安全目标引用这三个问题扫过一遍文档碎片化的问题就能大幅减少。3.4 验证确认活动合并故障注入与渗透测试互补这是整个协调最能看到效果的地方。功能安全验证离不开故障注入设备比如在HIL台架上用程控电源模拟电压跌落、用CAN工具向总线注入错误帧、用信号模拟器让传感器输出突变。网络安全验证也离不开各种恶意报文比如模糊测试、重放攻击、诊断异常报文。问题在于很多团队把两类测试放在两套完全不同的环境下做。功能安全工程师用HIL台架测故障注入网络安全工程师用专门的安全实验室测渗透最后两边数据没有统一对齐很难判断同一个安全机制是否同时经受了两种考验。我建议合并测试环境至少做到以下几点在HIL台架上预留网络攻击注入接口。除了正常的CAN/LIN/Ethernet通信还要保留一台“攻击节点”用来发送伪造报文、恶意诊断请求、异常OTA指令。统一日志采集。故障注入设备产生的失效事件和网络攻击设备产生的攻击报文都要打上同一个时间戳基准。事后可以合并回放看攻击发生的瞬间安全监控是否第一时间感知到异常。测试用例双向映射。功能安全测试用例中至少要有一条“模拟通信数据被篡改后的响应”网络安全测试用例中至少要有一条“模拟传感器失效后攻击者试图利用该失效扩大影响的响应”。实际操作中我常用这样的流程先用故障注入设备在ECU的传感器输入线上注入一个偏置信号记录功能安全监控是否能检测到不合理值以及是否触发降级再在CAN总线上注入一条伪造的传感器报文重复同样的驾驶场景观察ECU是否错误信任了这条伪造报文最后把两条测试记录放一起分析“传感器真实失效”和“传感器被伪造”之间安全响应有没有差异。很多项目做下来会发现一个有趣的问题功能安全能识别真实传感器短路却未必能识别总线上的伪造报文因为后者看起来数据太“正常”了。这个结论如果不通过网络测试是拿不到的。反过来网络安全能识别出总线报文的密钥错误但未必知道这个错误发生时系统该如何安全降级。两边一合并才算闭环。3.5 证据链管理与最终评审到了项目后期功能安全要输出安全案例网络安全要输出网络安全案例。不要把它们当成两份独立文档建议在文档库中建立“安全证据包”下面的文件夹结构可以是需求层HARA、TARA、安全目标、网络安全目标、联合矩阵。设计层架构文档、安全机制说明、网络拓扑、密钥管理方案。实现层源代码静态分析报告、单元测试报告、软件组件鉴定报告。测试层故障注入测试报告、渗透测试报告、模糊测试报告、覆盖率报告。管理文档安全计划、变更影响分析记录、评审记录、漏洞跟踪表。ISO 26262中的软件组件鉴定报告通常是针对开源的RTOS、自动生成的代码、供应商提供的预编译软件库做的。功能安全视角下鉴定报告证明这个组件在特定条件下可以被安全地集成进汽车系统。但网络安全视角下光有功能安全鉴定报告远远不够还需要补充漏洞扫描结果、补丁状态、已知漏洞风险分析。所以我建议把软件组件鉴定报告放到“COTS组件安全包”里下面同时挂功能安全鉴定报告和网络安全漏洞报告让审核人员一次性看到完整证据。最终评审时尽量邀请功能安全和网络安全两方审核员一起参加。让网络安全审核员问功能安全工程师“这条安全需求如果被攻击者故意触发你如何区分故障还是攻击”再让功能安全审核员问网络安全工程师“这个加密认证如果失效你的错误处理逻辑是否符合ASIL等级要求”一场评审如果能回答出这样的问题很大程度上就说明两套流程已经协调起来了。4. 常见问题与排查技巧实录4.1 冲突场景加密认证拖慢了安全响应功能安全工程师经常抱怨说网络安全引入加密认证之后响应时间变长了。比如一条关键制动信号从CAN总线到ECU功能安全要求端到端时间不超过10ms但SecOC验签加上HSM计算不小心就多出3ms甚至5ms。遇到这种问题我的排查步骤是抓包分析最耗时的环节。用CANoe或Ethernet分析仪抓取报文记录从信号出现在总线上到ECU应用层产生输出动作的完整时序。分开测试关掉认证和打开认证两种场景。对比延迟差确认瓶颈是在通信收发、HSM计算还是调度逻辑。优化HCU。如果是HSM计算慢考虑启用硬件加速使用对称算法而非非对称算法或者对安全级别高的信号只做轻量级MAC截断不追求全报文加密。重新分配时间预算。把HSM耗时写进功能安全时间分析表把这个耗时当做一个固定延迟项而不是异常避免以后每次评审都重新扯皮。这条经验说明协调不是让功能安全迁就网络安全也不是反过来。而是要把网络安全机制当成一个“系统元素”纳入功能安全的时间预算和失效模式分析中。4.2 冲突场景安全机制与网络安全机制互相覆盖还有一种情况是安全机制和网络安全机制的目标一致但执行时互相覆盖。比如安全网关检测到总线异常按功能安全逻辑关闭某一网络段的通信权限但关闭动作本身可能阻止了网络安全系统下发更新或收集日志导致后续“攻击溯源”做不了。我的经验是在架构设计阶段就要给安全机制画一个优先级矩阵明确如下规则安全状态机独立于网络访问控制。即使网络认证失败安全状态机仍能完成硬件级保护。网络安全日志采集通道是旁路不能因为安全状态切换而彻底关闭。至少保留一条独立日志通道或者把日志先缓存在HSM外部的安全存储区。如果“关闭通信”与“日志上传”冲突优先保证安全状态切换但必须在设计中预先规划好日志恢复机制等安全风险解除后补传。类似的设计在ECU项目里落地时最好用一个“服务依赖仲裁”模块来管理而不是让安全机制和网络安全机制各自直接在总线上抢资源。4.3 工具链、合同与人员能力导致的隐性风险很多项目协调失败不是技术问题而是供应链和人员能力问题。比如采购合同没有明确要求供应商提供ISO/SAE 21434文档。结果功能安全评审时需要网络安全证据供应商只能补一份“简要说明”根本不够。工具链不完整。功能安全团队用的是HLIL、故障注入设备但网络安全团队没有专用的总线模糊测试工具只能拿简单脚本凑合测试覆盖率自然上不去。人员缺少跨域经验。功能安全工程师不了解诊断协议UDS的常见漏洞模式网络安全工程师也不清楚ASIL分解和冗余概念。两边沟通成本极高。我的建议是至少在合同阶段就确定“交付物清单”同时包含功能安全工件和网络安全工件。项目启动时给两家供应商或两个部门指定共同认可的测试平台减少“环境方言”带来的问题。人员能力方面可以在项目组内部定期做一次“安全攻防演练”不是真去打一辆车而是在内部测试靶场里构造异常报文和失效场景让功能安全工程师和网络安全工程师角色互换互相讲解各自的分析结论。这个方法我试过几次效果比读十份标准还好。4.4 案例拆解一个转向系统网关的联合协调我把这些方法串起来说一个简化版的实际案例。某转向系统网关接收转向角信号和车速信号通过CAN总线转发给电动助力转向控制器。功能安全分析发现车速信号错误可能导致助力增益异常严重时驾驶员会感到转向突变。网络安全分析发现攻击者可能通过OBD诊断口进入网关利用UDS的写入服务修改车速信号缓存。协调后的设计如下功能安全侧增加“车速信号合理性校验”。车速必须与两路轮速传感器交叉验证偏差超过阈值时判定为失效进入限制助力模式。网络安全侧对UDS诊断会话启用安全访问0x27服务并规定车速信号的写入只允许在拓展诊断会话中且必须经过密钥验证。通信安全侧对车速CAN报文启用SecOC编辑器在ESD里加上消息认证码防重放。测试时先用故障注入设备模拟某一轮速传感器漂移验证交叉校验能检测并触发降级再启动渗透测试工具尝试通过UDS安全访问绕过校验修改车速信号缓存验证网关会拒绝非法写入并且拒绝后仍能正常转发真实传感器信号。两条测试记录放到同一张矩阵里结论是单点硬件故障不会导致非预期转向外部攻击也无法在不触发认证的情况下篡改车速。这就是功能安全和网络安全相互支撑的结果。如果你也在做汽车电子开发建议从下一个项目开始不要急着买工具、建平台而是先把功能安全和网络安全流程负责人拉到同一间会议室对着同一份需求清单走一遍。这个动作做好了后面所有协调都会顺很多。4.5 排查技巧速查表最后再分享一个实用速查表我平时总喊人把它打印出来贴在评审室门口症状可能原因排查动作需求追溯断裂安全目标与网络安全目标没有双向链接跑一次双向追溯报告清所有orphan需求安全响应超时加密认证耗时未纳入时间预算抓包对比开/关认证时序优化HSM计算测试覆盖重复故障注入和渗透测试针对同一接口但没合并用例建立统一测试矩阵按危害-威胁联合矩阵去重评审争论定义两套流程术语不一致统一建立“术语对照表”评审前花5分钟过一遍网络安全日志丢失安全状态切换关闭了日志通道设计旁路日志或本地缓存后补传组件复用存疑功能安全鉴定报告没覆盖漏洞视角在同一组件安全包里补漏洞扫描和补丁状态这些技巧来自我踩过的坑不一定适用于所有项目但至少能帮大家少走几个月的弯路。
返回列表