iDEV: Exploring and Exploiting Semantic Deviations in ARM

IoT 3周前 admin
53 0 0

今天为大家带来ISSTA'21上的一篇文章《iDEV: Exploring and Exploiting Semantic Deviations in ARM Instruction Processing》(因标题字数限制而截断)。这篇文章聚焦ARM指令集语义偏差的问题(ISDev),设计实现了框架iDEV来对ARMv7-A指令集进行了测试,最终发现了大量能产生语义偏差的指令。

Background

ARM架构已经广泛应用在各类设备,其中一个很重要的原因是ARM独特的授权模式,但这也导致了不同厂商对ARM ISA实现的不同,特别是ARM文档中还包括一些unpredictable的指令。此外,不同的模拟器和二进制分析工具也都有各自的实现。因此,对于同一条ARM架构的指令,在不同的平台或者分析工具下可能会有不同的执行或者解码效果。这就是文章所指出的语义偏差问题(Instruction Semantic Deviation,即ISDev)。

针对这一问题,作者提出了iDEV框架,通过使用不同平台和反汇编工具对Armv7-A指令集进行差分测试,系统地探索语义偏差问题。

ISDev

文章首先对产生ISDev的指令进行了分类:

类型1: Execution Deviation,也即执行偏差。指同一指令在不同的硬件或模拟器平台表现出不同的行为。

类型2: Disassembly Deviation,也即反汇编偏差。指同一指令在不同的反汇编工具下产生了不同的解码结果。

类型3: Execution-Disassembly Deviation,执行-反汇编偏差。指同一指令在执行平台和解码器下有不一致的结果。具体又分为:Type3-1(可执行但不可解码)和Type3-2(可解码但不可执行)。

针对这几种类型的指令,作者分析了它们带来的安全影响。

对于产生执行偏差的指令,一些攻击者可以使用这些指令来推测所运行的平台。例如,恶意软件可以通过执行这些指令来推测是否在虚拟环境中运行,如果是则停止执行,从而绕过一些虚拟环境。PoC如图所示:

iDEV: Exploring and Exploiting Semantic Deviations in ARM

对于产生解码偏差的指令,其可能会导致反汇编工具出现错误,进而欺骗分析者。PoC如图所示:

iDEV: Exploring and Exploiting Semantic Deviations in ARM

对于产生执行-反汇编偏差的指令,攻击者可以利用可执行但不可解码的指令来执行恶意行为而欺骗二进制分析工具,PoC如图所示:

iDEV: Exploring and Exploiting Semantic Deviations in ARM

攻击者也可以将恶意代码隐藏在错误处理函数中,通过执行可解码但不可执行的指令来触发错误处理函数,进而执行恶意代码,欺骗反汇编工具。PoC如图所示:

iDEV: Exploring and Exploiting Semantic Deviations in ARM

iDEV

在分析了ISDev问题带来的影响后,作者针对这几类指令,设计了iDEV进行检查,其架构如图所示:

iDEV: Exploring and Exploiting Semantic Deviations in ARM

iDEV首先对ARM指令集进行预处理,因为原有的32位ARM指令会产生2^32的搜索空间,严重影响测试效率,作者通过预处理限制指令中的条件域和操作数域来降低搜索空间,使得其搜索空间仅为原来的1/128,此外,作者还忽略一些与NOP一样不会触发任何信号的特殊指令。

而后通过动态执行测试和静态反汇编测试分别对指令进行差分测试。在动态执行测试中,如果要观察指令执行前后的内存数据,会带来很大的开销,为此,iDEV仅仅观察一些运行时行为,比如Linux signal来观察指令执行。此外,为了保持测试的一致性,每条指令测试前,iDEV都会将测试引擎恢复到初始状态。之后,iDEV通过分析信号量来对指令进行分类分析。

在静态反汇编测试中,除了差分测试外,iDEV额外对反汇编结果进行了标准化处理,进而方便比较出它们的不同。最后就是将结果进行交叉比对。

Evaluation

本文在多个硬件和模拟器平台以及反汇编工具上使用iDEV对ARMv7-A指令集进行了测试。

iDEV: Exploring and Exploiting Semantic Deviations in ARM

对于动态执行测试,可以看到,由于所选设备的性能问题,如果不进行预处理,整个测试的时间会达到上百个小时,进行了预处理后,只需要在2-3个小时内就能在大部分硬件设备上完成测试。

iDEV: Exploring and Exploiting Semantic Deviations in ARM

从动态测试结果来看,大约有18.9%的指令会导致类型1的执行偏差。

iDEV: Exploring and Exploiting Semantic Deviations in ARM

从静态反汇编测试结果来看,有8,815,368条指令会导致反汇编工具的偏差,占到所测指令的26.27%。

作者还对这些现象产生的原因进行了分析,具体可以见文章,此处不再详细介绍。

Summary

本文针对指令集语义偏差问题,全面系统地分析了其类型、产生原因和带来的安全影响,并设计了iDEV框架来对ARMv7-A指令集进行测试,最后详细分析了实验结果,对指令集特别是ARM指令集的语义偏差问题研究做了很多贡献。当然,文章也存在一些不足,例如iDEV仅测试了ARMv7的32位指令,没有针对现在常用的ARMv8指令进行测试,iDEV本身也存在误报、不够自动化等问题。但总的来说,这篇文章仍然是一篇非常值得推荐的研究指令集语义偏差问题的文章。


原文始发于微信公众号(COMPASS Lab):iDEV: Exploring and Exploiting Semantic Deviations in ARM

版权声明:admin 发表于 2022年11月14日 下午5:09。
转载请注明:iDEV: Exploring and Exploiting Semantic Deviations in ARM | CTF导航

相关文章

暂无评论

暂无评论...