CAN Bus Security Issue

Dec 1, 2022



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_0.png

攻击的基本原理很简单,就是让靶机设备使用较低的采样率去读取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数据之后,实现攻击。

canbus_1.png

wakeup


当总线上某个controller刚刚上线,它首先会进入Integrating模式,此模式下它会捕捉IDLE bus序列(11个连续的隐性电平)的出现,捕捉到后就会进入idle模式,然后就开始准备接受数据了。所以攻击者可以将IDEL BUS序列编码进恶意数据中,致使controller在wakeup的时候误入idle状态,去接受后续的恶意数据。

混合网络


默认情况下,一个canbus网络中是不支持同时接入CAN-FD和CAN协议的controller的,但是目前有些解决方案开始支持这种混合网络,在这些方案下,CAN协议的contrller被固定只能使用slow bitrate sampling.