ARM 结构有很多区别于CISC结构的特性充分利用可以大大提高攻击的质量。
01、ARM体系结构种类繁多、功能复杂、指令集庞大。 攻击者可以利用ARM体系结构的复杂性针对不同的硬件开发不同的病毒。 病毒进入系统之后可以使用IsProcessorFeaturePresent 和 QueryInstructionSet这样的API查询硬件特性。 根据不同的硬件特性,释放不同指令集编写的攻击模块。 而防御者必须对所有指令集和功能都了解才能有效的分析病毒。 有些新的指令集,虚拟机未必支持,被病毒利用就可以有效的对抗虚拟机。 这就像在PC平台。可以使用MMX、SSE、SSE2 、SSE3、3DNOW!这样的指令集写病毒。 可以大大提高病毒的分析难度。RISC芯片更新换代更快,这点更好利用。
02. ARM体系结构的指令长度固定。 我们知道ARM体系结构的指令一般有32位的ARM指令和16位的Thumb指令。 因为指令长度固定,病毒可以利用这个特点方便的实现指令顺序调整(交换指令即可)。 针对程序中那些顺序无关的指令集合进行顺序调整,可以打乱对手的分析。 指令顺序调整是一种非加密的变形手段,特别适合用在多态病毒的最初解密代码中。(这部分不能加密。) 病毒生成和填充垃圾指令非常容易。 16条4B的不同指令可以产生:16! 超过20万亿种排列方式。 而PC平台的X86指令集中单条指令的长度从1B-12B不等。要实现指令顺序调整很困难。 目前我们已经成功实现了病毒传播过程中的指令顺序调整。 从数据结构角度考虑你可以把一段顺序可调指令组合考虑成一组4B/2B的线性表。
03. ARM体系结构的指令编码简单。 ARM指令可以分成若干大类,每一大类中每种指令的不同比特位的含义固定。 由于编码简单,病毒可以携带自己的垃圾指令生成器,随机生成大量垃圾指令填充自身,扰乱分析。 在病毒传播过程中随机填充垃圾指令,将大大提高了对手的分析难度。 我们编写了一个mov指令的垃圾指令生成函数GC_MOV,发现确实很容易编写垃圾指令生成器。 而PC平台的X86指令集长度不定、结构复杂,想随机生成垃圾指令比较困难。 一般采用将不同长度的垃圾指令分类放在程序中。根据所需长度随机拷贝调用。显然随机性很差!
04. ARM体系结构有大量寄存器、主要操作在寄存器中完成。 这是所有RISC处理器的特点,病毒却可以充分利用。 一项重要的干扰措施是调整病毒非加密部分寄存器的使用,换用不同寄存器。 有大量的寄存器所以可以选择的余地非常大。 主要操作在寄存器中完成,可以修改的代码非常多。 而ARM指令比较简单。在传播过程中定位要修改的指令,对指令进行修改很容易。
05. ARM体系结构有多种模式。 ARM 体系结构有多种模式根据需要切换使用。 病毒可以利用这一点不断换用多种模式,从而提高分析的难度。 我发现在我的PPC虚拟机中系统一般处于用户模式。 通过SetKMode可以切换到系统模式,在系统模式中通过msr指令进入其他模式。
ARM平台还有其他一些特性,可以充分利用。 要能够做到这些,你必须对ARM体系结构和ARM汇编有充分的掌握! 在后面的**中我们将通过示例来说明上述技术的使用方法。 |