网络安全 频道

瑞星09大会 反病毒虚拟机的现况与未来

  【IT168 瑞星09技术大会报道】每年一届的瑞星技术大会堪称互联网安全狂欢节,众多安全领域专家纷纷在这个场合下发表自己多年来的研究成果。今年的瑞星2009技术大会,也可以说是一次对云安全的一次回顾与展望。面对众说纷纭的云,未来的应用和发展又在哪里?相信本次大会给人不一样的感受。

  周军:瑞星反病毒安全实验室 资深研究员。2005年加盟瑞星公司,曾任职病毒分析工程师;目前主要从事信息安全研究以及相关产品的原型开发工作。

  反病毒虚拟机的现况与未来

  大家好!我是瑞星研发的周军。很高兴今天有这样一个机会由我来给大家介绍瑞星新一代反病毒虚拟机。瑞星新一代反病毒虚拟机在执行效率上取得了巨大的飞跃。我们新一代的虚拟机到底有多快呢?我做了一些测试,通过数据来为大家揭晓答案。

  先来看一下测试的环境。我的真实机是一台奔4,3.0的机器,我们嵌入了一个内核。我们来看一下最终的测试结果。第一张图表展示的是瑞星新一代虚拟机和主流研究型虚拟机执行效率的比对。

  这张图的横坐标展示的是不同实行环境。从左到右,真实机、bochs-2.4、qemu-0.10.0、新一代瑞星虚拟机。这张图纵坐标测试程序在不同执行环境下执行时间。这个柱状越高,这个执行程序越长,测试环境执行效率越低。

  第一个测试用的是LZMA算法,最终测试结果。我在每一个测试环境下分别执行了三次,最终取了一个平均值。结果从数据上看一下,真实机这个程序执行了117.58秒,在新一代瑞星虚拟机118.31,我们新一代虚拟机执行速度几乎达到了真实机的执行效率。在bochs执行了3197秒,qemu是48545秒。

  这张图展示的是瑞星新一代虚拟机和主流高速虚拟机执行效率的比对。依次是是真实机、qemu结合了kqemu、VMware、VirtualBox、最后一个是新一代瑞星虚拟机。数据呢117.58、135.07、123.70、128.06、118.31,从数据中可以看出来我们是占有一定优势的。

  这张展示的是新一代瑞星虚拟机和我们传统反病毒虚拟机执行效率的比对。从图上结果已经很分明了,真实机和瑞星新一代虚拟机测试当中,新一代瑞星虚拟机比传统虚拟机执行效率高一百倍效率。

  通过我们这样数据比对,可以发现我们新一代虚拟机执行效率发生了飞跃,将为我们用户带来什么呢?

  新一代瑞星虚拟机的应用可以看到,可以为我们用户带来更高率的杀毒引擎、更加强大已知病毒查杀能力。由于我们新一代瑞星虚拟机执行效率得到巨大提高,在内部很多先进的技术,很多由于原来虚拟机不够快,而导致这些技术只能用在我们反病毒实验室内,提出执行效率的提高,这些技术将有可能被产品化,将有把这些很先进行为虚拟技术推向我们的用户,我们将为用户带来更加精准的未知病毒查杀问题。

  新一代虚拟机的应用还为我们带来更加快速的对病毒问题的响应。

  首先我介绍一下虚拟机在反病毒领域的意义,以及在反病毒领域应用现状。接下来会介绍新一代虚拟机技术亮点以及执行原理。最后再共同展示一下我们瑞星新一代虚拟机在未来的应用前景。

  第一个,反病毒领域为什么需要虚拟机?我们知道在单机时代,绝大多数病毒都是感染性病毒。这些病毒往往在干扰目标程序的会加入加秘等等形式进行病毒代码,可以躲过我们杀毒软件的特征识别,因为它们在静态特征上几乎跟原来完全不一样。我们通过对这些病毒的分析和研究,发现可以通过虚拟执行来还原这些被加密甚至很多被变形的病毒程序都可以还原这些病毒的本来面貌。仍然可以通过传统识别方式识别病症。到互联网初期,病毒制造者心态由原来炫耀性的编写病毒然后向利益性的编写病毒。由于心态发生变化,他们更愿意编写这些功能更加强大、传播速度更加广泛的病毒,于是一些木马、后门、以及蠕虫成为病毒程序的主流。从病毒存在形态上,病毒制造者更愿意通过加壳等等方式来对抗我们杀毒软件特征识别。瑞星从03年其实就已经实现了壳的,通过虚拟机来识别壳。在瑞星07增强版瑞星虚拟机得到了一次强大的更新,可以更好的应付这种壳的问题,可以很轻松的通过虚拟机虚拟很多比较强悍的壳。

  到了互联网时代,由于病毒制造者分工合作更加细分,很好的促进了病毒的互联网化。这样的话给我们反病毒行业带来很大的压力。这些病毒制造者他们很倾向于利用一些代码混淆工具来实现病毒的批量生成。这些批量生成病毒有很大特征,就是更太特征几乎完全不同,而动态行为是可以,我们从中发现很大相似性的。因为它们通过同样的病毒通过变形手段产生不同的变革。

  应付这样的病毒问题,大家可以很容易想到,是不是应该使用行为分析的技术?没错。现在在整个反病毒行业里边,都在主推基于行为监控的行为分析。瑞星在经过了多年的尝试之后我们发现这种基于监控的行为分析仍然是十分有效,而且可以很好遏制病毒,很快打击病毒行为的。但是不得不说的基于监控的行为分析是具有天生行为缺陷,这是所有反病毒厂商都是无法回避的问题。行为监控这种方式,一旦监控模块或者行为分析模块没有很及时的分析出病毒行为、没有很及时遏制病毒行为,很有可能这个病毒会在用户机器上产生很严重的后果。当然不是说,我这样说完了基于行为监控是不是不能用了?不是的,目前在我们应用当中,我们现在可以保证现在行为分析还是很安全的。但是是不是有更好的替代解决方案呢?是有的。其实各大厂商在它们产品当中,包括瑞星都实现了基于虚拟机的行为分析。但是一直以来各大厂商虚拟机都面对这样问题,执行效率非常低,虚拟机的应用效果其实不理想。随着新一代瑞星虚拟机的应用,将打造真正意义上基于行为分析的虚拟机。

  在云安全时代,我们瑞星虚拟机将会嵌入后端,为用户提供及时、有效的、对病毒防御的解决方案。

  下面我们来看一下虚拟机在整个反病毒领域的应用现状。

  先来看一下反病毒虚拟机的结构。主要包括这样两个部分,虚拟CPU和虚拟操作环境。虚拟CPU的目的是使目标程序的指令可以按照之前程序编写者的意图执行,也就是我们可以识别每条指令正确执行。虚拟操作环境是为了使病毒程序在我们虚拟机当中运行的时候能够发挥出运行行为,以便于我们捕捉它。由于目前绝大多数病毒都是针对X86的CPU,所以虚拟机都是模拟这些环境架构的。

  在X86 CPU应用了纯模拟执行和动态翻译执行。纯模拟执行具有控制性很强的优点,可以做非常细密度的分析,所以在处理感染性病毒优势是非常明显的。很多杀毒软件像卡巴斯基都是利用这样的执行方式在做虚拟CPU。所以大家可以看到,瑞星从我们最早的版本到现在一直保持着非常优秀的对感染型病毒的处理能力。动态翻译执行在处理感染型病毒上面效果不好,所以说利用这种方式实现虚拟CPU的厂商,更多的把虚拟CPU用于启发式扫描的应用,但是实际上效果并不好。

  反病毒虚拟机在Windows模拟方面,由于应用领域不同,使得各种产品程度也不是不相同的。具体表现在多线程、多进程、对象系统、驱动、文件系统等等支持都是不尽相同的。

  下面总结一下整个反病毒传统虚拟机存在的主要问题有哪些?首先在操作系统模拟方面不够全面,所以需要更加完善的环境模拟;还有传统虚拟机对目标程序的访问上面是非常耗时的,在后面我会做一些简单解释。在虚拟X86CPU方面,由于我们虚拟X86CPU有这样两种性质截然不同的应用,首先对目标程序实现非密度的分析,同时在一些启发式应用当中又需要对目标程序做深度执行,获得动态的API流程。所以像传统虚拟机这种单独基于某一类执行虚拟机是无法胜任工作的,所以需要更加通用、更加高效的虚拟化解决方案。

  下面我来给大家介绍一下新一代瑞星虚拟机的技术亮点。

  首先我们新一代瑞星虚拟机实现了一个迷你Windows操作系统。这样一个实践可以大大减少之前提到的虚拟机在访问目标程序,尤其是目标程序地址空间的时候所带来的时空转换的代价。

  这张图左面是传统反病毒虚拟机的架构。传统反病毒虚拟机由于执行效率不够高,所以往往被设计很简单,真正在虚拟机上被执行的指令往往只有目标程序本身。当虚拟机要去访问目标程序的地址空间,这个时候所有的操作都需要被虚拟机来通过软件的方式进行转换。比如说内存地址的转换,完全需要软件来做,这样就会带来很大时空转换的代价。

  我们新一代瑞星虚拟机,右边这张图,橘黄色是瑞星迷你操作系统,是嵌入到虚拟机上被执行的。当虚拟机需要操作目标程序的时候,很多操作都是可以由瑞星迷你操作系统完成,这个操作过程是在虚拟机中被执行的,而运作过程是在本地执行的,显然本地操作是可以被本地执行的。后面会介绍这些本地执行的过程会导致操作的方法,这些操作过程是可以通过硬件辅助的,大大提高了时空转化的代价。

  瑞星新一代反病毒虚拟机实现了用户态虚拟地址空间和内核态虚拟地址空间模型。分别执行用户态恶意程序和虚拟执行内核态恶意程序。有这样两套独立的地址空间模型是可以很好执行用户态以及内核态的目标程序的。

  新一代瑞星虚拟机实现了完善内核对象系统的支持。我们模拟了内核对象、进程、线程等等对象,还有文件、注册表在我们虚拟机内部都是以对象系统实现的。从这张图上大家可以看到现在虚拟机内部已经被创建出来的一些对象,包括动态库的对象、进程对象、线程对象、文件系统对象等等。

  新一代瑞星虚拟机还实现了比较完善的对多进程、多线程的支持。像很多壳还有病毒,主流的方法是通过多线程的方式进行解密的,来对付我们目前传统反病毒虚拟机。在新一代瑞星虚拟机对多线程程序是可以轻松应付的,这些程序在我们内部是可以很好的进行。这张图上展示的是我们现在虚拟环境内部已经创建出来的一些进程,以及这些进程创建的线程。

  新一代瑞星反病毒虚拟机可以提供这种很详细的API日志。在实现的时候,我们是通过分析了Windows图份件为每一个API实现了API描述,每个参数的类型等等信息。通过在执行的时候,依据这些描述结构可以打出非常详细的API日志,包括返回执等等。大家可以想象拥有这样非常详细的日志对于病毒分析员在病毒分析上面可以很大提高病毒分析员的病毒分析速度和质量。

  下面介绍一下全新虚拟CPU的特点。首先根据反病毒领域的应用,我们设计了两个特性截然不同的虚拟单元。分别是纯模拟的执行单元和结合分时技术和硬件MMU辅助的本地执行单元。由于在我们引擎查杀毒过程当中在不同阶段会应用不同的应用。在启发式的环节当中我们又需要对这个程序做深度执行,所以我们这两个执行单元是可以在执行中间做无缝切换的。

  下面分别介绍一下这两个执行单元的特性。

  首先纯模拟虚拟执行单元是经过上一代虚拟机优化而来的。经过测试,在一台奔4 3.0机器上平均每秒可以执行两千万条以上的指令。这个执行效率在整个反病毒传统虚拟机里面,这个执行效率跟其他家基本上平起平坐的。新一代瑞星虚拟机本地执行单元是在这一代虚拟机当中从新设计的执行单元,执行效率可以比原来高十到二百倍。

  下面介绍一下关于虚拟执行方面的技术原理。首先我们先来对虚拟执行技术历史做一个回顾。最初虚拟执行是通过纯模拟方式实现的。但是这种纯模拟实行效率很低,所以逐渐演变出了动态翻译执行。动态翻译执行仍然有一定效率瓶颈,是在内存访问的时候。于是基于MMU辅助的动态翻译执行逐渐取代了动态翻译执行了。最新的虚拟执行技术是基于硬件辅助的虚拟化。像因特尔的AT都是属于硬件辅助的虚拟化。

  纯模拟执行是通过这种以函数来取代指令的方式实现虚拟执行的。说白了就是通过一个函数模拟一条指令的执行过程。显然从这样一个图上就可以看到,一条机器指令通过一个高级语言的函数实现它的时候,显然这种指令数是1:N的方式实现的,显然这样一个执行过程必然会带来效率低下的问题。这种纯模拟执行就没有优点了吗?不是的。它的优点可以说和它的执行效率比起来,优点是更加突出的。由于每条指令在执行的时候都是受控执行的,都需要逐条指令模拟程序的执行。这个执行的控制力度是非常细的。像我之前提到过的双处理感染性病毒、感染性病毒查杀,利用纯模拟运行做是很明显的。

  由于纯模拟执行效率相对比较低,又出现了动态翻译执行,可以把动态翻译执行想成纯模拟模拟函数当中有效指令抽出来拼接而成这样一个翻译块,通过直接执行翻译块来实现虚拟执行。每当抽去函数的时候,节省了很多掉用函数的时候等等开销,说白了当我们做这样翻译的时候,我们一次翻译指令越多换来执行效率提升将会越大。所以这种动态翻译执行是基于指令块来做的。翻译好的块是很容易被缓存的,可以通过缓存翻译块的方式再次对动态翻译执行优化。优点是比纯模拟执行速度要快,而且它的翻译过程代码是与平台无关的,一致性很强。正是由于这种执行方式是以块来执行的,所以对指令控制力度就变得很粗了。像处理感染性应用上边,这种方式效果并不好。同时由于在翻译过程当中这块会被缓存,这样缓存块将会频繁的失效,所以很多壳、还有病毒执行过程,动态翻译执行执行效率是比较低的。

  我做了一个例子,从这个图上可以看到,同样是刚才代码,我们在翻译过程当中对ECX执行访问,用一条指令来翻译了。这个翻译的过程我是做了一个独立的一个段,把目标代码放到段当中执行,这样就可以利用某些硬件MMU辅助机制来实现翻译。在执行这种翻译块的时候,内存访问完全是由硬件MMU辅助执行的。可以很大提高动态翻译执行的执行效率。它的优点是执行速度比纯粹的动态翻译执行快,缺点呢同样翻译过程是基于块的,所以指令要粗一些。而且如何翻译跟选用MMU硬件相关,所以它的缺点是部分代码要单独移植的。我们做的时候更多是用分页方式做的。

  最后看一下硬件辅助虚拟化的特性。硬件辅助虚拟化可以使全部敏感指令产生陷入、还有硬件支持环境切换、对内存虚拟化的支持。它的优点是速度快;缺点,指令控制粒度非常粗,而且对CPU平台依赖相当强的,缺点现在目前来看仍然只有中高端的CPU才能执行。像我做测试的时候,我那台奔4的机器还没有支持硬件辅助虚拟化。

  下面介绍一下新一代瑞星虚拟机执行单元的技术特性。首先,目标代码与执行单元分时共享物理CPU的关系。在目标代码执行过程当中,所有内存操作都是通过硬件MMU来辅助实现这种地址转换的,所以没有软件转换内存带来时间开销。第三点,目标代码在真实CPU用户态本地执行;最后,目标代码执行异常监控机制;

  这张图是执行流程。首先,虚拟机调动器通过切换页目录集成器来接管很多地址转换等等操作。随后切换目标代码的计算器环境。在切换环境之后,相当于现在执行环境就已经变到目标代码环境了。一旦目标代码发生了异常,或者外部终端源发现信号我们虚拟机重新获得控制权保存目标代码的环境,然后调到虚拟调度器决定是否做下一步执行。

  这张图,展示的是新一代虚拟机本地执行模拟在环境切换产生的变化。首先在切换前由CPU页目录指针所指向的页表是由当前操作系统提供的。这张页表描述的是本地的进程,有如瑞星虚拟机进程。发生切换之后,CPU的页目录指针计算器所指向的页表是由瑞星虚拟操作系统内核提供的。通过这种切换页表的方式来实现为目标代码构造独立地址空间的过程。在这个时刻所有的终端异常都会为我们现在操作系统捕获。一旦发生切换,我们可以看到,CPU的终端所指向的页表是由瑞星虚拟操作内核提供的。这样所有的终端和异常都会被瑞星模拟操作系统捕获。

  这两张图完整展示了瑞星虚拟本地执行原理全部过程。说起来比较简单,但是实践过程中还是需要一些细心工作的。

  最后我们再来共同展望一下我们瑞星新一代虚拟机在未来应用前景。首先瑞星虚拟机一定会为我们打造一个全新的深度引擎。会实现非常强大的对目标程序行为分析的功能。其实瑞星在多年做行为分析的实践当中,我们积累了很多关于行为分析的先进技术,只不过由于虚拟机效率迟迟没有得到改善,我们很多技术只停留在实验室内部。新一代虚拟机应用将会为用户带来很强大对目标程序的行为分析,带来很好的启发式扫描。

  除了直接面向用户功能以外,我们还会利用新一代虚拟机打造很多我们内部病毒分析辅助工具。比如说之前程序执行、路径跟踪等等工具,甚至包括像病毒报告自动生成都是可以通过虚拟机实现的。

  最后瑞星虚拟机虚拟化技术可以用来做模块,跨平台的移植工作,可以解决不同操作平台的兼容问题。

  最后我来给大家展示一张,我们内部已经做了的,基于我们新一代虚拟机的虚拟调试器。总的来说,我们新一代瑞星虚拟机执行效率巨大飞跃,将会为我们引擎带来更好的新鲜血液、带来很好的技术提升,为用户更好的用户体验。谢谢!

0
相关文章