Basic
UDS
UDS(Unified Diagnostic Services),统一的诊断服务,本质上就是一种定向通信
的交互协议,工作于会话和应用层。诊断方(Tester)给ECU发送指定的请求数据,第一个字节为SID。如果是positive的响应,首字节回复[SID+0X40]。如果是否定的响应,首字节回复0x7f,第二字节恢复SID。
CAN-in-CAN attack
CAN-FD
CAN-FD通信协议是基于原始CAN总线标准而设计,继承了CAN总线的主要特性。它可以在确保多种车载网络数据传输率和吞吐量继续演进的同时,使得汽车微控制器和连接的系统能够以各种速率高效通信。随着智能汽车的越来越普及,每辆车上的ECU数量激增,CAN-FD的实际需求和应用越来越普遍,随之而来的安全问题不容忽视。
协议 | 传输速率 | 数据长度 | 帧格式 | ID长度 | CRC |
---|---|---|---|---|---|
CAN | <= 1Mbps | <= 8bytes | - | <= 11bits | 15bits |
CAN-FD | 速率可变,仲裁波特率和CAN一样,数据波特率<=8Mbps | <=64bytes | 新增FDF、BRS、ESI位 | <=12bits | 包括stuff count和padding计算,扩展到21bits |
攻击原理
攻击的基本原理很简单,就是让靶机设备使用较低的采样率去读取canbus总线上的数据,而实际上数据部分是以更高的bps在传输的, 靶机设备读取到的数据是攻击者精心包装的数据,使得靶机最终读取到的数据是一个低速率下的有效数据。
当然,这里有一些限制条件:
- 攻击设备发送的CAN-FD协议fast bitrate的值必须是靶机读取bitrate的整数倍,上图所示的是3倍。
- 靶机设备使用slow bitrate去采样当前canbus上的idle状态,如果本身就工作于fast bitrate,那次攻击就不可能实现。
- slow bitrate的采样点需要落在fast bitrate对应bits的>50%处,假设fast bitrate是slow bitrate的4倍,那么slow bitrate采样到的bit只能是fast bitrate后面2个bit之一,不能是前面2个bit。
攻击条件
- 攻击者需要在支持CAN-FD协议的canbus总线上发送数据,实现方法包括:
- 通过其他系统漏洞渗透进系统,拿到canbus访问控制权
- 通过CAN dongle连接汽车的OBD端口
- 通过各种方式使得目标机接受到指定的CANID,这里的方法包括:
- 通过UDS协议发送诊断信息
- 注入恶意的信号使得靶机触发自身的一些功能,比如可以指示自身进入休息的信号
攻击场景
Bus Error
当controller发现总线上出现某些error时,会导致controller认为当前发送的CAN-FD消息已经结束,并开始进入接受下一个消息的状态。Bit flips error
就是其中的一种, 所谓的bit flips就是总线上的"噪音"
导致采样bit位发生错误,假设DLC
的MSB位发生了bit flip, 致使DLC从1111
变成了0111
,本来应该接受64bytes数据的,导致controll只接受7bytes就结束了,这样攻击者就可以将恶意数据塞到7bytes数据之后,实现攻击。
wakeup
当总线上某个controller刚刚上线,它首先会进入Integrating
模式,此模式下它会捕捉IDLE bus
序列(11个连续的隐性电平)的出现,捕捉到后就会进入idle
模式,然后就开始准备接受数据了。所以攻击者可以将IDEL BUS
序列编码进恶意数据中,致使controller在wakeup的时候误入idle状态,去接受后续的恶意数据。
混合网络
默认情况下,一个canbus网络中是不支持同时接入CAN-FD和CAN协议的controller的,但是目前有些解决方案开始支持这种混合网络,在这些方案下,CAN协议的contrller被固定只能使用slow bitrate sampling.