
GPU恐成最大帮凶未来病毒运行技术前瞻.docx
11页GPU恐成最大帮凶未来病毒运行技术前瞻 恶意软件的编写者们不停地在寻求新的方法来伪装她们的代码,以求逃过杀毒软件的检测现在有两种新的代码伪装技术对现有的恶意代码检测分析系统形成了挑战,这就是脱壳(unpacking)和运行时多态(run—timep01yITlorphism)更为危险的是,脱壳和运行时多态全部能够利用GPu进行加速这么一来,之前困扰恶意软件编写者的那些高负荷计算运行方法,全部能够利用GPU强大的并行计算能力进行处理这将造成我们在未来而临破坏力更为强大、狡猾而令人防不胜防的恶意软件 加壳和变身恶意软件感染计算机的方法 本文中将提到数次相关汁算机病毒、僵尸用户端、木马程序、后门程序和恶意软件等很多对电脑常常程序运行产生危害的非法软件为了方便起见,本文全部将其称呼为“怀有恶意性质的软件”或“恶意软件” 在正常情况下,这些怀有恶意性质的软件,会悄悄地插入你的系统进程中,并在后台实施部分不可告人的操作从硬件角度来分析,传统计算机系统中,只有CPU能完成这么的任务原因首先是CPU能够实施任意类型的代码,可编程性极强;其次,CPU是系统的关键,拥有实施任务相当高的权限;其三,当代CPU性能全部很不错,多关键技术的普及让这些怀疑恶意性质的软件即使运行起来,用户也极难觉察——因为你的CPU一些关键往往不会满载,NVlDIA,已经分别针对其GPU公布了对应的SDK(software developmentkits,软件开发包),用于帮助程序员实施能够在GPUJL运行的通用代码。
这些代码甚至能够使用传统的C语言来编写,比较常见的有NVIDIA和CUDA或AMD的Stream 现在,最新一代的GPU(比如支持DirectX 11的NVIDIA GeForce GTX500系列),已经许可CPU和GPU上运行的代码完全相同(如NVIDIA所推出的CUDAX86计划)在这种情况下,GPU通用计算被广泛应用于各类计算任务中当然,这部分计算任务还包含那些“雄心勃勃”的恶意软件代码编写者考虑到通用计算的巨大潜力,做出“恶意软件编写者们将利用当代GPU的强大性能,来为自己牟利”的预计就是很自然的事情了 当然,假如恶意软件需要正常的运行,必需有两个先决条件:1.躲避现有反恶意软件的防御能力;2.超越分析人员人工解析的能力很多情况下,对恶意软件的人工解析是确定、布署对应的检测并开发反制软件的先决条件为了达成这个目标,恶意软件往往使用两种手段来阻止多种反恶意软件发觉,并防御自己的运行——这就是加壳和多态性,这是使用最为广泛的、用于逃避反恶意软件扫描和防御的技术除此之外,在实际应用中,代码伪装和反调试技巧经常被用于阻碍对恶意软件代码所实施的逆向分析工程 所谓加壳,就是将自己真正需要运行的内容保护起来。
打比喻来说,炸弹外面包上鲜花,然后放在邮包里,邮包放在旅行箱里,旅行箱被放在运输飞机的某一处在加了三层壳子后,炸弹看起来像个正常的旅行箱,但一旦飞机上天,爆炸后的后果就不堪设想恶意软件往往将自己伪装成正常实施的程序,骗取系统或反病毒软件,甚至是用户本人的信任,最终实现其不可知的目标 而多态性,是指恶意软件在实施时,不将自己全部暴露在内存中——假如全部暴露,就可能难以逃脱反恶意软件的扫描所以,恶意软件将自己的一小部分暴露在内存中,然后在需要的时候再暴露另一部分简而言之就是“化整为零,按需调用”这个看起来相当“有效率”的方法,带来了恶意软件很难以防御的特征因为程序不是人,它们只能机械地实施扫描和对比的任务假如反病毒程序已经确定了几个恶意软件“变身”的方法,那么只要恶意软件下次改变一下暴露次序,或掩盖一下自己的实施目标,反病毒软件就可能无法侦测 迄今为止,这些全部的恶意软件全部利用了现在程序实施环境的复杂性,尽可能隐秘地逃脱反恶意软件的侦测更糟的是,大部分研究反恶意软件的安全研究人员们只关注于IA32架构,因为绝大多数恶意软件全部运行在X86系统上但令人担心的是,GPU通用计算的来临,为恶意软件的编写者们带来了一扇机会之窗,因为大多数安全研究者对于GPU的实施环境和指令集架构并不熟悉。
利用GPU通用计算,恶意软件可能会有效对抗现有的防御手段 机会还是威胁GPU通用计算的发展 接下来,让我们先暂停一下对恶意软件的恐惧,进入GPU的世界GPU通用计算最近几年来飞速发展,当GPU本身可编程性和灵活性大大提升后,大家开始着手探索怎样利用GPU架构进行大规模的并行计算,毕竟GPU拥有系统中最为强劲的浮点计算能力,仅仅作为3D计算显然相当可惜但GPU通用计算需要专用API才能在GPU上完美运行通常的图形APIMDlrectX和OpenGL等,全部不能很好地进行通用计算 对传统GPU来说,不论是GPU本身设计还是调用方法全部尽可能为GPU需要实施的图形计算优化所以你假如想利用GPU庞大的计算,那些需要计算的数据和变量,必需映射为图形学对象,算法处理必需被表述为像素和顶点处理的形式,假装是在进行图形计算一样这种“假装”的形式让程序员感到很束缚因为传统GPU缺乏方便的数据类型,基础的计算函数,和一个通常化的内存访问模型,使得它对于习惯于工作在传统编程环境下的程序员们来说没有多少吸引力 进入DirectX 10时代后,NVIDIA提出了CUDAfCompute UnifiedDevice Architecture)这么一个相当富有发明力的通用运算API架构。
有了这个API以后,程序员就不需要在自己的大脑中“映射”多种数据,APl作为沟通桥粱已经负担了数据转换、程序编译等任务这么一来,GPU就能很好地发挥计算效能和此同时,AMD也提供了对应自家GPU产品的通用计算方法,被称为Stream CUDA由一个C语言的极小扩展集和一个运行库组成,这个运行库提供的函数能够控制GPU,和设备专有函数和对应的数据从相对宏观的角度看,一个CUDA程序由两部分组成,一个运行在CPU上,另一个称之为“kernel”,是运行于GPU上的并行化部分不过GPU上的kernel是不能独立运行的,它只能依靠于CPU上的父进程调用,所以,它不能被作为一个独立的程序直接初始化 CUDA中的kernel在运行时被划分为多个线程来实施,这些线程被组织成多个线程块,然后交由GPU的CUDA Core也就是常说的流处理器来实施在GeForceGPU中,每个处理单元会包含8个SIMD流处理器组这8个SIMD流处理器组会依据一个线程调度器的调配,令多个线程块尽可能高效率、最大化地运作,保障整个GPU的运行效率 除了编程实施外,CUDA还提供了用于在主机和GPU问进行数据交换的函数,全部的I/O动作全部经过PCIE总线进行。
不但如此,存放器操作还能够经过DMA进行,这么就能够大幅度提升CPU和GPU工作的并行程度在内存一致性方面,主机的分页锁定内存中的一个块能够被映射到GPU的地址空间里,使得在CPU上运行的一般程序和GPU上运行的kernel能够直接访问相同的数据 总的来说,不论是CUDA还是Stream,全部是尽可能利用GPU'性能的API恶意软件要运行得有效率,就绕不开这两个API下面就让我们来看看恶意软件是怎样在GPU上捣鬼的 上文说过,运行于GPU上的kernel必需依靠CPU上的父进程恶意软件也是如此,那些能利用GPU超强性能的恶意软件往往包含两个部分GPU部分和CPU部分说得更细致部分,那就是恶意软件在实施时,会裁入GPU端的设备代码,分配CPU和GPU全部能够访问到的一块内存区域,先初始化数据,然后调度GPU代码开始实施当然,和全部利用GPU的程序一样,恶意软件能够在GPU和CPU之前往返转换,或单独让GPU运行或只让CPU运行,也能够同时在GPU和GPU并行实施 当然,恶意软件编写者不但仅看中了GPU的计算能力,她们还需要更自由、不被监视的实施空间恰好,在GPU这里,恶意软件能够和CUDA库静态链接,成为一个独立的可实施程序,这么一来,恶意软件就不需要在被感染的系统中安装额外软件。
更令人难以接收的是,现在GPU端的代码实施,和CPU和GPU之间的通讯,全部不需要管理员特权这意味着,恶意软件能够在任何用户权限下成功运行——它不需要任何权限,也没人监控它这就令恶意软件隐蔽性更高、更轻易被运行起来 束手无策?恶意软件怎样利用GPU 前文已经描述了恶意软件感染系统的方法,而且说明了它利用GPU进行并行加速的可能性接下来,研究人员将经过实例来模拟这个过程在模拟中使用的原型代码不但仅证实了恶意软件利用GPU的可行性,而且已经确信对现有的分析检测系统组成了不容忽略的挑战 研究人员选择使用NVIDIACUDA来布署源代码,当然攻击者能够很轻易地使用其它GPU代码版本,甚至还能在不一样GPU之间进行转换现在攻击者只要掌握了CUDA和Stream,就能基础上掌握100%的GPU恶意软件攻击范围还有更令人恐惧的——OpenCL是一个跨平台的GPGPU框架,致力于提供统一的API,假如它得到广泛引用,那么就连插入不一样版本的代码也完全没有必须,只要平台支持OpenCL,就可能被恶意软件利用你电脑中的GPU加速运行 1.自脱壳GPU加速 前文已经简单介绍了恶意软件的加壳技术当然,飞机上放炸弹的例子只是用于破坏性的炸弹。
在软件这里,经过多层加壳伪装后的代码,需要脱壳解秘,才能变成真正的恶意代码危害系统 通常情况下,恶意软件设计有自脱壳程序,这个程序在运行时会首先解包被隐藏的代码,然后将控制权移交给已在主机内存中变形为真实代码的恶意软件当然,一个恶意软件可能不止使用一个加壳程序,使用不一样的变换方法或改变解包程序的代码,攻击者能够轻易地制造同一个恶意软件的全新变种,还能有效地躲避检测程序 现在传统恶意软件的自脱壳算法全部不尤其复杂,因为要考虑到CPU的计算能力,一旦显著拖累系统,恶意软件不仅轻易被觉察,还给自己的运行带来了不利影响但利用GPU强大的并行计算能力后,恶意软件的作者能够利用极其复杂的加密算法给恶意软件加壳,这些复杂的加密算法最终将被GPU大规模并行架构快速而有效地处理 这种高强度的加壳、脱壳操作,为现有的恶意软件分析检测系统制造了不容忽略的障碍很多反恶意软件中用于检测自动脱壳的部分有先天缺点,没措施应对基于GPU的自解包恶意软件比如常见的PolyUnpack,在脱壳时依靠单步实施和动态反汇编,但这种技术在GPU上的动态和静态分析还很不成熟,当然也没有取得恶意软件分析系统的支持另外部分反恶意软件的脱壳系统,比如Renovo,依靠于在虚拟机中监控恶意软件的实施过程,但显而易见的是,现在的虚拟机还仅仅只能做到虚拟图形设备而已,只能实施简单的3D计算,根本不能实施GPU通用计算任务,也没有这方面的功效。
这么一来,利用虚拟机监控恶意软件的脱壳也将成为泡影 当然,还有部分检测软件脱壳的技术比如omniUnDack,这种技术理论上可能会对恶意软件在GPU中的操作起到一定的检测作用,但实际上它在应用中还是和虚拟机联合布署的,也就是说,实际应用中也不能检测到GPU中的脱壳运行情况 2.运行时多态技术 不过,前一页研究人员的演示可能并不能让人信服,有些人肯定会说,不论加壳脱壳的设备是CPU还是GPU、不论壳算法多么复杂,最终全部将恶意代码直接存放在主机内存中这么一来只要反恶意软件扫描系统内容,就能很轻松地发觉恶意软件实施意图并给对应防御方法 实际上这种情况只能代表部分恶意软件的运行方法正像本文开头解释“运行时多态”技术时说的那样,恶意软件在运行时,往往不会暴露自己的全部代码,它可能重新加壳,或只是按需分配、反复加壳脱壳那些目前需要的代码不但如此,恶意软件开发人员还会控制解码部分的粒度,也就是每。












