简介:这是一份围绕智能汽车网络安全标准的专业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 R155 | OEM + 供应链 | 建立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 FD | OBD口、总线 | 车身域 | 车辆控制被改写 |
| A-002 | OTA升级包 | HTTPS | T-Box远程入口 | 云端-车端链路 | 固件被替换 |
| A-003 | 诊断会话 | UDS over CAN | OBD口 | 诊断链路 | 敏感数据被读取 |
| 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-001 | TH-008 | 防止未授权诊断访问 | 所有UDS服务必须经过安全访问认证;认证失败最多连续5次,之后锁定1分钟 | 自动化诊断测试:未认证读取DID,确认NRC 0x33;连续5次错误后确认锁定 |
| SEC-002 | TH-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走出去的人,都清楚自己在哪条攻击路径上还欠着债。希望这些做法能帮到你。
本文还有配套的精品资源,点击获取