论文分享 《BUSted!!! Microarchitectural Side-Channel Attacks on the MCU Bus Interconnect》

研究现状 & Motivation

以往的侧信道攻击的研究工作大部分都集中在CPU上,对于广泛存在的嵌入式设备(MCU)的关注却微乎其微。本文作者认为,造成这种现象的原因是MCU的简单结构以及缺少虚拟内存的支持。因此,以往的研究人员难以对MCU进行微架构侧信道攻击。
本文作者观察到,若MCU中多个BS(Bus Main)访问同时访问同一个Secondary,被仲裁逻辑延迟访问的那个Master会产生细微的时序差异。鉴于此观察,本文作者提出了第一个基于MCU总线互联的侧信道攻击方法,并成功地窃取的“智能门锁”的4位PIN。

背景

总线冲突#

image
我们先来看Figure 1:
  • CPU和DMA同时访问不同的Secondary,此时没有总线冲突发生。
  • CPU和DMA同时访问相同的Secondary,此时会产生总线冲突,总线仲裁逻辑将DMA的执行延迟一段时间执行。

漏洞代码#

image

从Figure 2中可以看出if路径与else路径的执行取决于s的值。从汇编层面来说,beq指令的执行与否取决于s的取值。

假设cmp指令在t时刻执行:

  • 若beq指令不发生跳转(需要1周期执行),str指令将在t+3时刻执行。
  • 若beq指令发生跳转(需要3周期执行),str指令将在t+5时刻执行。

综上所述,str 指令在何时执行依赖于 s 的取值。

BUSted 攻击

假设我们要攻击的 Victim 具有如 Figure 2 所示的代码结构,str 要访问的内存bank为B。那么我们在 t+3/t+5 时刻让 DMA 访问B,即人为制造总线冲突,然后再采取某些手段检测是否真正发生了总线冲突。从而可以得到 s 的取值。

攻击概述#

image

Profiling 阶段#

Profiling 阶段的目的是获取 Victim 运行的内存访问踪迹 Tmn。在 Exploitation 阶段,Attacker 可利用 Tmn 来确定 Victim code 的开始时间点。

在确定要进行攻击的应用后,Attacker 首先手动分析该应用的源代码,确定依赖 Secret 的代码片段 Vc(Victim code),并确定 Vc 的所有可能的执行路径 Xi(i=1,2,3,...)

然后,对于每一条执行路径 Xi,Attacker 检测应用运行过程中的每一个时钟周期是否发生了内存冲突。注意,Attacker 每次只能检测一个时钟周期,因此,为了确定 Victim 应用的完整内存访问踪迹,Victim 应用需要运行多次。

Figure 3 的 Tmn 矩阵中,每一列代表这 Victim code 的一条执行路径,每一行代表一个时钟周期。其中,红色的块表示当前周期存在内存冲突,即 Victim 应用会访问内存。

因为 victim code 只占 victim 源代码的一小部分,Attacker 需要手动分析 T 矩阵来确定 Victim code 的踪迹位置,从而得到矩阵 rT。

从 rt 中选择当前时钟周期只有一条路径发生内存冲突的那一行组成矩阵 pT1。

注意,上述操作皆是 Attacker 手动线下执行的。

读者可能有疑问,获取 Tmn 矩阵的一列需要运行 Victim 应用 M 次,难道每次运行的情况都一样吗?答案是每次运行的情况都是一样的。与 CPU 不同, MCU 的结构十分简单,因此不会出现任何意外情况。

Exploitation 阶段#

现实情况下,Victim 运行在 Firware 之上,因此需要确定 Vc 的真正执行时间点 tbase

与 Profiling 阶段相同,首先获取 Victim 应用的内存访问踪迹,此时该踪迹也包含 Firmware 的运行踪迹。然后该踪迹和 Tmn 进行匹配,得到 Vc 运行的所有时刻 tbase

有了 tbase 和上图中的矩阵L之后,Attacker 便知道何时进行产生内存冲突,从而检测是否发生了冲突。

注意,上述获得 tbase 的操作是 Attacker 手动线下执行的。

Hardware gadget#

image

在前面攻击流程的阐述过程中,读者可能会疑惑:

  • 怎样在特定时刻制造总线冲突?
  • 怎样确定在某一时刻是否发生了总线冲突?

针对于这两个问题,本文作者提出了 Hardware gadget 的概念(如 Figure 4 所示),即让硬件来完成这些工作。

(有一说一,论文中的 hardware gadget 读了好几遍了,还是不明白怎么实现的。I'm ANGRY!!!)

攻击 ”SMART LOCK“

image

如Figure 6所示,smart lock 的漏洞代码和 Figure 2 中的代码形式类似。本文作者成功的窃取了该 smart lock 的 PIN。

不过很明显的是,作者没有对其他的应用进行攻击实验,或许是具有这样代码的应用实在是太难寻找了。‘

缓解措施

作者提出几点缓解措施:

  • 避免写出”依赖秘密“的代码 (很明显这不太现实)
  • victim 执行时禁掉 DMA (很明显这也不太现实,太损害性能了)
  • 修改仲裁逻辑,赋予 DMA 更高的优先级 (很明显也不太可能,文中也提到了,完全可以进行 CPU 拒绝服务攻击)
  • 在 victim 执行过程中添加随即延迟 (这个要求 MCU 具有随机数发生器)

BUSted 的不足之处

  1. BUSted 攻击与目标应用“耦合度”太高了,几乎它的每方面都是为了“Smart Lock”定制的。
  2. BUsted 攻击的实现需要大量线下的手动工作,比如说 rT 和 Tbase 等。

但是,BUSted 攻击的核心思路(根据内存访问指令的偏移来确定 Secret)值得借鉴。

作者:Esofar

出处:https://www.cnblogs.com/yinhaofei/p/18408360

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Yin-SHT  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示