汽车黑客之CAN总线协议
汽车黑客是我们黑客学科的前沿领域之一。随着汽车变的越来越智能化,包含越来越多的电子产品,这使得汽车越来越易被攻击。我们此刻确确实实的处在一个无人驾驶或者自动驾驶汽车的转折点上,对汽车的攻击行为将会变得更加重要和危险。
在本系列中,我们将研究汽车黑客的基础知识,并提出更复杂的黑客策略。举一个简单的汽车黑客的例子,看看这篇黑掉三菱欧蓝德的文章。
在我们深入汽车黑客之前,首先需要了解基础知识。比如说,在进行网络hacking之前需要了解TCP/IP协议,在进行SCADA(数据采集与监视系统)hacking之前需要了解Modbus通讯协议。汽车中的电子部件采用若干种不同的协议在诸多微控制器、传感器、仪表、执行器等等之间进行通讯。其中,最广泛使用的莫过于Controller Area Network(控制器局域网络)或者称之为CAN。
CAN 协议
CAN协议首先由汽车电子业界闻名的德国工业巨头罗伯特·博世有限公司(Robert
Bosch GmbH)开发。它于1986年首次在汽车工程师学会(SAE)会议上发布。CAN协议已经被标准化为ISO 11898-1和ISO
11898-2。它被设计用于在不需要主机的情况下车辆的微控制器和设备之间的良好的通信。
CAN以广播类型网络的形式运作,类似于以太网中的广播数据包,或者像过去在网络中使用的集线器(1980-90年代)。网络上的每个节点都可以“看到”每个传输数据包。不同于以太网或TCP/IP(但与SCADA系统中的modbus相似),CAN不能向单个黑店发送消息,但却提供了本地过滤,以便每个节点仅对其操作相关的消息起作用。你可以将这种机制视为“内容消息传递”,其中内容确定目标节点。
CAN在两根线缆之上运行,CAN高线,CAN低线。由于汽车系统固有的“噪音”,CAN使用差分信号(译注:即电平差)。这就是协议分别在两根线缆上升高、降低电压来通信的原因所在。在高速和低速CAN这两种情况下,当发送0时,信令将高线向5V驱动,低线向0V驱动,但在发送1时两线都不驱动。
CAN消息类型
CAN使用4中不同的消息类型:
数据帧
远程帧
错误帧
过载帧
数据帧
这是用于实际数据传输的唯一帧。在大多数情况下,由数据源节点发送数据帧。
该帧有两种类型,基本帧和扩展帧。基本帧有11位标识码而扩展帧有29位。CAN标准要求必须接受基本数据帧,并且扩展帧必须是可兼容的,换句话说,扩展帧不会中断协议或者数据传输。
远程帧
远程帧被使用在当数据目标节点需要从源节点获取数据的情况下。
错误帧
错误帧有两个不同的字段,第一个字段由ERROR FLAGS给出,由不同的驻点产生,第二个是ERROR DELIMITER,只是指示错误消息的结束。
过载帧
过载帧由两个字段,过载标志和过载分隔符。当接收机内部条件满足或者在传输期间检测到主要位(0)时会触发过载帧。
板载诊断(OBD)-II 连接器
大多数车辆现在都配有一个OBD-II连接器。如果你把汽车带到4S店进行维修,那么在仪表板的下方,机械师将会使用这个接口连接电脑,以便读取车载电脑的数据。
OBD-II有16个引脚,如下图所示。
作为黑客或者攻击者,我们同样可以使用这个OBD-II连接器用它来向CAN网络中的各种设备发送数据。
CAN总线数据包格式
标准数据包
数据包有两种格式,基本和扩展。扩展包中包含了基本包中的同样的元素,但是扩展包包含了额外的数据来表示ID。
仲裁ID
仲裁ID是指发送数据包的设备的ID。
扩展标志位
该位在基本CAN包中始终为0。
数据长度码(DLC)
该域指明了数据长度,范围从0~8字节。
数据
消息中的数据。如上边所提到的,它可以多大8个字节。所有的CAN数据包都会被广播,即所有的设备或者控制器可以看见每一个数据包。这样一来,所有的设备都无法知道时哪个控制器发送的数据包(无返回地址),因此在CAN网络上进行消息欺骗时轻而易举的,这也是CAN的关键弱点之一。
扩展数据包
扩展CAN数据包和标准CAN数据包相同,但是它们被链接在一起以创建更长的ID。扩展CAN与标准CAN向后兼容。这意味着如果传感器被设计成不接受扩展数据包,系统也不会因此而中断。
安全
由于CAN是一个低级协议,它没有内置任何的安全功能。默认情况下,它没有加密或者认证。这将导致中间人攻击(无加密)和欺骗攻击(无认证)。制造商在某些情况下已经对系统的关键任务进行了认证机制,例如修改软件和控制制动器,但是制造商并没有实现所有的认证机制。即使在实施密码的情况下,它们也比较容易破解。
随着这一系列关于汽车黑客文章的进程,我们将会扩展您对CAN以及其他汽车通信协议的理解!