CAN总线安全-攻击类型

1. 总线洪水攻击

        总线洪水攻击是一种非常简单的拒绝服务攻击(DOS攻击):尽可能快地传输CAN帧,以吸收总线带宽,导致合法帧延迟,使得合法帧未及时出现导致系统部分故障。

        攻击的成功取决于可能采取的缓解措施。对于开放总线,传输CAN ID为0的帧将阻止所有其他通信,因为这是最高优先级帧。如果有一个网关只允许某些ID通过(ID过滤策略),则只有低优先级帧可以延迟:高优先级帧将继续不受干扰地传输(这是标准ODB-II诊断帧具有ID 0x7df和更高的一个原因,使其具有非常低的优先级)。

2. 简单帧欺骗

        帧欺骗是一种身份验证攻击:让接收方接受虚假帧,就像它来自合法发送方一样。

  • 如果直接连接(例如通过OBD-II端口),这通过简单地将CAN帧通过连接设备的ECU通过发送邮箱排队发送来完成
  • 如果通过被劫持的ECU(如BCM,VCU)连接,则可以通过使用设备中的OTA功能安装新的软件来实现。

        这种简单欺骗帧的一个问题是,接收方还接收来自合法ECU的帧,并且接收方可能对合法帧和欺骗帧都起作用。

        还有一个更大的问题:CAN协议物理层要求具有相同ID的两个帧不能同时进入仲裁。如果发生这种情况,那么在仲裁之后,两个控制器将同时进行传输,当传输的比特不同时,其中一个控制器将看到一个比特错误(传输一个隐性比特,但接收一个显性比特),并发出一个错误帧信号,这将导致所有接收器重新同步仲裁重新开始。如果在干预时间内没有高优先级帧排队,那么这两个帧将再次赢得仲裁,并且该过程将重复。这被称为仲裁厄运循环:每次循环都会递增两个控制器中每个控制器的传输错误计数器(TEC),并且它们最终都会进入总线关闭状态(即从逻辑上断开与总线的连接)。在500kbit\/秒的CAN总线上,这大约需要4ms。

        如果合法的ECU总线关闭,则可能会出现问题:

  • 合法ECU可将故障视为线缆故障(因为CAN上的短路也会出现此类情况),并永久进入故障安全状态,拒绝通信。
  • 来自ECU的所有其他帧将停止,这将导致接收器检测到故障,并且它们也可能决定进入故障安全状态。

        可以发现这种攻击方法是自损的,此类攻击的目的可能是故意将车辆限制到只保留最低功能的故障安全状态(车辆可驾驶,但操作非常受限)。这将是一种形式的拒绝服务攻击。

3. 自适应欺骗

        简单帧欺骗的上述问题通过自适应欺骗来解决:攻击设备监听CAN总线以查看何时发送合法帧,然后将欺骗帧排队,以便不发生冲突。在许多设计中,接收方不立即对接收到的帧采取行动,而是将其存储在与ID相关联的buffer中,以便控制应用层稍后查看。如果欺骗帧是在合法帧之后立即发送的,那么它将覆盖缓冲区FIFO,并且接收器很可能会对欺骗帧的内容进行操作。如下图所示:当真实数据在接收器缓冲区中时,只有一个小的时间窗口。简单来说,就是快速覆盖的过程。

        攻击者需要在非常短暂的时间窗口内响应接收中断,以便及时将欺骗帧排队进入仲裁:帧接收中断将在EOF域的倒数第二位引发,仲裁将在四位时间内开始——500k的波特率的攻击窗口仅为8us。这对攻击方ECU硬件以及软件能力是个考验。

4. 错误被动欺骗

        上述简单的欺骗方法可以通过监控总线情况和查看帧的时间规律来检测:欺骗帧的发送频率将高于预期,总线流量分析可以检测异常(当然,当执行器已经被欺骗后,追溯检测攻击可能没有多大用处,相当于亡羊补牢)。

        但通过一种破坏can协议本身的欺骗行为,检测会变得更加困难,例如利用错误被动模式的攻击方式。

        根据CAN协议,当CAN控制器为Error Passive(错误被动,传输错误计数器或接收错误计数器高于127)时,处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。所以控制器无法正确发送错误信号,发送器必须基本停止发送,等待总线空闲(它依赖于其他设备看到传输停止,并向重新同步发送错误信号)。

这种攻击分为两个阶段:

  • 驱动目标ECU的CAN控制器进入错误被动状态。这通常是通过在目标ECU发送任何CAN帧时生成错误帧(TEC每次增加8)来实现的。
  • 监控总线并在其赢得仲裁后查看目标帧的ID,然后使用欺骗的有效负载介入并覆盖数据和CRC字段。

        当发送欺骗数据字段时,合法发送方将检测到其自身帧的错误(在某些点,它将发送隐性1位,但读回显性0位)。然而,虽然错误是被动的,但它不能发出错误帧信号:它必须发送隐性位并等待仲裁重新启动。这将使攻击者发送其余的伪造数据字段(以及与伪造数据匹配的新CRC字段)。接收机没有看到这种情况:他们只看到一个带有欺骗有效载荷的接收帧。这也意味着流量分析不会检测到这种攻击。

        这种攻击无法通过CAN控制器完成:它需要对总线进行低级物理层修改访问,以欺骗CAN协议本身。这意味着收发器上的CAN TX和CAN RX引脚必须由攻击者直接控制IO。

        在迈来芯微处理器中,片内并没有集成的CAN controller,而是通过SPI控制外部的CAN controller,这样的设计,可以很好防止ECU被入侵后,恶意软件无法直接访问CAN TX和RX引脚。

        具有片上CAN控制器的微控制器通常复用其引脚的功能。用于向收发器发送CAN控制器信号的两个引脚可以作为通用I/O引脚进行控制。

        恶意软件可以监控RX引脚,检测目标帧,因为他们开始传输,然后驱动TX引脚。在攻击的第一阶段,这是重复驱动引脚低6个CAN位,以诱导发生一个错误帧,并驱动目标ECU的CAN控制器错误被动。在第二阶段,用欺骗帧数据驱动TX引脚。 

        在软件中模拟CAN协议相对简单(在500k/秒时,每个CAN位为2µs,对于快速CPU来说时间充足),软件不必实现整个CAN协议,已经足以实现欺骗。 

5. 双重接收攻击

        此攻击是利用了一些CAN协议的漏洞,ISO-CAN规范中包含一种警告 ,参见下图。协议规定,接收端在EOF位域的倒数第二位到最后一位判断接受结束帧,而发送器在EOF位域的最后一位接收结束帧。EOF字段的最后一位发生比特错误的可能性很小:如果发送器看到一个主位,则发出错误信号,然后重新将帧输入仲裁。但所有接收器已经接受帧并将其传递给应用软件。发射机将再次发送帧,接收机将再次接收相同的帧。这种行为是布里丹毛驴原理的基本结果。在大多数CAN系统中,这种故障产生概率很低。

        如果发送端在EOF的最后一位采样一个主导位(发送端全局错误或局部错误),则该帧对接收端有效,但对发送端无效。发射机放置一个EF并重新启动帧的传输,帧将被接收两次。

        可以通过在帧数据场中包含序列号来检测帧的双重接收。但大多数系统都没有设计成这样(主要是因为发现问题的概率很低–CAN上的错误帧相对较少)。如果攻击者可以控制CAN TX和CAN RX作为通用I/O,则可以发起双重接收攻击。软件中的一个简单状态机实现CAN协议的一部分(软件不需要实现完整的CAN协议)。如下所示:

         在大多数MCU中,可以通过轮询CAN RX引脚和通过运行定时器来解码CAN数据。CAN ID受到位填充的影响,但与其运行去填充算法,不如将其与计算好的ID(即具有填充位的ID)进行比较。一旦确定了帧ID,就可以简单地等待六个隐性位,然后在CAN TX引脚上保持一个主导位一个位时间。

        上面概述的简单方法并不特别可靠,例如,在目标帧的传输过程中发生的错误不会被检测到,但在发起攻击时处理所有偏僻情况通常不是问题。

6. 总线关闭攻击

        总线关闭攻击是驱动目标ECU离线:所有其他ECU继续运行,但目标ECU被移除。这可能是更广泛攻击的一部分(例如,欺骗攻击,攻击设备介入并欺骗目标ECU的所有帧)。或者可能是对总线的简单拒绝服务攻击:与其试图劫持仪表盘以显示“检查发动机”灯,不如简单地将发动机管理ECU从CAN总线上取下并触发仪表盘以查看故障并显示警告。

        总线关闭攻击是一种驱动CAN TX引脚的低级协议攻击,如前所述。但不是针对特定帧,而是针对同一ECU的所有帧。这迫使传输错误计数器高于255,ECU的CAN控制器自动关闭总线。

        一些ECU将尝试自动恢复,要求重复攻击。车辆的网络管理和诊断策略可能最终会停止ECU恢复过程,而是在其NVRAM中设置一个标志保持离线。这通常会触发驾驶功能降低,如降级模式。如果攻击的目的是制造麻烦,这样攻击就是成功的。

7. 冻结厄运循环攻击

        冻结厄运循环攻击是一种利用CAN总线协议层的低级攻击。它有效地将总线通信冻结任意时间,并可用于延迟特定CAN帧。

        该攻击可用于触发对给定帧延迟到达的特定反应,或延迟系统对某些条件的响应。或者它可以被用作简单的拒绝服务攻击。该攻击与其他攻击的不同之处在于很难检测到:错误计数器没有增加,唯一的症状是帧到达比预期晚。如果没有进行计时分析来计算帧的最坏情况延迟,则攻击将类似于固有的瞬态计时故障。

        CAN协议将帧间空间(IFS)第一位中的一个主位定义为一个控制位,用于发送过载条件信号。如果发生,则所有CAN控制器都会进入错误恢复过程,但不会增加错误计数器。这是CAN的一个实际功能,旨在让相应速度慢的CAN控制器有更多的时间来处理帧,现代CAN控制器已经不会产生这种情况。冻结厄运循环攻击的工作方式是在第一个帧间隔位控制CAN TX引脚上的一个位,然后监控错误恢复时机,并在错误恢复结束时再次在帧间隔域中控制一个位。这可以重复任意次数,实际上只要需要就可以冻结总线。

        此攻击的复杂性与前面描述的CAN协议攻击相同:它涉及一个简单的状态机,一个计时器来测量位时间,与目标ID的比较,以及IFS字段的隐性位倒计时。

 

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值