登录 | 注册 退出 投稿

使用软件和硬件手段攻击AUTOSAR

专栏作者 2023-06-12

内容提要:在本文中,我们描述了软件和硬件攻击如何危及基于AUTOSARECU安全性的几种情况。我们认为攻击者可以物理访问ECU,能够利用软件和硬件漏洞。我们讨论了攻击者如何使用不同的攻击技术来利用这些漏洞。此外,我们详细描述了一个案例研究,在该案例研究中,我们通过对AUTOSAR通信堆栈执行电压故障注入攻击,在基于AUTOSAR的演示ECU上执行任意代码。


摘要

汽车开放系统架构 (AUTOSAR) 开发合作伙伴关系是一项全球倡议,旨在共同开发和建立汽车E/E软件架构的开放行业标准。该标准正在迅速被汽车行业采用,因此了解基于AUTOSAR的电子控制单元 (ECU) 的攻击面非常重要。在本文中,我们描述了软件和硬件攻击如何危及基于AUTOSAR的ECU安全性的几种情况。我们认为攻击者可以物理访问ECU,能够利用软件和硬件漏洞。我们讨论了攻击者如何使用不同的攻击技术来利用这些漏洞。此外,我们详细描述了一个案例研究,在该案例研究中,我们通过对AUTOSAR通信堆栈执行电压故障注入攻击,在基于AUTOSAR的演示ECU上执行任意代码。如果攻击者能够在ECU上执行任意代码,则可能会出现多种汽车威胁。例如,如果ECU的代码未使用安全启动进行身份验证,则可以持续修改ECU的功能。

1.引言

在过去的30年里,汽车的电气化实现了巨大的飞跃。起初,汽车中只部署了简单的控制逻辑,而如今,诸如动力总成控制和自动驾驶信号处理等要求苛刻的任务都由计算机处理。现在的汽车依赖于数十台不同的计算机,通常称为电子控制单元 (ECU),从传感器到高性能计算平台。汽车行业很快意识到需要某种形式的标准化,因为多个供应商和制造商正在合作生产一款现代汽车。从90年代的OSEK/VDX开始,AUTOSAR 标准逐渐演变。该标准由AUTOSAR联盟制定,其目标是为汽车行业的所有制造商和供应商提供通用的软件架构规范。

基于AUTOSAR的ECU的威胁模型,应该包括本地和远程攻击者,以及具有明显不同预算、不同技能和完全不同动机的攻击者。AUTOSAR标准及其构建的标准(例如MISRA C)主要关注对安全和防护至关重要的软件鲁棒性。尽管如此,ECU还可能会受到硬件攻击。

在本文中,我们介绍了AUTOSAR,作为背景。攻击者可以通过查看代码(如果源代码可用)或逆向工程(如果只有二进制软件可用)来识别软件漏洞。在我们的研究期间,我们没有可用的真正基于AUTOSAR的ECU软件。我们使用免费提供的AUTOSAR软件堆栈来创建演示平台。我们描述了如何将软件漏洞引入基于AUTOSAR的ECU的几种情况。

当软件漏洞未知时,攻击者可能会诉诸其他类型的攻击。我们描述了其中的几种攻击,范围从简单的PCB级攻击(例如调试接口)到更高级的硬件攻击,例如故障注入。这些硬件攻击的结果可能最终会控制ECU和/或提取(安全)信息。此外,如果没有实施适当的代码签名机制(即安全启动),也可能导致ECU固件被修改。这并非不可能发生的情况,因为通常认为仅从内部存储器存储和执行代码的设备不需要安全启动。

AUTOSAR的介绍在第2节中描述。在第3节中,我们描述了对AUTOSAR的软件攻击,在第4节中,我们描述了对AUTOSAR的硬件攻击。我们执行故障注入攻击的案例研究在第5节中进行了描述。最后,在第7节中我们提供了一个总体结论。

2.AUTOSAR

在汽车环境中,操作系统的任务和职责不同于传统的计算机系统。在这种环境中,重点是传感器信息的实时处理,并大量使用总线协议与其他ECU进行通信。AUTOSAR规范使用三层抽象方法来简化软件开发。微控制器特定驱动程序、内核以及通信堆栈在基础软件层(BSW)中实现。通过使用提供对BSW功能的访问的运行时环境(RTE),可以独立于底层硬件开发用户应用程序。这种分层方法如图1所示。

 

图1.png

图1.AUTOSAR分层软件架构

AUTOSAR标准有两种不同的版本:AUTOSAR Classic平台和AUTOSAR Adaptive平台。AUTOSAR Classic平台是静态链接的,不是很灵活。它通常用于汽车深处的核心ECU。相比之下,AUTOSAR Adaptive平台是动态链接的,利用C++14功能,因此非常灵活。它通常用于高性能和高度连接的ECU。AUTOSAR联盟包括汽车市场上的所有主要供应商。因此,我们希望AUTOSAR在现代汽车中占有重要地位。不过,在本文中,我们主要关注AUTOSAR Classic平台。

3.软件攻击

AUTOSAR标准旨在为ECU生产安全可靠的软件。它建立在MISRA C和CERT C等广为接受的安全编码标准之上。完全遵守这两个编码标准的基于AUTOSAR的软件堆栈应该是安全的。在本节中,我们提供了几种可能将软件漏洞引入不同AUTOSAR组件的场景。请注意,本节中提供的示例绝不是详尽的列表。

A.MCAL漏洞

微控制器抽象层(MCAL)通常与MCU捆绑在一起。这意味着MCAL通常由MCU 制造商开发。因此,ECU厂商要集成MCU的MCAL需要符合AUTOSAR规范。所有主要的MCU制造商都为其MCU提供此类符合AUTOSAR标准的MCAL包。如果MCAL没有正确遵守AUTOSAR标准,则在ECU制造商集成MCAL时可能会引入软件漏洞。出于这个原因,MCAL的开发人员必须保证MCAL的安全实施。此外,MCAL的集成商可以进行(安全)代码审查,以检查MCAL是否根据AUTOSAR的要求安全实施。

它通常取决于AUTOSAR软件堆栈的上层如何使用MCAL的功能。例如,如果EEPROM驱动程序中存在可利用的整数溢出漏洞,如果对可传递给此易受攻击的EEPROM驱动程序的参数有限制,则该漏洞可能无法利用。尽管如此,我们认为确保AUTOSAR软件架构所有层的漏洞都得到缓解,是非常重要的。特别是考虑到易受攻击的驱动程序的使用,可能会在未来的产品中发生变化,从而使软件漏洞可被利用。换句话说,MCAL不应盲目信任上层传递的数据。

B.通信服务漏洞

新的和复杂的通信堆栈(例如以太网)的引入影响了汽车行业。它们需要解析复杂的数据结构,而传统的通信堆栈(即CAN)则不需要。尤其是构建在其上的协议(即TCP/IP、UDS等)容易出现软件漏洞。基于RTOS的ECU通常不能使用源自通用计算机(例如Linux)的经过验证的通信堆栈。它们根本不符合RTOS的要求。然而,符合条件的通信栈通常没有经过适当的测试。最近进行的研究发现,FreeRTOS的TCP/IP堆栈充满了可利用的漏洞。SAFERTOS也使用了这个易受攻击的TCP/IP堆栈,它已通过ISO 26262 ASIL-D预认证。通信堆栈应该得到适当的审查,这些通信堆栈的集成商需要开始要求保证这种审查是正确进行的。

4.硬件攻击

硬件攻击要求攻击者实际出现在目标面前。大多数硬件攻击,除了使用暴露在外部的接口,都需要攻击者打开设备。本节中描述的几种攻击需要专门的工具,其中一些现在很容易获得。对于有组织犯罪和国家行为者等资金雄厚的行为者来说,其他高端工具可能仍然触手可及。

A.PCB级

印刷电路板(PCB)级攻击包括基本的硬件攻击,其中攻击者打开ECU以探测和/或修改其PCB。攻击者通常这样做是为了提取非易失性存储器的内容、访问调试接口,或嗅探芯片之间的通信。根据ECU的设计,其他攻击也可能适用。如果没有采取足够的措施来防止这些攻击,ECU可能会被完全破坏。如果ECU不能被完全破坏,从PCB级攻击中获得的信息通常用于执行更高级的攻击,如故障注入和侧信道分析。

1) 修改外部存储器内容:攻击者可以使用标准闪存编程器来修改外部存储器(例如eMMC)的内容。能够修改存储在外部存储器中的代码的攻击者,将能够在ECU上执行任意代码。间接地,这也可以通过修改导致可利用的软件漏洞的数据来实现。来自外部存储器的代码和数据不应被信任。因此,存储在外部存储器中的任何代码和数据都应在使用前进行身份验证(即应实施安全启动)。

2) 提取外部存储器内容:攻击者可以使用标准闪存编程器来提取外部存储器(例如EEPROM)的内容。如果任何安全敏感数据在未受保护(即未加密)的情况下存储在外部存储器中,这可能会受到具有设备物理访问权限的攻击者的危害。因此,对存储在外部存储芯片上的安全敏感数据进行加密非常重要。

3) 调试接口:所有的MCU都有一个硬件调试接口,可以用来访问MCU的内部。因此,这些调试接口应该得到适当的保护。工具和知识可以负担得起与硬件调试接口进行通信。能够与硬件调试接口通信的攻击者也能够完全破坏ECU的安全性。大多数OEM要求保护这些调试接口。由于这个原因,通常可以适当地缓解这种威胁。

4) 信号修改:安全关键数据不应存储在外部存储器中,尤其是在需要保证此数据的完整性时。一个可能出错的例子,是统一诊断服务(UDS)的安全访问检查服务部分的尝试计数器,根据AUTOSAR标准,它应该按原样实现。在执行三次不正确的身份验证尝试后,会触发十分钟的尝试延迟。如果尝试计数器存储在外部闪存中,攻击者可以通过修改PCB上的外部闪存信号来阻止尝试计数器的正确写入。

B.故障注入

故障注入攻击通过影响芯片的环境条件来改变芯片的预期行为。将毛刺注入目标以影响硬件和软件的预期行为。基本的故障注入技术会影响芯片的时钟和/或电压供应,而更高级的故障注入技术会将电磁脉冲和/或激光脉冲注入芯片表面。如今,大众能以可承受的价格获得这些类型攻击所需的工具。

学术界经常研究这些故障(即故障模型)引入目标的故障类型。学术研究之间的共同点是可以在执行指令时修改指令,这是一种强大的攻击原语。清单1显示了ARM AArch32系统上ADD指令的指令损坏示例。只有翻转指令代码中的一位,才能改变加法的结果。这完全影响了软件的预期行为。因此,故障注入攻击者完全破坏了大多数ECU所依赖的软件安全模型。

清单1.png

清单1.ADD指令的损坏

传统的故障注入攻击旨在当做出安全关键决策时改变芯片的预期行为,而更高级的攻击旨在通过执行任意代码来控制芯片。第5节中描述的案例研究展示了这种高级攻击。

C.侧信道分析

侧信道分析 (SCA) 攻击是被动攻击,其中使用侧信道从设备获取信息。常见的侧信道是时序、功耗和电磁辐射。这些攻击通常用于从设备中提取密钥或绕过身份验证机制。汽车行业使用的典型目标是 UDS安全访问检查和加密操作(例如HSM)。这些攻击对软件和硬件实现都有效。

5.案例研究:AUTOSAR上的FI

在本节中,我们描述了一种高级故障注入攻击,我们控制了基于AUTOSAR的ECU。ECU使用基于STM32F4的开发板实现,该开发板运行Arctic Core for AUTOSAR v3.1。虽然我们知道更新版本的AUTOSAR可用,但我们针对的通信堆栈在更新版本的AUTOSAR中实现几乎相同。此外,我们假设攻击者可以物理访问ECU并访问ECU的固件。

A.故障模型:指令损坏

在我们的攻击中,我们依赖于这样一个事实,即我们可以通过向MCU的电压供应中注入毛刺来修改指令。这种攻击并不是目标MCU或我们使用的故障注入技术所独有的。与清单1中所示的示例类似,清单2描述了由于故障而改变指令中的位的影响。我们不是修改ADD指令,而是修改LDR指令以将寄存器值加载到PC中。这使我们能够在出现故障时劫持流程的控制流。加载和存储指令用于复制内存。对于ARM芯片,这是使用LDR指令或更高效的LDM指令完成的,其中使用单个指令复制多个4字节字。从攻击者的角度来看,LDM指令更有趣,因为目标寄存器是使用一位配置的,这意味着只需将一位从0设置为1即可将寄存器中的值加载到PC中。这种攻击仅适用于ARM AArch32架构。在他们的工作中,他们详细比较了损坏的LDR和LDM指令,并表明控制程序计数器寄存器是可行的。大多数其他体系结构不允许直接将值加载到程序计数器寄存器中。尽管如此,这种攻击的变体也适用于其他架构。

清单2.png

清单2.LDR指令的损坏

在开发故障模型时,必须考虑目标的特性。汽车环境中使用的微控制器通常通过ASIL保护级别认证,以满足功能安全要求。然而,小故障仍然允许对手对通过最高保护级别ASIL-D认证的MCU进行攻击。

B、故障目标:通信堆栈

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

图2.png

图2.AUTOSAR通信堆栈

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

我们的攻击旨在将受控数据加载到处理器的PC寄存器中。因此,我们需要攻击一个允许我们提供自己数据的接口。我们假设此数据是使用LDR指令处理的。很难为故障计时以命中单个加载指令。幸运的是,在memcpy操作期间,多个加载和存储指令在循环中连续执行。这使得攻击对时间的依赖性降低。我们修改哪条加载指令成功并不重要,只要修改一条即可。

图3.png

图3.memcpy函数期间的毛刺注入时刻

在图3中,我们展示了AUTOSAR通信堆栈使用的memcpy函数的反汇编表示。在循环中使用LDR和STR指令将数据从一个缓冲区复制到另一个缓冲区。只要通过CAN总线(或任何其他总线)将数据发送到ECU,就会使用此功能。这些源自ECU的数据受到攻击者的控制。它实际上被不同的AUTOSAR层使用相同的memcpy函数复制了多次。此过程为攻击者提供了多次成功注入故障的机会,以便将任意值加载到PC寄存器中。我们通过修改通信堆栈的代码来验证我们假设的攻击。我们修改了一条加载指令,以便将源自CAN总线的值加载到PC寄存器中。我们的假设被发现是正确的:如果我们可以修改LDR指令,我们也可以将任意值加载到PC中。这一发现使我们有足够的信心继续展示真正的攻击,其结果在第5-C节中进行了描述。

C.攻击AUTOSAR

在这次针对AUTOSAR的硬件攻击中,我们使用电压故障注入来在控制单元上执行任意代码。为了独立于应用层中实现的用户软件,我们的目标是AUTOSAR的通信堆栈。使用这种攻击,我们能够将我们自己的代码作为应用层中的独立任务注入。在ECU上控制任务的优势在于我们能够添加可被恶意使用的功能。例如,我们可以添加从ECU中提取机密的功能,或者依赖某种形式的控制来执行后续攻击。一个示例是从硬件安全模块(HSM)中提取密钥的旁路分析攻击。

如第5-B节所述,AUTOSAR支持使用ISO-TP协议通过CAN发送最多4095个字节。由于CAN总线默认不支持身份验证,因此任何能够物理访问总线的参与者都可以发送和接收数据。对于我们的攻击,我们假设攻击者能够从捐赠汽车上移除ECU。通过分析AUTOSAR通信栈的源代码,我们发现PDU是通过memcpy函数从PDU路由器传输到AUTOSAR COM或DCM模块的。攻击者可能会对固件进行逆向工程以得出相同的结论。通过在总线上发送地址然后触发memcpy,我们可以将控制流重定向到任意位置。我们假设这种攻击可能适用于大多数ECU,因为复制数据是一项基本操作。

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

图4.png

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

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

1)TCB操作:代码覆盖IDLE任务堆栈上存储的任务指针。新地址的值指向SRAM中放置恶意IDLE任务的区域。

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

3)缓冲区地址:输入缓冲区的起始地址重复多次,以减少毛刺的时间依赖性。

为了将恶意空闲任务放入内存并修改空闲任务的任务指针,程序的控制流被错误注入篡改。由于输入缓冲区被标记为可执行,目标是将输入缓冲区的地址加载到程序计数器寄存器中。为了降低故障注入攻击的复杂性,输入缓冲区的地址被重复多次。攻击者现在只需要用诱发的故障攻击这些地址之一。当攻击成功后,会在下次调度IDLE任务时,执行恶意IDLE任务的代码。

图5.png

图5.注入毛刺的时刻

图5描述了我们的攻击时间。首先,使用CAN总线传输有效载荷。然后,在发送完最后一帧后,触发器会激活我们的毛刺发生器。由于找到成功毛刺所需的毛刺强度很复杂,因此我们随机修改毛刺参数:毛刺长度、电压和延迟。如果故障注入成功,恶意IDLE任务会使用UART向计算机发送一条消息。通过我们的设置,我们能够在ECU上以每小时大约2次的速度执行任意代码。成功率在很大程度上取决于所使用的设置和受到攻击的设备,并且需要数十次故障尝试才能成功。

6.硬化ECU

基于AUTOSAR的ECU的不安全设计,可能允许攻击者使用逻辑漏洞破坏其安全性。当根据设计使用ECU的功能可以利用漏洞时,该设计是不安全的。一个例子是用于ECU身份验证机制的小密钥大小。如果设计很强大,攻击者就会依靠软件和/或硬件漏洞来破坏ECU的安全性。这些漏洞往往由开发人员在将设计转化为实现时引入。使用软件和/或硬件攻击,可以利用这些漏洞来破坏ECU的安全性。人们通常认为,如果不引入漏洞,就无法将设计转化为实现。因此,尽可能让攻击者难以利用这些漏洞很重要。

A.使软件攻击变得困难

安全的嵌入式设备,如智能手机,为了安全,依赖于源自通用的软件利用缓解技术。例如,在现代智能手机上,标准实现堆栈缓冲区溢出保护(例如堆栈cookie)、堆栈/堆内存保护(例如W⊕X)和地址空间布局随机化(例如ASLR)。实施这些软件利用缓解技术将显著增加利用基于内存损坏的软件漏洞的复杂性。不幸的是,现代ECU不支持或限制这些基本的利用缓解技术。

B. 使硬件攻击变得困难

依赖于利用硬件漏洞的硬件攻击(例如故障注入)很难缓解。这些攻击能够破坏ECU所依赖的软件安全模型。大多数可供ECU设计人员使用的MCU都没有针对故障注入等硬件攻击进行强化。因此,ECU的设计者只能尝试使用MCU的标准功能和执行的软件来加固ECU,以抵御硬件攻击。尽管硬件攻击难以防范,但它们通常只是通向更相关攻击的垫脚石。例如,硬件攻击用于提取固件,以便找到可以远程利用的软件漏洞。此固件中存在的任何秘密(即密钥)也将暴露。因此,通常可以通过不在固件中存储任何秘密,并确保难以利用软件漏洞来将硬件攻击的影响降至最低。更详细地说,不要依赖默默无闻的安全性。MCU实现的大多数代码保护功能都容易受到故障注入攻击。

7.结论

AUTOSAR的安全性可能会因软件和硬件攻击而受到损害。尽管远程攻击最为严重,但在本地执行的攻击仍然会影响现代汽车的安全性。本地攻击通常是执行远程攻击(例如提取固件)的垫脚石,或者仅足以满足攻击者的用例(例如损害资产)。应尽量减少攻击者需要实际存在的攻击的影响。安全敏感数据不应存储在固件中。

在我们的案例研究中,我们表明可以使用故障注入攻击来控制(即执行任意代码)基于AUTOSAR的ECU。我们在AUTOSAR通信堆栈使用的memcpy函数中注入了故障,以导致将攻击者控制的值,加载到MCU的PC寄存器中的故障。这使我们能够劫持MCU的控制流,以便完全控制ECU。如果攻击者能够在ECU上执行任意代码,则可能会出现多种汽车威胁。例如,如果ECU的代码未使用安全启动进行身份验证,则可以持续修改ECU的功能。




作者:牛喀网专栏作者
牛喀网文章,未经授权不得转载!


下一篇: 基于开源AUTOSAR的高级驾驶辅助系统的设计与实现流程
上一篇: 汽车ECU软件测试将面临巨大挑战
相关文章
返回顶部小火箭