恶意代码对ARM硬件平台的利用


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汇编有充分的掌握!
  在后面的文章中我们将通过示例来说明上述技术的使用方法。


编写时间:20:10:34  2008 年 03 月 15 日  星期六

修改时间:17:13:39  2008 年 03 月 16 日  星期日