☰
从威胁模型到报文验证:智能汽车网络安全标准落地指南
2026/9/30 1:22:40 网站建设 项目流程

简介:这是一份围绕智能汽车网络安全标准的专业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 是常见物理请求ID,0x7E8 是ECU响应ID pkt1 = CAN(id=0x7E0) / UDS() / UDS_DiagnosticSessionControl(session=0x03) sendp(pkt1, iface="vcan0", verbose=False) pkt2 = CAN(id=0x7E0) / UDS() / UDS_ReadDataByIdentifier(ident=0xF190) sendp(pkt2, iface="vcan0", verbose=False)

其中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, iface="eth0", verbose=False) print(f"replayed: {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走出去的人,都清楚自己在哪条攻击路径上还欠着债。希望这些做法能帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询