第二章 车载网络架构基础
大家好,我是老周。在车载安全这行摸爬滚打了十几年,今天咱们聊聊车载网络架构。说实话,很多刚入行的朋友觉得这就是个通信协议课,没什么意思。但我告诉你,不理解网络架构,你连攻击面在哪都找不到。
咱们先看一张图(嗯,虽然这里不能放图,但你可以想象一下):一辆现代汽车里,有几十个ECU在同时工作。它们怎么通信?靠的就是这些总线。
2.1 CAN/CAN-FD总线
CAN总线,全称Controller Area Network。1986年由Bosch公司发明,到现在快40年了。你想想看,一个技术能用40年,说明它有多经典。
CAN总线的特点:
- 双线差分信号:CAN_H和CAN_L,抗干扰能力强。我在项目中遇到过,某款车在EMC测试时,别的总线都挂了,就CAN还能正常工作。
- 多主站架构:任何节点都能发起通信。这其实是个安全隐患,我后面会讲。
- 优先级仲裁:ID越小,优先级越高。比如0x001的报文永远比0x7FF先发。
- 最大速率1Mbps:经典CAN是500kbps,CAN-FD可以到8Mbps。
避坑指南:我曾经在测试中发现,某ECU的CAN收发器在-40℃时,隐性电平漂移严重,导致总线一直处于显性状态。排查了三天,最后发现是电容选型问题。所以,硬件设计时一定要看收发器的datasheet,特别是共模电压范围。
CAN-FD(Flexible Data-Rate)是CAN的升级版。它解决了两个痛点:
- 数据场变长:从8字节扩展到64字节。以前发个DTC诊断,要拆成好几帧,现在一帧搞定。
- 速率可变:仲裁段还是500kbps,数据段可以切换到2Mbps甚至更高。说白了,就是该慢的时候慢,该快的时候快。
我个人习惯,在做威胁建模时,会把CAN-FD的速率切换点作为一个攻击面。为什么?因为如果攻击者伪造一个速率切换指令,可能导致接收端采样错误,整个总线就瘫痪了。
2.2 LIN总线
LIN总线,Local Interconnect Network。说白了,就是CAN的廉价替代品。你想想看,车窗、座椅、后视镜这些低速设备,用CAN太浪费了,LIN正好。
LIN的特点:
- 单线传输:一根线,加个上拉电阻就行。成本低到令人发指。
- 主从架构:一个主节点,最多15个从节点。主节点负责调度,从节点只能响应。
- 最大速率20kbps:嗯,确实慢,但够用了。
- 基于UART:很多MCU自带UART,直接就能做LIN节点。
我的经验:LIN总线看似简单,但安全漏洞不少。我记得有一次做渗透测试,发现某车型的LIN主节点没有做身份认证。攻击者只要接上LIN总线,就能伪造主节点报文,控制所有车窗。修复方案很简单:加个CRC校验就行。
LIN的报文格式:
帧头(由主节点发送):
- 同步间隔场(至少13个显性位)
- 同步场(0x55)
- 标识符场(PID,包含6位ID和2位奇偶校验)
帧响应(由从节点发送):
- 数据场(1-8字节)
- 校验和场
这里要注意,LIN的校验和算法有两种:经典校验和(V1.x)和增强校验和(V2.x)。我建议新项目都用V2.x,因为包含了PID校验,安全性更高。
2.3 FlexRay
FlexRay,这个名字你可能不太熟。它主要用在高端车上,比如宝马、奥迪的底盘和动力系统。为什么?因为它快、可靠、确定性强。
FlexRay的核心特性:
- 双通道架构:每个通道10Mbps,两个通道可以冗余,也可以传输不同数据。
- 时间触发:所有通信都是预定义的,什么时候发、发什么,都是固定的。这保证了确定性。
- 事件触发:也支持,但优先级低于时间触发。
- 冷启动节点:负责初始化时钟同步。这个节点如果被攻击,整个网络就乱了。
警告:FlexRay的时钟同步机制是个双刃剑。它保证了确定性,但也引入了攻击面。我曾经在分析一个案例时发现,攻击者通过注入虚假的同步帧,导致所有节点的时钟偏移,最终整个网络通信崩溃。修复方法是在同步帧中加入数字签名。
FlexRay的通信周期:
静态段(时间触发):
- 固定长度时隙
- 每个时隙只能由一个节点发送
- 用于安全关键数据(如刹车、转向)
动态段(事件触发):
- 可变长度时隙
- 基于minislot机制
- 用于非安全关键数据(如诊断)
符号窗口和网络空闲时间:
- 用于维护和时钟同步
我个人觉得,FlexRay最大的价值在于它的容错能力。双通道冗余,即使一个通道断了,系统还能继续工作。这在自动驾驶中太重要了。
2.4 车载以太网
车载以太网,这是目前最火的方向。为什么?因为自动驾驶需要传输海量数据,摄像头、激光雷达、高精地图,这些数据量CAN和FlexRay根本扛不住。
车载以太网的特点:
- 100BASE-T1 / 1000BASE-T1:单对非屏蔽双绞线,速率100Mbps或1Gbps。比传统以太网少了两对线,重量轻、成本低。
- AVB/TSN:音视频桥接和时间敏感网络。说白了,就是保证数据按时到达。这对自动驾驶至关重要。
- SOME/IP:面向服务的中间件。以前是信号导向,现在是服务导向。你调用一个服务,就像调用一个API一样。
- DoIP:基于IP的诊断协议。以后修车,可能直接插根网线就行。
攻击面分析:车载以太网引入了传统IT网络的所有攻击面。ARP欺骗、DNS劫持、端口扫描、中间人攻击,这些在车上都能用。我记得有一次做测试,用Wireshark抓包,发现某ECU的SOME/IP服务没有做身份验证,任何人都能调用它的摄像头数据流服务。这要是被黑客利用,后果不堪设想。
车载以太网的协议栈:
应用层:SOME/IP, DoIP, HTTP/2
传输层:TCP, UDP
网络层:IPv4, IPv6
数据链路层:AVB/TSN, VLAN
物理层:100BASE-T1, 1000BASE-T1
这里我要强调一下TSN。TSN不是单个协议,而是一组标准的总称。包括时钟同步(802.1AS)、流预留(802.1Qat)、帧抢占(802.1Qbu)等。你想想看,如果摄像头的数据流被高优先级的诊断报文抢占,导致视频帧丢失,自动驾驶系统会怎么反应?
2.5 域控制器与中央网关架构
最后,咱们聊聊架构。以前的汽车是分布式架构,每个功能一个ECU。现在呢?集中式架构,几个域控制器搞定一切。
典型的域控制器划分:
| 域 | 功能 | 典型ECU |
|---|---|---|
| 动力域 | 发动机、变速箱、电池管理 | ECM, TCU, BMS |
| 底盘域 | 刹车、转向、悬架 | ESP, EPS, CDC |
| 车身域 | 车窗、门锁、灯光、座椅 | BCM, DCM, SCM |
| 信息娱乐域 | 导航、多媒体、语音 | IVI, T-Box, HUD |
| 自动驾驶域 | 感知、规划、控制 | ADAS, 域控 |
中央网关的作用:
- 路由转发:在不同总线之间转发报文。比如CAN报文转成以太网报文。
- 防火墙:过滤非法报文。我建议在网关里做白名单策略,只允许已知的报文通过。
- 诊断路由:把OBD口的诊断请求路由到对应的ECU。
- OTA管理:负责固件升级的下载和分发。
我的建议:在做威胁建模时,把中央网关作为最重要的攻击面。为什么?因为它是所有流量的汇聚点。攻破了网关,就等于控制了整辆车。我曾经参与过一个项目,网关的固件没有做签名验证,攻击者通过OBD口刷入恶意固件,直接接管了所有域控制器。修复方案:所有固件更新必须经过签名验证,且密钥存储在HSM中。
域控制器架构的安全优势:
- 隔离性:不同域之间通过网关隔离,一个域被攻破,不会影响其他域。
- 可升级性:OTA升级只针对特定域,不影响其他功能。
- 资源集中:高性能计算资源集中在自动驾驶域,其他域可以用低成本MCU。
但也要注意,集中式架构引入了单点故障风险。如果中央网关挂了,整辆车就瘫痪了。所以,我建议做冗余设计,至少两个网关互为备份。
好了,这一章就到这里。下一章咱们聊聊具体的攻击面,比如CAN总线的重放攻击、以太网的ARP欺骗,还有域控制器之间的横向移动。这些都是实战中经常遇到的问题。
记住,理解网络架构是安全分析的基础。你连总线怎么工作的都不知道,怎么找漏洞?
公众号:蓝海资料掘金营,微信deep3321