攻击AUTOSAR的软件和硬件手段(下)

在上篇文章中:攻击AUTOSAR的软件和硬件手段(上)https://blog.csdn.net/NewCarRen/article/details/129368365?spm=1001.2014.3001.5501
对AUTOSAR展开了介绍,描述了针对AUTOSAR的软件攻击和硬件攻击。本篇内容将描述一个故障注入攻击的案例研究,通过故障注入攻击,控制一个基于AUTOSAR的ECU。该ECU是根据STM32F4开发的开发板,该开发板运行的是AUTOSAR v3.1的Arctic Core。在新版本的AUTOSAR中,实现的通信协议栈是相同的。此外,我们假设攻击者可以物理访问ECU和ECU固件。

01 案例研究:FION AUTOSAR

A.    故障模型:指令损坏

在攻击中,通过向MCU的电源注入故障来修改指令。这种攻击手段并非目标MCU或我们使用的故障注入技术所独有。与清单1所示的例子类似,清单2描述了由于故障而改变指令中的位的影响。我们不是修改一条ADD指令,而是修改一条LDR指令,将一个寄存器值加载到PC中。这样我们就可以在故障发生的瞬间劫持进程的控制流。加载和存储指令是用来复制内存的。

Listing 1:ADD指令损坏

Listing 2:LDR指令损坏

对于ARM芯片来说,我们使用LDR指令或效率更高的LDM指令来完成复制内存,其中有一条指令可复制多个4字节的字段。从攻击者的角度来看,LDM指令更值得研究,因为目标寄存器是用一个位来配置的,这意味着只需要将一个位从0设置为1,就可以将一个寄存器的值加载到PC中。这种攻击只适用于ARM AArch32架构。大多数其他架构不允许直接向程序计数器寄存器加载值。但尽管如此,这种攻击的变体也适用于其他架构。

在开发故障模型时,必须考虑目标的特性。在车辆环境中使用的MCU通常是需要通过ASIL等级认证的,是能满足功能安全要求的。即便如此,攻击者仍然可以利用故障并通过最高保护级别ASIL-D认证的MCU对车辆进行攻击。

B. 故障目标:通信协议栈

在汽车上,传感器信息、用户输入以及来自不同ECU的命令,一般是通过多种系统总线(如CAN、FlexRay、LIN等)进行交换。因此,通信协议栈是每个运行在ECU上的RTOS的关键元素。为了满足大多数常见的车载系统总线的要求,AUTOSAR通信协议栈支持CAN、以太网、FlexRay和LIN等多种总线协议。

图2描述了当前AUTOSAR通信协议栈。首先是MCAL检测到总线中断,然后将PDU转发给相应的通信驱动器。对于CAN,可以接收和处理CAN ISO-TP或原始CAN帧。为了绕过CAN的8个数据字节的长度限制,采用ISO-TP协议。该协议仍然使用8字节的帧。当发送的数据达到4095字节时,ISO-TP驱动程序会在ECU上对8字节的帧进行组合。PDU 路由器负责将 PDU 路由到用户应用程序或诊断通信管理器等。

扫描二维码关注公众号,回复: 16403634 查看本文章

图2.AUTOSAR通信协议栈

攻击目的是将受控数据加载到处理器的PC寄存器中。为此,需要攻击一个允许注入数据的接口。假设这个数据是用LDR指令处理的。为了击中单个加载指令而对故障进行计时并非易事。不过比较幸运的是,在memcpy操作过程中,多条加载和存储指令会在一个循环中连续执行。这就使得攻击对时间的依赖性降低。只要我们能修改一条加载指令,那么,是修改哪条加载指令就不重要了。

图3展示了AUTOSAR通信协议栈使用的memcpy功能拆解表示。循环使用LDR和STR指令能将数据从一个缓存复制到另一个缓存。每当通过CAN总线(或任何其他总线)向ECU发送数据时,都会使用到该功能。这种源自ECU的数据是受攻击者控制的。它实际上是由不同的AUTOSAR层使用相同的memcpy功能进行多次复制。这个过程为攻击者提供了多次成功注入故障的机会,从而使得攻击者可将任意值加载到PC寄存器中。通过修改通信协议栈的代码来验证我们的假设攻击。我们修改了一条加载指令,以便将源自CAN总线的值加载到PC寄存器中。结果发现我们的假设是正确的:如果我们可以修改一条LDR指令,我们也可以将一个任意值加载到PC中。这个发现给了我们信心。我们可以继续演示一个真实的攻击,该攻击的结果见第五节-C。

图3.memcpy功能期间的毛刺注入时刻

C.攻击AUTOSAR

在这次对AUTOSAR的硬件攻击中,我们利用电压故障注入来获得控制单元的任意代码执行。为了独立于应用层中实现的用户软件,我们的目标是AUTOSAR的通信协议栈。利用这种攻击方式,我们能够将自己的代码作为一个独立的任务注入到应用层中。控制ECU上任务的好处是我们能够添加可以被恶意使用的功能。例如,我们可以添加从ECU中提取秘钥的功能,或者依靠某种形式的控制进行后续攻击。比如,通过侧信道分析攻击,从硬件安全模块(HSM)中提取密钥。

AUTOSAR支持通过CAN使用ISO-TP协议发送最多4095字节的数据。由于在默认情况下CAN总线不支持认证,因此任何能够物理访问总线的参与者都能够发送和接收数据。对于所发起的攻击,假设攻击者能够从捐赠的实验车中移除ECU。通过分析AUTOSAR通信协议栈的源代码,可以发现PDU是通过使用memcpy功能从PDU路由器传输到AUTOSARCOM或DCM模块的。攻击者很可能会对固件进行逆向工程,以取得相同的结果。通过在总线上发送一个地址后再整流memcpy,我们可以将控制流重定向到一个任意位置。因为复制数据是非常基础的操作,因此,这种攻击能适用大多数ECU。

AUTOSAR 是一个静态实时操作系统,这就意味着不可能在运行时简单地创建一个新的任务。操作系统通过使用任务控制块(TCB)来管理任务。在这个条目中,存储了任务名称、优先级、堆栈指针和任务的其他重要属性。OSEK/VDX规范是AUTOSAR内核的基础,需要一个OS IDLE任务。当没有其他任务请求CPU时间时,OS IDLE任务就会被调度。对于大多数ECU来说,OS IDLE是一个无限循环任务。换句话说,基于AUTOSAR的ECU不依赖于OS IDLE任务所提供的功能。这个特点导致OS IDLE任务可以被滥用,从而能很方便地注入我们自己的代码。我们可以通过简单地覆盖存储在内存中的OS IDLE任务指针来实现注入代码。每当OS IDLE任务被调度时,就会使用到这个指针。需要注意的是,这种方式对其他任务也是可行的,但使用IDLE任务的好处是可以不影响系统的整体功能。

图4.有效载荷通过CAN总线发送到ECU

图4显示了使用ISO-TP协议发送到ECU输入缓冲区的有效载荷。有效载荷由三大部分组成:

1)TCB操作。该代码覆盖了IDLE任务堆栈上存储的任务指针。新地址的值指向SRAM中的一个区域,恶意IDLE任务就放在这个区域。

2)复制恶意的IDLE任务。在使用memcpy之前,将新任务的代码复制到选定的地址。

3)缓冲区地址。重复多次输入缓冲区的起始地址,以使故障减少对时间的依赖。

为了将恶意的IDLE任务放置到内存中,并能同时修改IDLE任务的任务指针,我们采用故障注入的方式修改程序的控制流。由于输入缓冲区被标记为可执行,因此本次修改程序的目标是用输入缓冲区的地址加载程序计数寄存器。为了降低故障注入攻击的复杂性,输入缓冲区的地址被重复多次。攻击者现在只需用诱导的故障击中其中一个地址即可。当攻击成功后,下次调度IDLE任务时,就会执行恶意IDLE任务的代码。

图5是关于攻击的时间。首先,使用CAN总线传输有效载荷。然后,在发送最后一帧后,触发器会激活毛刺发生器。由于寻找成功的毛刺所需的强度很复杂,因此我们随机修改毛刺的参数:比如毛刺长度、电压和延迟。如果毛刺注入成功,恶意的IDLE任务就会使用UART向计算机发送一条消息。通过我们的设置,我们能够在ECU上获得任意的执行代码,大约每小时2次。正如Timmers等人在他们的文献中所说,成功率高度依赖于所使用的设置和被攻击的设备,需要几十次的故障尝试才能成功。

 图5.注入毛刺后的时间片刻

02强化ECU

基于AUTOSAR的ECU不安全设计可能导致攻击者利用逻辑漏洞破坏其安全性。当根据设计使用 ECU 的功能时发现了可利用的漏洞,则可判定该设计属于不安全设计。这方面的一个例子就是ECU的认证机制的密钥很小。如果设计很大,攻击者就可以通过软件和/或硬件漏洞来破坏ECU的安全性。这些不可靠的地方,通常是由开发人员在将电脑设计转化为实际产品时导入的。利用对软件和/或硬件攻击,攻击者可以利用这些漏洞,损害ECU的安全性。一般来讲,在将设计转化为产品的过程中,不可能不存在漏洞。因此,设计的一个重要方面就是使攻击者尽可能地难以利用这些漏洞。

A.使攻击软件行为难上加难

为了保证安全,智能手机等安全嵌入式设备依赖于世界公认的软件攻击缓解技术。例如,在现代智能手机上,堆栈缓冲区溢出保护(如堆栈Cookie)、堆/堆内存保护(如W⊕X)和地址空间布局随机化(如ASLR)是标准操作。采用这些软件攻击缓解技术可大大增加基于内存损坏的软件漏洞的复杂性。但遗憾的是,在现代ECU中,基本没有采用或很少采用这些软件技术。

B. 使硬件攻击难上加难

故障注入等依靠硬件漏洞的硬件攻击所造成的破坏是很难修复的。这些攻击能够破坏ECU赖以生存的软件安全模型。大多数可供ECU设计者使用的MCU并没有对故障注入等硬件攻击进行加固。因此,ECU的设计者只能利用MCU的标准功能和执行的软件来尝试对ECU进行硬件攻击的加固。即使硬件攻击很难防范,但是,攻击硬件只是攻击者攻击车辆的开始。例如,可利用硬件攻击来提取固件,以便找到可以远程利用的软件漏洞。固件中存在的密钥也会暴露给攻击者。通过在固件中减少存储秘钥的数量和确保攻击软件漏洞的难度,可以将硬件攻击的影响降到最低。更简单来讲,就是不要靠隐蔽性来保证安全。大多数MCU实现的代码保护功能都容易受到故障注入攻击。

03最后

攻击者可以通过软件和硬件攻击破坏AUTOSAR的安全。虽然远程攻击是防范的重中之重,但本地攻击也会影响现代汽车的安全。通常,本地攻击是执行远程攻击(如提取固件)的第一步,或者攻击者实施本地攻击的本意就是如此(如破坏资产)。因此,需要将实体存在攻击所造成的影响尽可能降低。安全敏感数据不应存储在固件中。

案例研究表明,使用故障注入攻击可以控制(即执行任意代码)基于AUTOSAR的ECU。为了将攻击者控制的值加载到MCU的PC寄存器中,我们在AUTOSAR通信协议栈使用memcpy功能注入故障。这种方案让我们成功地劫持了MCU的控制流,完全控制了车辆的ECU。如果攻击者能够在ECU上执行任意代码,那么就可以执行多个对车辆有威胁的攻击,比如,如果ECU的代码没有通过安全启动认证,攻击者就可持续修改ECU的功能。

如需了解AUTOSAR相关课程,请联系我微NewCarRen

猜你喜欢

转载自blog.csdn.net/NewCarRen/article/details/129754403