快捷搜索:  as  test  伦敦晚  万博  创意文化园  tagid=29386  gtgt  as -0

max pool(www.ipfs8.vip):通过单步骤试研究故障注入对处置器状态的详细影响

0x01 基础概述

故障注入是一种侧信道攻击手艺,会将将某种形式的滋扰或无效状态引入到系统中,以更改该系统的行为。通常,在嵌入式硬件和电子装备中,这种滋扰可能有多种形式。电子装备中故障注入的常见方式包罗:

- 时钟毛刺注入(错误的时钟沿被强加到IC的输入时钟线上)

- 电压故障注入(对IC电源线施加高于或低于预期电压的电压)

- 电磁滋扰(引入电磁滋扰)

本文将重点先容电压故障注入,稀奇是目的装备电源正常事情条件之外的瞬时电压的引入。这些瞬时脉冲或输入电压下降(毛刺)会影响装备的运行,并到达特定的效果。通常期望的效果包罗“损坏”指令或处置器中的存储器以及跳过指令。先前的研究解释,可以预见识实现这些效果,而且也对可能由种种行为引起的EM效果(由毛刺引起)提供了一些注释 。

然则,在将故障和相关的EM效应与处置器级其余详细状态转变(即,在导致指令被损坏或跳过的故障时刻,处置器中确切发生的情形)相关联方面,已揭晓的研究存在差距。本文旨在量化和限制处置器在注入故障之前,之中和之后的状态,并形貌符号的离散转变,例如寄存器(包罗通用寄存器)以及控制寄存器(例如$ pc和$ lr),内存。

稀奇谢谢Toothless Consulting的同事,他的优异博客文章系列是我对故障注入的先容以及对该项目的启发。还要谢谢克里斯·格林斯基(Chris Gerlinsky),他对嵌入式装备平安性的研究,稀奇是他关于打破LPC系列芯片上的CRP的演讲,是该项目中的名贵资源。

https://toothless.co/blog/bootloader-bypass-part1/
https://recon.cx/2017/brussels/talks/breaking_crp_on_nxp.html

0x02 测试设置 

选择举行测试的目的装备是NXP LPC1343,这是一种ARM Cortex-M3微控制器。为了控制输入目的电压并协调毛刺,使用了基于Xilinx Artix 7 FPGA的Digilent Arty A7开发板。为Arty板开发了定制的门控软件,以便于基于多种因向来控制和触发毛刺。出于本文的目的,使用的两个主要触发器是一条GPIO线,该GPIO线与某些装备操作同步地高/低,以及对应于“ step”事宜的SWD信号。FPGA网关软件的源代码可[在此处获得](https://github.com/Ethan-ks/glitcherPlatform)。

https://github.com/Ethan-ks/glitcherPlatform

为了在尺度电压电平(Vdd)和毛刺电压电平(Vglitch)之间切换,使用了Maxim MAX4617多路复用器IC。它能够在短至10ns的输入之间切换,因此适合在LPC 1343电源轨上以足够的精度和时序发生毛刺波形。 

如上图所示,Arty A7监视“触发”线,即从目的输出的GPIO或目的与调试器之间的SWD线,详细取决于操作模式。当知足预期条件时,A7将凭证提供的波形说明符将“毛刺消除”,通过电源多路复用器电路触发Vdd和Vglitch之间的切换,并将其馈送到目的Vcore电压线。Segger J-Link用于提供对目的的调试接见,而且SWD线也被馈送到A7举行触发。

为了利便触发随便SWD下令,在A7上实现了准系统SWD吸收器。吸收器剖析从总线嗅探到的SWD事务,并输出反序列化的标头和事务数据,然后可以将这些值与预先设置的目的值举行对照。这允许基于任何SWD数据(例如S TEP和RESUME事务)触发glitchOut线,从而为单步指令提供了准时毛刺的方式。

在单步执行指令时代对故障举行任何直接测试之前,考察正常操作时代的故障及其引起的影响有助于提领会基本信息,并为假设提供平台,以便以后举行测试。为了提供考察种种形式和连续时间的故障注入效果的环境,程序执行包罗一个简朴的循环,递增和递减两个变量。在每次迭代中,将凭证已知的目的值检查每个变量的值,而且当知足任一条件时,执行将跳出循环。在循环之外,将凭证预期值检查这些值,若是这些值差异,则将这些值通过UART传输到攻击的PC。

使用Binary Ninja逆向软件提供了已编译C的可视化示意。由于所提供的程序集示意在编译和链接后天生的机械代码,因此我们可以确保它与处置器的行为完全匹配(忽略诸如并行执行之类的看法)。

只管很简朴,但此环境为故障注入提供了许多有趣的目的。循环中包罗内存接见指令(LDR,STR),算术运算(ADDS,SUBS),对照和分支运算。此外,PIO2_6的脉冲为来自FPGA的glitchOut信号提供了触发信号,凭证对该信号施加的延迟,可能会针对整个环路中的差异区域/指令。通过使用分流电阻器和传输线探针跟踪ARM内核的功耗,可以看到执行情形。 

以下波形显示了GPIO触发线(蓝色),以及来自LPC的电源走线(紫色)。GPIO线先变高电平一个周期,然后变低,这标志着环路的最先。接下来是重复16次的模式,示意循环的16次迭代。这在任一侧上都由与用于将数据写入UART的代码相对应的电源迹线限制,并分支回到主循环的最先。 

获取到了以下内容: 

1. 处置器正在执行的现实指令的参考(通过Binary Ninja举行反汇编)

2. 该执行的可视化示意,可在处置器执行时实时查看(通过电源跟踪)

3. 一种在被测系统中接纳措施的手段,可以凭证处置器(FPGA滋扰器)的行为举行校准。

使用以上信息,可以改变故障与触发器之间的偏移,而且可以(大致)将该时序与正在执行的给定指令或指令组相关联。例如,通过在电源轨迹上的模式的第六次重复历程中的某个时间触发毛刺,我们可以考察到电源轨迹的该部门似乎过早被切断,而且目的在UART上讲述的值反映了某种循环的第六次迭代时代行为欠妥或损坏。 

到现在为止,所接纳的方式已与传统的故障注入参数搜索手艺保持一致,使用装备操作中固有的某些行为(此处为GPIO线脉冲)优化系统可见性,以确定最有用的时序和毛刺连续时间。只管这可以大略领会乐成注入的故障的影响(对于上面的示例,我们可以假设在循环的第六次迭代时代某个点的操作已更改,但更多的特异性只是推测),可能是跳过的加载指令,存储损坏或对照失败等其他可能性。

为了说明这一点,下面是运行外部循环几千次迭代的故障后,来自目的装备的UART流量的剖析,排序和计数输出。毛刺延迟和连续时间保持稳固,但在循环竣事时导致离散状态对变量状态的影响相当普遍。有些条目很容易推论,例如第一个也是最常见的效果:B是六次迭代(16-6 = 10)之后的期望值,然则A是16,因此跳过的LDR或STR指令可能已经脱离了通过先前的操作将寄存器中的值16放置在该寄存器中。然则,其他效果很难推理,例如包罗ascii文本的条目或具有错误值的变量似乎与循环的迭代次数不相关的条目。

在故障注入的某些应用中,这种模糊水平是可以接受的,例如打破无限循环,就像在平安启动旁路手艺中有时看到的那样。然则,对于更庞大的攻击,其中特定的操作需要以准确的方式举行损坏,因此必须具有更高的特异性,从而需要更细腻的明白。 

,

USDT交易所

U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

,

因此,接下来是本文举行的研究的创新部门:确立一种将错误注入攻击针对单个指令的方式,并行使SWD / JTAG等调试接口来实现指令隔离和计时。除了这项事情提供的研究价值外,在某些异常见的装备情形下,所开发的方式也可能具有现实应用,这将在后面的部门中举行讨论。 

0x03 SWD协议概述

SWD是ARM开发的调试协议,用于调试许多装备,包罗LPC 1343目的板上的Cortex-M3内核。从[ARM调试接口系统结构规范ADIv5.0到ADIv5.2](https://developer.arm.com/documentation/ihi0031/latest/)

https://developer.arm.com/documentation/ihi0031/latest/

Arm SWD接口使用单个双向数据毗邻和单独的组来同步传输数据。线路上的操作包罗两个或三个阶段:数据包请求,确认响应和数据传输。

固然,另有更多的功效,然则就本文而言,我们真正感兴趣的是数据传输,这要归功于Cortex-M3调试寄存器的特殊情形:住手,步进和延续执行都获得了治理通过写入调试暂停控制和状态寄存器(DHCSR)。此外,对该寄存器的写操作始终以0xA05F为前缀,而且仅低4位用于控制调试状态-[MASKINTS,STEP,HALT,DEBUGEN]从高到低。因此,我们可以通过查找数据为0xA05F0001(RESUME)和0xA05F000D(STEP)的SWD写入事务来跟踪STEP和RESUME动作。

由于该协议具有上述双向性,因此它不仅仅与匹配位模式一样简朴:凭证是发生读照样写事务以及当前正在举行的是哪个阶段,数据可能在任一时钟沿有用。事实证实,最简朴的解决方案是实现协议的一半,并摒弃不相关的部门,仅保留数据以举行对照。以下是SWD实现的Vivado ILA跟踪,该跟踪可以乐成剖析从SWD线嗅探到的STEP事务。

0x04 故障注入

因此,通过单步执行一条指令并从A7嗅探SWD线,就有可能在目的板的调试装备锁存数据的瞬间(或异常靠近,在10ns内)触发故障。由于目的需要几个尾随的SWCLK周期来完成调试探针需要执行的任何操作,因此在锁存的数据与指令的现实执行之间有很大的摆动空间。现实上,由于有了电源跟踪,因此可以清晰地解释SWD事务完成之后处置器流动的最先。

从上面可以看出,在4us周围存在某个延迟,这是A7的100MHz处的永恒。通过将毛刺延迟到与指令执行相对应的“凸块”中的种种偏移量,我们终于可以做到这里要做的事情:毛刺单步处置器。

为了发生更有趣的效果!通过OpenOCD编写了一个简朴的脚原本治理调试器/处置器的行为。该剧本有两种模式:一种是“快速”模式,它是调试器可以跟上的单步速率,用于查找故障的准确准时和波形;另一种是“慢速”模式,它检查寄存器和寄存器。在每个故障事宜之前和之后都举行客栈,突出显示任何意外行为。我们会看到一些有趣的效果,这些错误使最内里的循环的中央的加载寄存器指令泛起故障,在这种情形下,LDR r3 [sp]将A变量的先前值加载到r3中,并在其中递增下一条指令。

我们可以看到没有任何转变,这解释这些操作基本没有发生或没有完成-一条跳过的指令。这可靠地导致装备的UART输出泛起一对一的差异:由于inc / dec操作之一正在起作用,以是A / B的效果比循环竣事时少1 /多,现实上与A变量的状态无关的数据。

有趣的是,这项研究解释,故障注入的有用性不仅限于接见存储器(LDR,STR等)的指令,还可以用于影响算术运算的执行,例如ADDS和CMP,甚至分支指令(只管指令自己是否已损坏,或者在确定分支的ASPR上是否正在发生损坏,还需要进一步研究)。现实上,只管乐成率确实凭证指令而有所差异,但没有针对本文举行测试的指令证实可以单步执行滑行。

我们在这里看到CMP指令,该指令确定A是否与预期的目的0x10相匹配。我们看到xPSR没有更新(这意味着未设置零标志,就处置器而言,CMP的值不匹配,因此A和B的值是通过UART发送的。)有趣的是,我们看到r1已更新为0x10,与原始CMP中使用的立刻数相同。 CMP r3的机械代码为0x10,应为0x102b。思量到所考察到的行为的可能注释,可以思量使用一条指令,如LDR或MOVS,它们可能会将值移至r1寄存器中。 

只管这并不是导致考察到的行为的明确谜底,但其预测远远超出了通过功率跟踪剖析和类似手艺获得的信息水平。

0x05 研究总结

若是你可以通过JTAG / SWD调试器接见装备,就可以举行故障注入研究我最近读了一篇很棒的博客文章 ,学习了若何行使它获取一个JTAG接口!

https://labs.ioactive.com/2021/01/taping-stack-for-fun-and-profit.html

然则,对于嵌入式装备来说,存在一种异常普遍的设置,在这里提出的研究可能会证实对这种设置很有用。包罗STM32系列在内的许多装备(例如本文的DUT)都实现了一种“高但不是最高”的平安模式,该模式允许有限的调试功效,但会阻止对某些内存区域的读写操作,使行使开放式JTAG毗邻的大量手艺无效。之以是选择此选项,是由于更平安的选项是完全禁用调试,由于后者没有留下修复或更新装备固件的选项(没有自界说指导加载程序),而且许多OEM可能会选择转向可维护性而不是平安性。然则,在大多数此类实现中,仍然允许单步执行!

在这种情形下,借助装备固件的副本,类似于此地方述的探测设置或两者的连系,可能会使得原本耗时且繁琐的攻击变得险些无足轻重,所有校准和时序参数化的条件通常是故障注入攻击所必须的。是否需要在部门锁定的装备上绕过平安启动?只要在CMP上中止一下即可检查is_secureboot_enabled()的返回值。

需要举行进一步的研究以对实时测试中该方式的适用性举行真正的分类,然则开端效果简直令人鼓舞。可能会在更现实/更适用的装备固件上执行进一步的测试,例如前面提到的平安启动方案。

此外,更直接的是,本系列文章的第二部门将继续致力于更好地明白集成电路在发生故障注入攻击时,稀奇是在庞大的集成电路(例如CPU)中发生的情形。在已往的几个月中,我一直在业余时间将74个系列离散组件中的8位CPU组装在一起,一旦完成,它将成为该研究的理想目的:外部时钟是可控/可步进的,每个模块都是自力的(示波器,ALU,寄存器等)(可通过尺度示波器探头和其他装备接见)。 

 视频演示:

https://youtu.be/HYmDWs_sAhA

参考资料:

[1] J. Gratchoff, "Proving the wild jungle jump," University of Amsterdam, Jul. 2015

[2] Y. Lu, "Injecting Software Vulnerabilities with Voltage Glitching," Feb. 2019

[3] D. Nedospasov, "NXP LPC1343 Bootloader Bypass," Aug. 2017, https://toothless.co/blog/bootloader-bypass-part1/

[4] C. Gerlinsky, "Breaking Code Read Protection on the NXP LPC-family Microcontrollers," Jan. 2017, https://recon.cx/2017/brussels/talks/breaking_crp_on_nxp.html

[5] A. Barenghi, G. Bertoni, E. Parrinello, G. Pelosi, "Low Voltage Fault Attacks on the RSA Cryptosystem," 2009

本文翻译自:https://labs.ioactive.com/2021/04/watch-your-step-research-into-concrete.html:

FiLecoin

FiLecoin官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

发表评论
锐安新媒体公司声明:该文看法仅代表作者自己,与本平台无关。请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

您可能还会对下面的文章感兴趣: