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