利用汽车车内CAN总线错误处理机制实现DoS攻击

来源:互联网 发布:数据结构与算法 c语言 编辑:程序博客网 时间:2024/04/30 20:42

摘要

现代汽车包含数十个ECU(电子控制装置)和无线连接设备,它们通过车内部总线紧密的互联。尽管这些电子组件增强了汽车的安全性和效率,同时也带来了新的漏洞。本论文揭露了车内网络中一种新的重要的漏洞。利用CAN总显得错误处理机制,我们提出了一种新型的DoS攻击,可以断开/关闭一个合法的ECU。这是一个非常严重的攻击,必须被阻止的,因为一旦ECU有可利用的漏洞,很容易在ECU中安装一个攻击负载,并且很难被阻止。除了发现这个新的漏洞之外,我们还分析在真实的汽车中实现的可能性。

 

 

 

 

 

 

 

 


1      前言

汽车的智能化和网联化的发展趋势,出现了新的安全漏洞,这些趋势引入了可远程攻击的媒介或者终端。研究者已经演示了如何利用漏洞远程控制一辆汽车。

为了检测和防御汽车网络攻击,提出了各种各样的网络安全解决方案,比如消息认证码(MAC)和异常入侵检测(IDS)。在汽车领域,这些解决方案提供了一定程度的安全,但是任然没解决汽车网络中没有发现的漏洞。

我们提出了一种新的DoS攻击,利用车内CAN总线的错误处理机制。这些故障限制机制的目的是为了增强CAN总线的容错性和健壮性,现在确成为了安全漏洞。这种类型的攻击不同于先前已知的攻击。对于汽车来说,这是一种严重的威胁,必须采取防御措施。

下面是攻击的特征:

(一) 这种DoS攻击很容易被安装,因为攻击者不需要去逆向CAN报文信息和校验算法。可以安装到多种汽车中,和汽车制造商没有关系。相比于先前的演示的攻击,为了控制汽车,我们不需要艰苦的逆向工程。

(二) 可以欺骗入侵检测系统

(三) 可以让数据加密不起作用。

 

2      CAN总线协议分析和漏洞描述

CAN网络是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。CAN总线协议目前已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,同时也是车载ECU之间通信的主要总线。当前市场上的汽车至少拥有一个CAN网络,作为嵌入式系统之间互联的主干网进行车内信息的交互和共享。

这部分我们提出了CAN协议规范中的两个漏洞,是关于CAN总线错误处理和CAN总线自动故障隔离策略的。这些缺陷产生了两个安全漏洞,可被利用实施DoS攻击。

2.1     CAN错误处理漏洞分析

CAN协议规范

(一)位错误

由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出ACK 的单元、输出错误的单元来检测。 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。发送单元在ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的ACK 应答,而非位错误。 输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同6 个位的值(显性或隐性),并不视为位错误。

(二)填充错误

在需要位填充的段内,连续检测到6位相同的电平时所检测到的错误。

(三)CRC错误

从接收到的数据计算出的CRC 结果与接收到的CRC 顺序不同时所检测到的错误。

(四)格式错误

检测出与固定格式的位段相反的格式时所检测到的错误。

(五)ACK错误

发送单元在ACK 槽(ACK Slot)中检测出隐性电平时所检测到的错误(ACK没被传送过来时所检测到的错误

错误帧的漏洞分析

根据CAN总线规范,无论什么时候,一个CAN节点发生位错误时,必须监视总线信号,应该通知它发送的总线逻辑值是不同于位值的。同时遵守这样的条件—中断正在传送的帧,并且立即发送一个错误帧。规范导致的结果是终止了填充规则和引起其他的节点拒绝接收该帧,有效的否认了该帧的接收。

因此,CAN网络中的节点通过读和写有能力相互作用。依据CAN总线规范,无论什么时候,一个显性位都能覆盖一个隐形位。这会导致一个非法的显性位会终止总线中节点正在发送的帧。

2.2     CAN总线故障隔离策略漏洞分析

CAN协议规范

(1) 主动错误状态

主动错误状态是可以正常参加总线通信的状态。处于主动错误状态的单元检测出错误时,输出主动错误标志。

(2) 被动错误状态

被动错误状态是易引起错误的状态。处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,输出被动错误标志。另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内

必须插入“延迟传送”(8 个位的隐性位)。

(3) 总线关闭态

总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系,如下表1所示。

表1错误状态和计数

漏洞分析

依据总线协议和错误状态图(图2.1),除去罕见的异常,当一个传输节点发送错误标志,它的TEC应该按照步进为8的增长。这意味着当发送16个无效的帧后,一个主动错误节点(TEC=0)将进入被动错误状态(TEC=128),再来16个无效帧后,总线状态将变为关闭状态(TEC=256),停止所有可能的总线通信直到反复的总线空闲状态或者察觉到一个复位命令。不幸的是,迫使一个空闲的条件几乎是不可能的,因为它会意味着禁用或断开连接到总线上的所有设备。同样的强制复位命令,该命令可以通过节点控制器,有问题的是,因为总线节点可以是一个合法的错误的节点。

考虑到CAN总线错误处理的弱点,一个单一的节点连续发送32bit的重写位,就足够阻塞该节点既不能发送,也不能接受总线中其他节点报文。

根据上面总线错误处理的弱点和总线错误限制弱点的分析,我们可以精心设计一个DoS攻击CAN总线。攻击并不需要发送一个完整的数据帧,仅仅需要发送1bit的数据,就可以引起总线的阻塞或者终止合法数据帧的发送。甚至可以根据条件启动攻击,比如说车行驶到某一个速度,或者车在某一个确切的GPS位置时等。

图2.1节点错误状态图

3      技术要求

我们提出的DoS攻击有特定攻击节点架构要求,但也不是绝对的。架构如下图所示:

                      图3.1攻击节点结构需求

执行攻击载荷的为控制需要直接连接CAN收发器,在中间不需要CAN控制器。微控制器要能读RXD引脚信号和能写TXD引脚信号到CAN收发器。

一个CAN总线物理接口(OBD2端口)是需要的,但不是强制的。

安装攻击的微控制器最小技术要求:

l 微控制器GPIO引脚应该支持外部边沿触发中断。

l 微控制器应该包含一个定时器。

l 整个时间需求(中断等待时间、引脚读和写延时、攻击算法运行时间)应该小于目标CAN总线位时间。

4      攻击算法

4.1     算法介绍

攻击算法是以伪代码的格式给出,包含建立阶段和两个中断服务子程序,分别执行RXD引脚的下降沿中断和定时器中断,RXD下降沿中断中断服务程序同步微控制器CAN信号,定时器中断服务子程序采样CAN总线状态,如果一个目标帧被发送,执行攻击载荷。

4.2     算法建立

//CAN DoS攻击建立算法

START

 

TXD <-- 隐形

CAN buffer <--- 111111...1

init timer

enable RXD ISR

 

END

微控制器启动后,建立算法只执行一次。流程包含设置TXD发送隐形位(总线空闲状态),初始化一个40bit的缓存(算法中的CAN缓存变量)这个缓存可以由int和Byte型两个变量组成,初始值为0xFFFF和0xFF。选择这样的初始值不是随意的,因为CAN采样开始是在收发器的第一个信号的下降沿之后(即从1到0)。

缓存的大小是依据攻击者想要否定那个功能而定。例如,攻击者想要去禁止一个CAN2.0B规范的节点,因此要发送一个扩展帧(29 bit ID),标准帧的ID是11 bit,所以这个缓存至少需要40 bit的空间。

然后,攻击者设置定时器中断计数值,为了匹配CAN总线的bit 速率,最后使能RXD下降沿中断,与微控制器的信号同步。

4.3     RXD下降沿中断子程序 算法

//CAN DoS攻击RXD ISR

START

 

Disable RXD 下降沿中断

Enable Timer ISR

 

END

当微控制器察觉到RXD的第一个下降沿时,触发下降沿中断程序。这个程序唯一的目的是使微控制器与CAN信号同步,与CAN控制器的硬件同步类似。在微控制器其控制后,使能。过程如图所示。

4.4     定时器中断子程序算法

//CAN DoS攻击Timer ISR

START

 

if  CAN buffer matches target value

Disable Timer ISR

wait until first recessive bit

TXD <---显性位

wait CAN bit time

TXD <---隐形位

CAN buffer <---111...1

Enable RXD falling edge ISR

 

else

 

CAN buffer <--(CAN buffer||RXD)<<1

 

end if

 

END

在每一个CAN bit时间内触发定时器中断子程序,还有在攻击算法核心程序运行的时候。

算法的目标是监视CAN信号和精确地注入显性bit。如果攻击目值标出现,会阻止目标帧的发送。目标值是攻击者想去触发DoS攻击,例如,攻击者想要阻止某一ID的帧。

0 0
原创粉丝点击