ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从威胁模型到报文验证:智能汽车网络安全标准落地指南

从威胁模型到报文验证:智能汽车网络安全标准落地指南 简介这是一份围绕智能汽车网络安全标准的专业PPT资料内容以2018年行业技术分享为基础面向智能汽车研发人员、网络安全工程师及标准研究人员系统梳理了该领域的关键技术与标准化方向。资源共1个pptx文件压缩包约4.98MB便于直接阅读或作为内部培训、技术研讨的参考资料。目前已有594人学习使用。PPT重点涵盖关键零部件计算平台、可信计算TPM与SHE、基于隔离的体系架构、全生命周期评估以及标准化发展情况和团队实践案例。通过实际入侵事件说明网络安全失效可能造成功能安全危害进而引出高性能计算平台、多域融合、Trusted Platform Module等关键技术适合希望快速建立智能汽车网络安全标准框架认知的读者可直接获取其中关于可信计算、安全架构及标准实践的要点梳理。1. “智能汽车网络安全标准”不等于合规清单而是从威胁模型倒推出来的工程约束按清单一条条打勾是解读“智能汽车网络安全标准”这类PPT最常见的姿势也是团队最容易放松警惕的开始。评审要过、报告要交清单确实能兜底但真实攻击从来不按条款顺序来今天从OBD口进来明天从T-Box的远程端口进来后天直接通过未加密的CAN报文把假车速发给仪表。这份标准真正解决的是“攻击者用多低的成本、走哪条路径、把车辆的哪些能力打失效”的问题而不是“我们做了几项安全功能”。它适合三类人给整车做安全设计与测试的工程师、要应对法规评审的质量与合规人员以及智能网联相关竞赛里想把通信安全做扎实的车队。标准本身是一套约束约束从威胁分析来最终落到开发、测试与取证上。2. 把标准拆成四层再讲法规、流程、技术、测试PPT 才不会变成字典我见过太多版本的网络安全标准PPT第一章堆术语第二章贴法规编号第三章全是加密算法名字评审专家翻完只记住“AES-128”。真正能落地的讲法是把标准拆成四层法规层回答“哪些必须做”流程层回答“按什么顺序做”技术层回答“具体做什么”测试层回答“怎么证明做了”。四层串起来才是一份能指导开发的文档。2.1 法规层UN R155 与 GB 44495 的强制边界哪些环节必须过审法规层的核心是“强制边界”。目前行业里最常被引用的两类依据一类是出口市场绕不开的 UN R155另一类是国标 GB 44495。对大部分从业者来说不需要背条款但必须知道它在管谁。UN R155 要求整车企业建立网络安全管理体系CSMS覆盖从概念、开发、生产到售后和退役的全生命周期做车型准入时还要提交针对具体车型的网络安全证据。这意味着供应商不是“配合”角色而是要被纳入OEM的审核范围你提供的ECU有没有按标准走开发流程、有没有做过TARA、能不能提供测试证据都会变成整车过审的输入。GB 44495 作为国内强制国标把整车信息安全的技术要求摆到了台面上不再只是推荐做法。它管的是“整车”层面的安全能力比如对外部接口的访问控制、对重要数据的保护、对异常行为的监测。常见误区是把国标当成“每辆车都要上全套安全组件”结果预算翻倍、工期拉长。实际上边界是按“暴露面”和“影响”划的——没有外部通信接口的ECU优先级可以往后放一键启动、远程控车这类功能才是审查重点。法规层落地时我一般会画一张“法规-对象-动作”的映射表这才是PPT里第一张值得展示的表法规/标准约束对象关键动作常见误区UN R155OEM 供应链建立CSMS、车型审批、事件响应以为只是文档工作GB 44495整车信息安全接口访问控制、数据保护、异常监测忽略“整车视角”只做单ECU安全ISO/SAE 21434所有参与方TARA、安全需求、验证活动把流程做成“一次性文档”2.2 流程层ISO/SAE 21434 的 TARA把威胁变成可管理风险表流程层要讲清楚TARA威胁分析与风险评估它是整个标准的核心引擎。我第一次带团队做TARA时犯了所有新手都会犯的错直接把“使用XSS攻击Web应用”这类IT威胁往车上套套了半天评审专家问“这条威胁对应的资产是什么、攻击入口在哪”答不上来。TARA不是写作文。它分四步先识别资产再分析每个资产的威胁场景接着评估影响和攻击可行性最后算出风险等级并做处置决策。每个威胁场景必须带上“攻击入口—目标资产—攻击路径—影响结果”四要素。举例来说“通过蓝牙漏洞进入IVI车载信息娱乐系统再通过网关向制动系统发送伪造报文”才是一条可评估的威胁场景“被黑客攻击”这种描述不算。标准落地最常见的问题是把TARA当成文档交付物而不是开发输入。我现在的做法是让TARA跟着项目里程碑走概念阶段做首版拿到电子电气架构拓扑后刷一版软硬件设计冻结前再刷一版。每次刷新只改变动的部分保留历史版本这样评审问“这个风险为什么降级了”时你能翻出当时的分析和决策记录。提示TARA里的每个风险结论都要可追溯将来测试用例是要反查到这个威胁场景的没有追溯关系的TARA测试阶段就是黑匣子。2.3 技术层从安全启动到通信加密标准落到 ECU 上的九个抓手流程层之外技术层是评审团最爱追问的部分。标准本身不会规定“你必须用XX算法”但业界已经收敛出一组相对固定的技术抓手用于在控制器和整车上落实安全目标。安全启动从Bootloader到App的签名链校验防止固件被替换。安全调试接口量产前禁用或做访问认证防止调试口被直接连出来读写Flash。HSM/SHE 密钥管理密钥不落明文存放在硬件安全模块中。安全日志记录安全事件且日志不可被普通用户擦除或篡改。安全更新升级包签名校验、版本单调性校验防止回滚攻击。车内通信保护对关键报文做认证比如SecOC做消息真实性校验。诊断访问控制UDS服务需要安全访问认证不同诊断角色走不同权限。异常检测对CAN总线、以太网流量做行为监测。敏感数据保护位置、账号、行驶数据的加密存储和最小化采集。技术抓手工程动作验证手段安全启动签名链、信任根刷写非法固件确认被拒绝调试口熔丝/JTAG锁定尝试连接调试器确认无法访问密钥管理HSM/SHE 存储检查密钥是否明文落盘安全日志哈希链、防擦除区域尝试擦除日志确认失败安全更新OTA验签版本计数回滚旧版本确认被拒绝通信认证SecOC/AES-CMAC篡改报文确认被丢弃诊断控制安全访问、角色鉴权未认证调用0x27服务确认被拒异常检测总线监听、规则引擎注入异常流量确认有告警数据保护加密存储、脱敏导出数据确认无法解析这些抓手不是每辆车都要全上。商用车和乘用车侧重点就不一样价位不同的平台也要分级处理。基础版至少要覆盖安全启动、诊断访问控制和安全日志带远程控制功能的必须加安全更新和HSM。2.4 测试层用“对抗性测试用例”反推设计是否达标测试层容易被写成“部署了XX工具、跑了XX小时”的流水账但评审想看的是这些测试到底证明了什么安全能力。我的习惯是先从攻击路径导出测试用例再反向映射到标准要求而不是按标准条款逐条找用例。比如标准要求“对诊断服务做访问控制”如果只写“测试工程师使用UDS工具成功读取了VIN”这不算安全测试应该写的是“使用未经安全访问认证的诊断仪发送0x22服务读取车辆配置确认返回NRC 0x31或0x33”。这样才能证明访问控制真的生效。对抗性测试用例的常见来源包括越权诊断、CAN报文重放、伪ECU注入、OTA降级包刷写、调试口枚举、异常帧泛洪。每条用例最后都要落一个追溯关系测试用例ID → 安全需求ID → 威胁场景ID。追溯矩阵是评审专家最认的证据比贴十页测试截图都管用。3. 从标准到工程按 TARA 输出安全需求的最小可行流程很多团队拿到标准后卡在第一步知道要做TARA但不知道怎么把一个“高大上”的风险分析落成开发能用的安全需求。我分享一套自己在项目里反复用的小流程规模不大但足够完整覆盖从资产识别到需求输出的全链路。3.1 第一步资产识别——把 CAN 信号、OTA 包、诊断服务都写成资产表资产识别做得粗后面的威胁建模全是空中楼阁。常见做法是把ECU当资产列一个ECU清单然后开始分析结果忽略了一个事实攻击者真正攻击的是ECU上的数据、服务和通信链路。所以我会把资产分成三类来列物理资产ECU、网关、T-Box、逻辑资产诊断服务、CAN信号、OTA升级包、数据资产密钥、日志、VIN、用户位置。资产ID资产名称通信协议访问接口所属安全域失陷影响A-001网关CAN / CAN FDOBD口、总线车身域车辆控制被改写A-002OTA升级包HTTPST-Box远程入口云端-车端链路固件被替换A-003诊断会话UDS over CANOBD口诊断链路敏感数据被读取A-004密钥内部存储HSM安全单元通信认证被绕过识别资产时最容易漏的是“数据流”。我后来改成先画整车网络拓扑再在拓扑上标数据流最后把数据流上的节点都登记成资产。这个习惯帮我补上了不少漏洞比如“IVI和网关之间的以太网链路”就是第一版资产清单里完全没有的。3.2 第二步威胁建模——STRIDE 在车控场景的映射与攻击路径威胁建模我倾向用STRIDE做引导但绝不机械套用。有些类别在车控场景里很关键有些则弱需要自己做裁切。STRIDE类别车控场景例子典型攻击入口Spoofing 伪装伪造ABS报文让系统误判车速CAN总线 / 伪ECU注入Tampering 篡改篡改OTA包中的固件或配置T-Box远程 / 售后刷写工具Denial of Service 拒绝服务高优先级CAN ID灌包挤占总线OBD口 / 暴露的以太网口Information Disclosure 信息泄露未授权读取诊断数据和位置信息蓝牙/WiFi/诊断口Elevation of Privilege 提权从IVI的APP权限拿到网关权限蓝牙协议栈漏洞Repudiation 抵赖否认发送过关键控制指令安全日志缺失每个威胁场景要绑定攻击路径这是新手最容易忽略的。我推荐的格式是“入口 目标 动作 影响”。一条合格的威胁场景长这样“攻击者通过OBD口接入诊断链路向网关发送未经SecOC认证的转向控制报文导致转向指令被接受”。攻击入口、目标资产、动作、影响四个要素全部齐了。威胁场景总会很多项目初期不要求全先把高风险资产和外部暴露接口覆盖住后续迭代再补齐。整车对外暴露的接口优先做远程通信入口、蓝牙/WiFi入口、诊断口、充电口任何一个都是攻击者的跳板。3.3 第三步风险计算——把影响和攻击可行性放进同一个矩阵风险计算不需要多高深关键是让评审能看懂结论是怎么来的。我常用三档影响加三档可行性的矩阵比复杂公式好解释。影响等级S3表示可能涉及人身安全比如制动、转向被非预期控制S2表示影响财产或数据比如车辆被盗、隐私泄露S1表示影响功能可用性比如娱乐系统瘫痪。攻击可行性等级P3表示远程、低成本、无需特殊设备P2表示需要短暂的物理接触、一定专业知识或中等成本设备P1表示需要持续物理接触、专用设备或已获得的密钥授权。攻击可行性影响 S3影响 S2影响 S1高 P3高风险高风险中风险中 P2高风险中风险中风险低 P1中风险中风险低风险处置决策四选一降低比如加认证、加密、白名单规避比如直接取消某个暴露接口转移比如通过保险或外部补偿机制分摊接受只适用于低风险项且必须记录“为什么接受、何时复审”。这一步最常出现的争论是“这个风险到底算不算中”。我的经验是风险等级不是几何题目只要影响和可行性评估过程有依据、有记录结论可追溯就行不要为了把风险数量压下去人为把可行性从P2改成P1。注意风险处置决策必须有责任人。没有责任人的风险项开发阶段一定会烂尾。3.4 第四步安全需求——每条需求都带威胁场景和验证方法安全需求不是产品功能描述而是“为了应对某个威胁场景系统必须具备的能力”。需求条目要能追溯回威胁还要能落到验证否则测试阶段就是各说各话。需求编号来源威胁ID安全目标需求描述验证方法SEC-001TH-008防止未授权诊断访问所有UDS服务必须经过安全访问认证认证失败最多连续5次之后锁定1分钟自动化诊断测试未认证读取DID确认NRC 0x33连续5次错误后确认锁定SEC-002TH-012防止安全关键报文重放网关应丢弃带有重复会话ID的制动控制报文CAN报文重放工具重放相同报文确认网关拒绝需求描述必须“可测试”。写“系统应具备安全通信能力”等于没写。我会逐条问自己测试人员拿到这条需求能不能直接写出通过/不通过的判据不能就退回重写。安全需求要进入系统需求管理工具跟随开发迭代每条需求状态变化时同步更新追溯关系。4. 用报文级工具验证安全设计CAN 与车载以太网的实测指令标准写得再好测试才是照妖镜。这一章分享三个我在实测中反复用的报文级验证手段覆盖CAN总线诊断越权、总线异常流量发现和车载以太网SOME/IP的重放篡改。4.1 CANoe 与 Wireshark 的配合从总线日志里找异常流量常见做法是CANoe一边仿真激励一边记录总线日志导出为BLF或ASC格式随后把日志文件丢进Wireshark做协议解析和过滤。Wireshark对CAN和CAN FD都有解析支持几百兆的日志也能快速过滤出目标报文。# 用 tshark 在 BLF 日志里过滤 CAN 报文和 UDS 诊断请求 tshark -r bus_log.blf -Y can tshark -r bus_log.blf -Y uds uds.service 0x22第一次跑通这个流程的人常踩的坑是过滤器字段写错或版本不支持。先用tshark -G fields | grep -i can查一下当前版本支持哪些协议字段再写过滤条件。另外CAN日志的时间戳单位一般是微秒级分析重放攻击时时间戳比报文内容更值得看——正常驾驶时同一条报文不会有严格的等间隔规律异常流量往往存在固定周期或突发特征。4.2 用 Python 构造越权诊断请求从 vcan0 发起 UDS 探测测试诊断访问控制是否生效最直接的办法是在虚拟CAN接口上伪造诊断请求。下面是一组最小步骤先准备虚拟CAN接口再用Scapy构造UDS请求。# 创建虚拟 CAN 接口 vcan0 sudo modprobe vcan sudo ip link add dev vcan0 type vcan sudo ip link set vcan0 up# 通过 vcan0 向 ECU 发送 UDS 0x10 03进入扩展会话和 0x22读VIN from scapy.all import * from scapy.contrib.automotive.uds import UDS, UDS_DiagnosticSessionControl, UDS_ReadDataByIdentifier # 0x7E0 是常见物理请求ID0x7E8 是ECU响应ID pkt1 CAN(id0x7E0) / UDS() / UDS_DiagnosticSessionControl(session0x03) sendp(pkt1, ifacevcan0, verboseFalse) pkt2 CAN(id0x7E0) / UDS() / UDS_ReadDataByIdentifier(ident0xF190) sendp(pkt2, ifacevcan0, verboseFalse)其中0x10 03是进入扩展会话的经典组合很多安全相关的DID只允许在扩展会话里读0x22 0xF190是读取VIN的请求。特别提醒如果改动的DID或服务需要多帧传输比如VIN超过单帧承载长度单帧发送的代码不够用要上ISOTP传输层。实验环境里建议先用短DID跑通验证链路再换到CANoe或python-can isotp库去处理多帧数据。测试时开着candump vcan0观察响应正常安全策略下未认证的0x22请求应返回NRC 0x31或0x33如果返回0x62加数据说明诊断访问控制没有生效标准落地的第一条就翻了车。4.3 SOME/IP 重放与篡改绕过会话 ID 的报文再造车载以太网场景里SOME/IP是IVI和域控制器之间最常用的协议之一。对SOME/IP做安全验证我习惯从真实抓包文件里提取报文修改关键字段后重放看服务端是否识别异常。# 从 pcapng 提取 SOME/IP 请求递增 SessionID 后重放 from scapy.all import * from scapy.contrib.automotive.someip import SOMEIP pkts rdpcap(traffic.pcapng) for p in pkts: if SOMEIP in p and p[SOMEIP].MsgType 0x00: # 0x00 是 REQUEST q p.copy() q[SOMEIP].SessionID (q[SOMEIP].SessionID 1) 0xFFFF sendp(q, ifaceeth0, verboseFalse) print(freplayed: {q[SOMEIP].MessageID:08x}, session{q[SOMEIP].SessionID})SOME/IP的SessionID字段是用来匹配请求和响应的正常客户端会单调递增。很多实现只校验消息类型和接口ID不校验SessionID连续性。把已抓到的请求递增SessionID后重放如果服务端正常响应说明应用层缺少重放防护。更进一步可以修改报文负载里的速度值或挡位字段看服务端是否用签名或MAC校验载荷完整性不做校验说明这条安全需求实际没落地。注意重放测试前要断开安全气囊、制动等执行器的实际输出或者用台架环境跑别在实车上拿真实执行器做实验。5. 避坑标准落地时最常见的 5 个“假合规”这几年看过不少声称“符合网络安全标准”的项目也在评审中见过反复出现的问题。这几条属于高发翻车点写出来给后面的人省点血泪学费。5.1 TARA 评审通过测试一攻就破现象TARA做了风险矩阵漂亮评审签字也顺利渗透测试时攻击者绕过IVI直接进入网关TARA里没覆盖这条路径。原因资产清单只列了ECU没列ECU之间的数据流和对外接口。ECU清单看起来完整但攻击路径恰恰藏在“链路”上。解决资产识别阶段把数据流画出来每个跨域通信、每个外部接口都记成资产新威胁场景只要带攻击路径就补进TARA。TARA必须跟着架构图更新而非一份静态文档。5.2 算法 AES-128 就达标密钥存储才是重头现象安全方案写“AES-128-CBC加密、RSA-2048签名”评审一路通过测试时用调试工具从Flash里直接dump出明文密钥。原因把“算法强度”当成了“安全强度”。算法只是密码系统的一半密钥存哪里、怎么防止导出才是决定成败的另一半。解决密钥必须放进HSM或SHE普通CPU无法直接读取密钥材料生产环境的密钥烧录要走独立安全流程测试环境也不能为了方便把密钥写死在明文里。评审时除了问“用什么算法”还要追一句“密钥在哪存、谁有权限访问”。5.3 OTA 签名做得很足回滚攻击没人管现象OTA升级包验签测试全过安全评审也认为固件更新链路固若金汤攻击者用上一版存在漏洞的固件打包重放刷写成功。原因签名只证明“包来自合法的发布方”不证明“包比当前版本更新”。缺少版本单调性校验老版本固件一样能通过验签。解决在Bootloader里维护不可回滚的版本计数器或单调递增标志禁止刷写低于当前版本的固件。同时把“回滚攻击测试”单独列成用例用旧包刷写预期结果是拒绝。5.4 安全日志攒了一堆审计时一个都用不上现象车辆日志系统记录了诊断事件和通信异常事件发生时却无法证明“这是在那台车、那个时间发生的”日志被当成废纸。原因日志的时间戳来自普通系统时钟可以被修改日志文件本身也可被擦除没有防篡改设计。解决给日志加安全时钟源时间戳写入后不可回改日志区启用只追加机制并对每条日志做哈希链后续任何一条被改动整段日志可被识别。5.5 用“实验室渗透测试报告”当合规证据现象供应商交来一份渗透测试报告结论写着“系统安全”整车测试却在外接设备接入OBD口后直接越权读取了网关数据。原因实验室环境只有单个ECU或简单台架没有整车网络拓扑、没有完整诊断路由、也没有真实的网关策略。在实验室里没有暴露的问题整车上可能遍地都是。解决渗透测试报告只能作为开发期输入不能作为合规验收证据。最终证据必须来自整车或1:1台架上的安全性验证包括总线拓扑下的越权路径测试、跨域报文过滤测试、外部接口探测测试。6. 把同一份标准讲给三种人评审专家、竞赛车队、测试小组同一份《智能汽车网络安全标准》PPT给不同的人讲结构和重点完全不同。给评审专家讲核心是“风险可解释、证据可追溯”。我会把TARA的风险矩阵放第一屏每一条高风险项对应哪个威胁场景、做了哪种处置、验证结果贴在哪一页全部串成证据链过程做得再漂亮证据链断了评审就会往“形式合规”那边想。给竞赛车队讲重心要切到“边界内的实用安全”。拿全国大学生智能汽车竞赛来说很多车队把控制算法调得很细对通信安全几乎没有设计。比赛环境里无线遥控干扰、摄像头数据伪造、传感器报文篡改都是真实存在且能直接影响成绩的问题。预算和精力有限时建议优先做三件事CAN报文白名单过滤只放行已知ID和符合预期周期的报文对遥控通道数据做帧计数和超时校验车端日志保留最近若干秒的关键报文比赛完能回放“当时到底收到过什么”。这些做扎实比堆一堆用不上的加密算法更实用。给测试小组讲重点就一条用例、需求、标准条款的追溯矩阵。测试人员不需要把标准背下来但必须知道自己手头每条用例在验证哪个安全需求、对应哪个威胁场景。这个矩阵也是我评审时第一个要看的表它直接反映了团队是“真在测试”还是在“凑测试记录”。我习惯在标准PPT的最后一页放一张“未决问题”页把当前版本还没关闭的风险项和负责人列出来。这页看着不完美却比满篇“已完成”更能体现团队对标准的真实理解。标准的价值不是让PPT看起来无懈可击而是让每个从PPT走出去的人都清楚自己在哪条攻击路径上还欠着债。希望这些做法能帮到你。本文还有配套的精品资源点击获取
返回列表