本发明总体涉及用于识别恶意文件的解决方案,以及更具体地涉及形成用于进行文件的防病毒扫描的日志的系统和方法。
背景技术:
目前,恶意软件(诸如计算机病毒、特洛伊(trojan)木马、因特网蠕虫)的量日益增加,旨在既对用户的数据又对感染有恶意软件的电子设备的用户造成危害。该危害可以通过损害或移除用户文件、未经授权将用户的计算设备的资源用于加密货币的“开采”、盗用用户的电子机密数据(例如,通信、图像、登录名、密码、银行卡信息)和其它行动来引起。此外,恶意软件不断改变,这是因为恶意软件的创造者依靠甚至更新的对抗安全应用程序的攻击和防御机制。使用各种机制,诸如恶意代码的模糊处理(换言之,例如,将原始文本或可执行程序代码置于保留其功能但抵抗分析的形式、理解工作算法、以及在反编译期间的修改)或模拟抵抗机制的使用(例如,恶意软件被赋予识别其何时在模拟器中正被执行的功能,且不显现其恶意活动)。
此外,恶意软件经常不立刻显示其恶意活动,而是执行大量的api函数调用(大约百万次的调用)、巨大量的周期(大约十亿次迭代),以及在被发起之后紧接的特定时间量(例如,使用“sleep()”函数的1小时)期间停止工作。用户的计算设备现今具有高性能和多核处理器(也具有多处理器系统),从而用户可以不注意或重视多核之一的加载状态。此外,在设备已被开启达多于1小时之后,用户正常地使用该设备。因此,如果已发起恶意软件,则对于该恶意软件来说无需立刻显示其活动。
为了对付上述方法,安全应用程序(诸如防病毒应用程序)的制造者为了文件的安全执行而采用使用孤立环境形式的虚拟机的技术。经常,这类虚拟机被称为沙盒。管理程序(这类虚拟机在该管理程序的控制下运行)包含用于拦截由其中执行的应用程序所调用的功能的机制。
应当注意,安全应用程序采用各种方法来检测恶意软件,例如,诸如签名和/或启发式分析的技术。如果在分析过程中还未确定文件的危害性(例如,如果该文件不具有可信软件制造商的数字签名),则可以通过安全应用程序移交该文件,用以在前文提及的虚拟机中分析该文件的行为。然后在虚拟机中执行转移的文件,在其执行过程中拦截该文件的活动以及被针对各个函数的调用所执行的事件,以及所拦截的事件和活动被保存在日志中且随后由安全应用程序或计算机安全方面的专家来分析。
因此,已知的用于拦截和聚集事件和活动的系统分两步工作。在第一步骤中,采集信息,以及在第二步骤中,分析信息。
已知的系统和方法的一个缺点在于,它们在文件的执行过程中不影响执行过程。例如,由正被分析的文件(或由已打开正被分析的文件的应用程序)发起的进程可能已停止其执行达1小时或通过利用保存的密码访问文件而攻击特定电子邮件客户端或报信者(用于交换消息的程序)。但是随着在虚拟机中缺少受攻击的程序,将不识别文件的有害行为。这是因为,还未找到具有密码的所需文件,恶意文件自身将终止其执行且将不显现其恶意活动。
技术实现要素:
因此,本文中公开了一种用于通过形成用于进行文件的防病毒扫描的日志来识别恶意文件的系统和方法。所描述的本发明的系统和方法使得可以在分析文件的危害性期间影响虚拟机中的文件的执行过程。
在一个示例性方面中,一种用于生成用于进行文件的防病毒扫描的日志的方法包括:在虚拟机中打开文件,其中,打开所述文件包括在所述虚拟机的虚拟处理器中执行具有第一线程的客户端进程;在执行所述第一线程期间,识别涉及至少一个客户端物理存储页面的改变的第一事件;基于对所述日志的分析确定至少一个改变的客户端物理存储页面;识别控制向所述至少一个改变的客户端物理存储页面的转移;以及生成与所述文件的打开相关联的所述日志,其中,所述日志包括指示在所述第一线程的执行期间在所述改变的客户端物理存储页面中发生的所述第一事件的信息、和正执行所述第一线程的所述虚拟处理器的上下文数据。
在一个示例性方面中,所述方法还包括:基于对生成的所述日志的分析确定在所述虚拟机中打开的所述文件是有害的。
在一个示例性方面中,识别控制向所述至少一个改变的客户端物理存储页面的转移还包括:检测到第二线程正执行来自在所述改变的客户端物理存储页面上包含的虚拟地址的代码,其中,从与改变所述存储页面的线程相同的所述进程发起所述第二线程。
在一个示例性方面中,识别控制向所述至少一个改变的客户端物理存储页面的转移还包括:检测到第二线程正执行来自所述改变的客户端物理存储页面的代码,其中,从与改变所述存储页面的所述进程不同的进程发起所述第二线程。
在一个示例性方面中,在执行所述第一线程期间识别涉及所述至少一个客户端物理存储页面的改变的所述第一事件包括:检测由所述第一线程对应用程序接口(applicationprogramminginterface,api)函数的系统调用。
在一个示例性方面中,基于对所述日志的分析确定所述至少一个改变的客户端物理存储页面还包括:确定所述改变的客户端物理存储页面的标识符。
在一个示例性方面中,所述方法还包括:响应于检测到在执行所述第一线程期间不改变至少一个客户端物理存储页面的第二事件,制止将所述第二事件记录到所述日志。
在一个示例性方面中,一种用于生成用于进行文件的防病毒扫描的日志的系统包括:存储设备,所述存储设备配置成存储虚拟机的客户端物理存储页面;以及处理器,所述处理器配置成:在所述虚拟机中打开文件,其中,打开所述文件包括在所述虚拟机的虚拟处理器中执行具有第一线程的客户端进程;在执行所述第一线程期间,识别涉及至少一个客户端物理存储页面的改变的第一事件;基于所述日志的分析确定至少一个改变的客户端物理存储页面;识别控制向所述至少一个改变的客户端物理存储页面的转移;以及生成与所述文件的打开相关联的所述日志,其中,所述日志包括指示在所述第一线程执行期间在所述改变的客户端物理存储页面中发生的所述第一事件的信息、和正执行所述第一线程的所述虚拟处理器的上下文数据。
在一个示例性方面中,一种非暂时性计算机可读介质包括用于生成用于进行文件的防病毒扫描的日志的计算机可执行指令,所述非暂时性计算机可读介质包括用于如下操作的指令:在虚拟机中打开文件,其中,打开所述文件包括在所述虚拟机的虚拟处理器中执行具有第一线程的客户端进程;在执行所述第一线程期间,识别涉及至少一个客户端物理存储页面的改变的第一事件;基于对所述日志的分析确定至少一个改变的客户端物理存储页面;识别控制向所述至少一个改变的客户端物理存储页面的转移;以及生成与所述文件的打开相关联的所述日志,其中,所述日志包括指示在所述第一线程执行期间在所述改变的客户端物理存储页面中发生的所述第一事件的信息、和正执行所述第一线程的所述虚拟处理器的上下文数据。
以上对示例性方面的简要概述用于提供对本发明的基本理解。该概述不是对所有预期方面的广泛综述,并且既不旨在标识所有方面的关键的或主要的要素,也不旨在勾画本发明的任何方面或所有方面的范围。该概述的唯一目的是以简化的形式呈现一个或多个方面,作为随后的对本发明的更详细的描述的前奏。为了实现前述内容,本发明的一个或多个方面包括在权利要求中所描述的且示例性指出的特征。
附图说明
并入本说明书中并构成本说明书的一部分的附图示出了本发明的一个或多个示例性方面,以及连同详细的描述一起用来阐述这些示例性方面的原理和实现方式。
图1为示出用于在虚拟机中分析文件的危害性的示例性操作的框图。
图2为示出根据示例性方面的形成用于进行文件的防病毒扫描的日志的系统的框图。
图3为示出根据示例性方面的生成用于进行文件的防病毒扫描的日志的方法的流程图。
图4为示出配置成在孤立的环境中支持一个或多个虚拟机的执行以进行分析的计算机系统的框图。
图5为根据示例性方面的其上可实施所公开的系统和方法的通用计算机系统的框图。
具体实施方式
本文中在根据示例性方面的系统、方法和计算机程序产品的背景下描述示例性方面。本领域的普通技术人员将认识到,以下描述仅仅是说明性的,而不旨在以任何方式进行限制。其它方面将很容易将其自身暗示给了解本发明的优点的本领域的技术人员。现在将详细地参考如附图中所示的示例性方面的实现方式。贯穿附图和以下描述将尽可能地使用相同的附图标记来指代相同或类似的项目。
用于在虚拟机中分析文件的危害性的系统模块在本发明中指的是真实的设备、系统、部件、和部件组,这些设备、系统、部件、和部件组利用硬件(诸如集成微电路(专用集成电路,asic)或现场可编程门阵列(fpga))或例如以软件和硬件的组合(诸如微处理器系统和一组程序指令)的形式、以及神经突触芯片来实现。这类系统模块的功能可以仅仅通过硬件、而且还以组合的形式来实现,其中,系统模块的一些功能通过软件来实现,以及一些功能通过硬件来实现。在特定方面中,可以在通用计算机(诸如在图5中所示的通用计算机)的处理器上执行一些或全部模块。系统部件(各个模块)既可以在单一计算设备内实现,也可以散布在多个互连计算设备之中。
图1为示出用于在虚拟机中分析文件的危害性的示例性操作的框图。系统101可以包括安全模块110,该安全模块110配置成执行文件100的危害性的分析。系统101可以包括管理程序115,该管理程序115配置成支持虚拟机120在计算设备上的执行。以用于文件的安全执行的环境的形式的虚拟机120为硬件和软件的集合(复合体),该集合将主机操作系统的资源提供给客户端操作系统,而该客户端操作系统不具有通向该主机操作系统的链路。
在一般情况下,为了分析危害性,在以用于执行文件的孤立环境的形式的虚拟机120中打开文件100。安全模块110将文件100传输到虚拟机120。在一个示例性方面中,虚拟机120由安全模块110创建。在另一个示例性方面中,虚拟机120由安全模块110从先前创建的虚拟机中选择。
文件100可以为用于将数据离散地记录在系统101的存储设备上的任何计算机资源。例如,文件100可以为
-以可执行文件的形式的程序;
-被程序使用的数据,例如动态库;
-被任何给定解释器执行的脚本(诸如微软
-包含执行脚本的文件(诸如微软
-网页,例如,采用标记语言(html)的文件,该文件可以包含嵌入在文件中或通过基准链路(借助<script>元素的“src”属性)导入的可执行代码(诸如javascript);
-图像;
-已知在被使用时(例如在被其它应用程序执行或打开时)对计算设备的用户的数据造成危害的其它类型的文件。
在一个示例性方面中,文件100可以为链路(诸如统一资源定位符(uniformresourcelocator,url)或统一资源指示符(uniformresourceindicator,uri))。
在一般情况下,在虚拟机120的操作系统中打开文件100之后进行对该文件100的分析。打开文件100指的是如下之一:
-如果文件100为可执行的,则执行文件100;
-如果文件100为不可执行的,则由应用程序打开文件100。
打开文件100的结果为创建进程122以及在虚拟机120内发起该进程122的执行。针对该进程122创建至少一个线程。
在一个示例性方面中,在用户的计算设备上执行安全模块110和虚拟机的监控器(在后文中,管理程序115),虚拟机120在该监控器的控制下运行。在一个示例性方面中,安全模块110可以为在计算设备上执行的安全应用程序或其它软件部件(例如插件、外延)(诸如防病毒应用程序、反恶意软件应用程序、木马病毒邮件过滤器等)。在其它方面中,安全模块110和管理程序115在远程服务器上(或不同服务器上)执行或作为云服务执行。在该情况下,安全模块110从外部源(例如,从在用户的计算设备上运行的安全模块110)获得文件100,并将该文件100传输到虚拟机120,在虚拟机120中,发生文件100的打开。
在一个示例性方面中,管理程序115包括拦截模块130。拦截模块130可以为管理程序115的模块、部件或功能部分。拦截模块130配置成拦截通过在虚拟机120中打开文件100时所创建的进程122的线程对应用程序接口(api)函数的调用,并读取处理器的上下文,在该处理器上正执行调用api函数的线程。应当注意,处理器的上下文至少包含处理器的寄存器的值。在一个方面中,拦截模块130还使用包含在处理器的对应于调用堆栈(例如,来自堆栈指针(%esp)和基址指针(%ebp)寄存器的地址处的存储器)的寄存器中的先前读取的数据来读取调用堆栈。此外,拦截模块130配置成聚合前文提及的数据、保存该数据(例如在数据库中或在后文描述的日志150中)并在执行在打开文件100时创建的进程之后将该数据发送到安全模块110。安全模块110接着基于来自拦截模块130的数据宣布关于文件100的危害性的判决。在一般情况下,例如根据由在打开文件100时所创建的进程122的线程对api函数的调用使用的序列和参数,在分析所保存的数据之后宣布判决。在一个示例性方面中,如果不宣布判决,则通过安全模块110将由拦截模块130保存的数据发送到外部源或外部服务,该外部源或外部服务包括第三方,诸如在计算机安全方面的专家(在图1中未示出),以供分析。
图2为示出根据本发明的示例性方面的用于形成用于进行文件的防病毒扫描的日志150的系统200的框图。
本发明的特征在于提出的系统200,除了拦截模块130之外,还包含分析模块140。在一个示例性方面中,管理程序115包含分析模块140。在另一个示例性方面中,分析模块可以为安全模块110的部件(模块、功能部分)(用模块141表示)。
在一般情况下,拦截模块130配置成拦截在打开文件100时所创建的进程122的线程中的事件。
可被拦截的事件的示例包括:
-线程对api函数的调用;
-从api函数的返回;
-系统调用,或换言之,线程对(客户端)操作系统的内核的访问以执行特定操作;
-从系统调用的返回;
-来自客户端操作系统的警报(消息、通知)(例如,线程的创建、进程的创建、模块的加载)。
在事件拦截的情况下,线程的执行被拦截模块130停止。应当注意,拦截在虚拟机120的客户端操作系统的各种保护圈处可行,实现了系统级权限和用户级权限的硬件分离。这意味着事件拦截可以发生在内核层(内核模式)或发生在应用层(用户模式)。可以通过停止线程的指令的执行来停止线程的执行。
应当注意,在一般情况下,在打开文件100时所创建的进程122的线程的执行期间,拦截模块130配置成确定正被线程调用的api函数的编码规范。这允许使用处理器的寄存器来将参数发送到调用的api函数的清楚确定。因此,例如,调用的参数可以在通用寄存器ecx(第一参数)、edx(第二参数)中找到,以及其它参数可以在堆栈(寄存器esp)中。此外,编码规范允许正在返回的值的清楚确定。例如,如果api函数返回值“0”,则这将在通用寄存器eax中进行。出于说明目的,本发明涉及特定寄存器(eax、esp等)和
通过拦截模块将拦截的事件和处理器的上下文保存在日志150中。在保存之后,日志150被拦截模块130发送到分析模块140。
分析模块140可以配置成使用一组模版。在一个示例性方面中,模版被保存在数据结构(诸如树)中。可以在虚拟机120发动期间通过分析模块140将模版添加到数据结构。在另一个示例性方面中,模版由分析模块140从数据库中选择。
在一般情况下,模版包含一个或多个规则。在一个方面中,每个规则被分配优先级。在其它方面中,系统地将规则添加到模版。
规则表示基于逻辑操作数(例如,“如果(if)”或逻辑“与(and)”的使用的逻辑条件。此外,规则可以彼此相关。在一个示例性方面中,规则使用所保存的处理器的上下文。在另一个示例性方面中,规则包含改变处理器的上下文的逻辑和用于改变处理器的上下文的数据。在又一个方面中,规则包含分析模块140将打开的文件100识别为有害的所利用的逻辑。
上述规则的示例为:
规则1:if调用fileopen(“$systemdrive:\<randomname>”),then继续执行。
规则2:if规则1andfilewrite(“$systemdrive:\<randomname>”,文本串),then继续执行。
在匹配上述示例性规则集的示例中,在打开文件100时所创建的进程122的线程访问系统硬盘的根中的随机(所请求的)第二文件100b。该第二文件100b可以具有以编程方式生成的名称,其由随机生成的字符和字母(例如,“<randomname>”)组成。就其本身而言,创建(或读取)所请求的文件100b的事件是无害的,但是已确定该文件经常为恶意功能的开端。因此,分析模块140基于上述规则1和规则2做出继续执行该线程的决定。接着,借助filewrite()api函数调用,所请求的文件100b被写入。根据所请求的文件100b的类型和写入该文件的信息,所请求的文件100b可以具有恶意功能。
系统以及规则工作的更详细示例为如下集合:
规则10:if文件100未被签署,then继续执行。
规则11:if规则10and文件100已调用fileopen(“$systemdrive:\<randomname>”),then用“成功”代替返回值and继续执行。
规则12:if规则11and文件100已调用filewrite(“$systemdrive:\<randomname>”),存储缓冲器被在打开文件100时所创建的进程使用,then将文件100识别为有害的and终止执行。
应当注意,在规则的给定示例中,“文件100”用于规则的更有说服力的且更清楚的表示。在一般情况下,规则使用在打开文件100时所创建的进程的线程。
在满足上述示例性规则10至规则12的示例性场景中,文件100未被数字地签署(使用用于密码地确认文件的真实性和完整性的已知技术)。即,文件100的提供者(创建者)是未知的。接着,在打开文件100时所创建的进程122的线程在执行过程中也访问系统硬盘的根中的随机(第二)文件100b。然而,已确定(客户端)操作系统通常禁止在系统硬盘的根中创建文件(恶意文件可以试验其它路线,直到该文件被创建)。因此,分析模块140基于规则做出用“成功”代替返回结果的决定,借助拦截模块130替代该结果,以及然后继续在打开文件100时所创建的进程的线程的执行。此后,进行写入到所创建的文件100b。如果将存储缓存器写入到所创建的文件,则该文件可以是有害的(即,具有恶意功能)。分析模块140可以确定其希望停止(第一)文件100的分析以及然后执行对所创建的(第二)文件的分析,以及基于所创建的文件的分析结果,宣布关于文件100的危害性的判决。
应当注意,上述内容仅为规则的示例。在一般情况下,规则可以是更大量的,例如,按不同路径跟踪文件的创建、跟踪被创建文件的扩展、分析被创建文件的类型、允许文件的创建以及跟踪在打开文件100时所创建的进程的线程的进一步行为(例如,是否将具有以某种已知方式将被创建文件添加到操作系统的自动启动列表的尝试)、跟踪文件100和其它文件二者的线程对属性的改变、以及跟踪线程对因特网的访问。
在一个示例性方面中,分析模块140也利用专家数据操作,该专家数据保存在单独的数据库中。该数据也可以被用在模版的规则中。
这类规则的示例可以为:
规则21:if文件100访问网络资源and该网络资源已被分配恶意类别,then将文件100识别为恶意的。
应当注意,在上述示例中,被在虚拟机中打开文件100时所创建的进程的线程正访问的网络资源的类别先前已利用已知分类方法来确定(分配)且被保存在单独的数据库中。
在一个示例性方面中,该规则包含用于分析的深度或事件的聚合深度的条件。例如:
规则31:if文件100执行一个周期andapi函数调用的事件的上下文不改变,then不拦截从api函数的返回事件。
规则(规则31)的这个示例使得可以通过减少事件拦截的次数并读取上下文来加速文件100的执行。如果在打开文件100时所创建的进程122的线程已调用持续时间大约十亿次迭代的一循环(由“createwindow()”调用和“closewindow()”调用组成),则系统可以使用规则31来制止拦截且保存每个事件的上下文。这就是说,按照上文的拦截模块130将处理至少四十亿次(该循环调用两个api函数,该事件为该调用和从api函数返回)且尽可能多次读取处理器的上下文。
在一个示例性方面中,该规则包含用于增大循环变量的条件。例如:
规则41:if文件100执行一个循环andapi函数调用的事件的上下文不改变,then在每10次迭代之后将循环变量的值增大到5倍。
上述示例性规则41可以用于通过在虚拟机120中打开文件100时所创建的进程的线程来加速循环的执行。分析模块140确定正在被执行的线程循环地调用特定事件。在该情况下未发生任何事情,这是用于反模拟的已知场景之一。为了使在打开文件100时所创建的进程的线程尽可能完全地显示其功能,需要尽可能快地完成循环且继续执行。由于上述规则,该循环将快几倍完成。
在一个示例性方面中,拦截模块130在打开文件100时所创建的进程的线程的执行期间,发现涉及改变虚拟存储器(在下文中,存储器)中的页面的事件发生。在一般情况下,涉及改变存储器中的页面的事件构成由线程对api函数的调用。存储页面中的数据的改变可以直接地(例如通过调用writeprocessmemory())或秘密地(例如通过使用setwindowlong()写入数据)发生。在该情况下,可能发现例如窗口的描述符(句柄)。应当注意,将另一进程写入存储器中可以使操作从操作系统的立场看完全合法。但是已确定恶意程序也很经常采用这类机制来插入恶意代码。涉及存储页面和处理器的上下文的改变的事件被拦截模块130保存在日志150中。
分析模块140可以配置成确定哪些(客户端物理)存储页面已被改变。通过分析日志150(存储页面的改变中涉及的事件已保存在该日志中)以及处理器的上下文,分析模块140可以发现改变的存储页面的标识符(诸如地址或编号)。
在一个示例性方面中,分析模块140配置成将改变的存储页面的标识符发送到拦截模块130。拦截模块130也识别控制向改变的页面中的任一者的转移,已从分析模块140接收到这些改变的页面的标识符。将控制转移到存储页面通常意味着线程正通过在该存储页面上包含的虚拟地址执行代码。在一个示例性方面中,在从与改变存储页面的线程相同的进程发起正执行来自改变的页面的代码的线程的情况下,进行控制转移的识别。在另一个示例性方面中,在从与其线程已改变存储页面的进程不同的进程发起正执行来自改变的页面的代码的线程的情况下,进行控制转移的识别。因此,如果在打开文件100时所创建的进程122的线程已改变存储页面,且该页面属于相同进程(其自身存储页面的改变被恶意应用程序用作针对签名分析的防御或可执行代码的静态分析的对策)或不同进程(例如explorer.exe),则在将控制转移到改变的存储页面时需要拦截进程的事件。
在一般情况下,在将控制转移到改变的存储页面已发生之后,拦截模块130和分析模块140可以执行上述行为。
上述内容的示例为
规则51:if在打开文件100时所创建的进程改变至少一个存储页面中的数据,then在将控制转移到至少一个页面(其上数据已被改变)时拦截事件。
调用规则51的这类方法使得可以在分析改变其它应用程序的存储页面的应用程序期间节省系统资源。例如,不分析前文提及的反模拟场景(不对用户数据造成危害的多个api函数调用),以及分析模块140不将每次调用保存(即,制止保存)在日志150中。在给定情况下,仅有分析是否将控制转移到改变的存储页面以及在虚拟存储器的那些改变的页面中的代码是否为恶意的。由拦截模块130如此制定的日志150仅停止获得改变存储页面的事件和在执行来自改变的存储页面的代码时发生的事件。生成日志150的该方法的技术效果为将潜在的恶意文件的行为记录在日志文件中,用于更有效地且以击败当前对策和反模拟技术的方式分析。
因此,分析模块140在从拦截模块130获得日志150之后,配置成分析已发生的事件(即保存在日志150中的事件(当前的和先前的))以及发生的事件的数据(例如,特定事件所对应的处理器的上下文)。该分析可以包括发生的事件与模版的比较。将事件循序地与保存在模版中的每个规则相比较(根据模版中的规则的次序或规则的优先级)。基于比较,分析模块140可以做出如下决定中的至少一者:
-将文件100识别为恶意的决定;
-停止在打开文件100时所创建的进程的执行的决定;
-改变处理器的上下文的决定;
-等待下一事件的决定。
应当注意,分析模块140可以组合上述决定。例如,如果文件100已被识别为恶意的,则在一个方面中可以停止在打开文件100时所创建的进程的执行。在另一方面中,可以继续在打开文件100时所创建的进程的执行,即等待下一事件用于进一步分析该进程的线程的行为和日志150的创建。在一个方面中,文件100被识别为恶意的,但是改变处理器的上下文且等待下一事件。对于文件100的功能的更全面公开,需要这类一系列活动。例如,在分析过程中创建包含恶意代码的另一文件之后,已将文件100识别为恶意的。然而,在某些情况中(例如线程试图从恶意网络资源下载东西),有意义的是继续拦截事件并填入日志150,用以分析在打开文件100时所创建的进程的线程的后续行为。在另一个方面中,即使文件100未被识别为恶意的(例如,在执行过程中打开窗口,等待来自用户的输入),也做出停止在打开文件100时所创建的进程的执行的决定。
做出的决定被分析模块140发送到拦截模块130。拦截模块130可以配置成执行所做决定所对应的活动。在由分析模块140决定等待下一事件的情况下,恢复被拦截模块130停止的线程的执行。
在一个方面中,分析模块140发起虚拟机120的重新启动。例如,如果在文件100的分析过程中创建新文件(通向该新文件的路径已被添加到虚拟机120的客户端操作系统的自动启动列表中),则分析模块140发起重新启动以便针对恶意性扫描所创建文件的功能。
在一般情况下,在虚拟机120中完成文件100的分析之后,拦截模块130可以将日志150发送到安全模块110。可以以自然方式(在打开文件100时所创建的进程的线程自身完成其执行)或通过分析模块140的决定(分析模块140已做出停止在打开文件100时所创建的进程的决定)来完成文件100的分析。
因此,上述系统使得可以基于来自分析模块140的决定(具体地,基于是否已做出将文件100识别为恶意的决定)来显现文件100的危害性。
图3为示出根据示例性方面的生成用于进行文件的防病毒扫描的日志的方法的流程图。应当注意,示例性方法的如下描述参考上文所描述的系统和部件。在生成用于进行文件的防病毒扫描的日志的一般情况下,安全模块110将文件100发送到虚拟机120。在虚拟机120的操作系统中打开文件100之后进行对该文件100的分析。在一些示例性方面中,如果文件是可执行的,则打开文件100可以包括执行该文件。在其它方面中,如果文件是不可执行的,则打开文件可以包括由在虚拟机120中执行的客户端应用程序打开。
在初始步骤310中,拦截模块130可以在打开上述文件时所创建的进程的线程的执行期间识别涉及至少一个存储页面的改变的事件的发生。在一般情况下,涉及存储页面的改变的事件可以为由线程对api函数的调用。通过拦截模块130将该事件和处理器的上下文保存在日志150中。
在步骤320中,分析模块140可以通过分析保存在日志150中的数据确定至少一个改变的存储页面。在一个示例性方面中,使用改变的页面的标识符来确定改变的存储页面。通过分析模块140将改变的页面的标识符发送到拦截模块130。
在步骤330中,拦截模块130可以在打开文件时所创建的进程的线程的执行期间,识别控制向至少一个改变的存储页面的转移。将控制转移到存储页面通常意味着线程正执行来自在该存储页面上包含的虚拟地址的代码。在一个示例性方面中,在由与改变存储页面的线程相同的进程已发起正执行来自改变的页面的代码的线程的情况下,进行控制转移的识别。在另一个示例性方面中,在从与其线程改变存储页面的进程不同的进程已发起正执行来自改变的页面的代码的线程的情况下,进行控制转移的识别。
在步骤340中,分析模块140可以生成日志150,在日志150中,保存的是:
·在打开上述文件时所创建的进程的线程的执行期间、在改变的存储页面中发生的事件;
·当在保存在日志中的事件发生期间读取的处理器的上下文,其中,在该处理器上正执行在打开上述文件时所创建的进程的线程。
在一个示例性方面中,在步骤340中形成日志150之后,在步骤350中,通过分析模块140分析该日志150以确定在虚拟机中正打开的文件的危害性。
图4为示出配置成支持在孤立的环境中执行一个或多个虚拟机以进行分析的示例性系统400的框图。如所示,系统400通常包括一个或多个物理计算机401。可以在物理计算机的主机平台上创建虚拟机120,该物理计算机包括系统硬件402和管理程序115(也称为虚拟机监控器或虚拟器)。管理程序115向虚拟机120的客户端操作系统422提供虚拟操作平台(示出为虚拟硬件430)并管理客户端os422的执行。管理程序115可以直接在下层系统硬件402上运行或作为在系统硬件402上安装的主机操作系统(未示出)内运行的应用程序或部件运行。
物理计算机401可以为物理服务器、主机、计算机服务器、台式电脑、笔记本电脑、手持式设备、或足以实现如本文中所描述的虚拟化的任何其它电子设备。如所示,物理计算机401的系统硬件402可以包括计算机处理单元(computerprocessingunit,cpu)404、存储器406(例如随机存取存储器)、和存储设备408(例如硬盘驱动)。如本领域的技术人员将领会到,系统400可以包括附加的设备、软件模块等,但是在本文中未示出,以便不会不必要地混淆本发明的方面。
在一个示例性方面中,虚拟机120包括虚拟系统硬件430和客户端系统软件,该客户端系统软件包括客户端os422。管理程序115充当在vm120内执行的客户端软件(包括一个或多个客户端应用程序424和客户端os422)与主机的下层系统硬件平台402中的硬件部件和设备之间的接口。虚拟系统硬件430包括虚拟cpu431、虚拟存储器432、虚拟盘434、以及其它虚拟硬件部件,诸如虚拟网络接口(未示出)等。注意,如本领域的技术人员将领会到,虚拟机120的所有虚拟硬件部件可以以软件来实现以模仿对应的物理部件。
如图4所示,文件100可以被存储在虚拟盘434中。打开虚拟机120内的文件100引起客户端操作系统422对进程122的创建。针对该进程122创建至少一个线程435(在虚拟cpu431上执行)。如果文件100是可执行的,则打开文件100包括由客户端操作系统422执行文件100,在该情况下,进程122包括文件100的程序代码。如果文件100是不可执行的,则打开文件100包括由客户端应用程序424打开文件100,在该情况下,进程122为客户端应用程序424的实例。
在操作中,拦截模块130可以在线程435的执行期间识别涉及vram432的至少一个客户端物理存储页面437的改变的事件的发生。该事件可以与进行系统调用(api函数)的线程435有关。通过拦截模块130将该事件和处理器(vcpu431)的上下文保存在日志150中。分析模块140可以基于日志150的分析来确定至少一个改变的(客户端物理)存储页面437及其各自的一个或多个标识符。拦截模块130可以在线程435的执行期间识别控制向至少一个改变的存储页面的转移。将控制转移到存储页面通常意味着线程正执行来自在该(客户端物理)存储页面上包含的(客户端)虚拟存储地址的代码。分析模块140可以生成日志150,该日志150包括保存如下信息:在打开上述文件100时所创建的进程的线程435的执行期间、在改变的存储页面437中发生的事件;以及在保存在日志中的事件发生期间读取的虚拟处理器431的上下文,其中,在该虚拟处理器431上执行进程122的线程435。分析模块140基于日志150确定在虚拟机120中正打开的文件的危害性。
图5为示出其上可根据示例性方面实施用于形成用于进行文件的防病毒扫描的日志的系统和方法的方面的通用计算机系统20的框图。应当注意,计算机系统20可以对应于上文所描述(例如先前所描述)的系统101、系统200、和物理服务器401。
如所示,该计算机系统20(其可以是个人计算机或服务器)包括中央处理单元21、系统存储器22和连接各种系统部件的系统总线23,各种系统部件包括与中央处理单元21相关联的存储器。如将由本领域的普通技术人员所领会,系统总线23可以包括总线存储器或总线存储器控制器、外围总线、以及能够与任何其它的总线架构交互的本地总线。系统存储器可以包括永久性存储器(rom)24和随机存取存储器(random-accessmemory,ram)25。基本输入/输出系统(basicinput/outputsystem,bios)26可以存储用于在计算机系统20的元件之间的信息传输的基本程序,例如在使用rom24加载操作系统时的那些基本程序。
计算机系统20还可以包括用于读取和写入数据的硬盘27、用于在可移动磁盘29上读取和写入的磁盘驱动器28、以及用于读取和写入可移动光盘31(诸如cd-rom、dvd-rom和其它光学媒介)的光盘驱动器30。硬盘27、磁盘驱动器28和光盘驱动器30分别通过硬盘接口32、磁盘接口33和光盘驱动器接口34而连接到系统总线23。驱动器和对应的计算机信息媒介为用于存储计算机系统20的计算机指令、数据结构、程序模块和其它数据的电源独立的模块。
示例性方面包括使用借助控制器55连接到系统总线23的硬盘27、可移动磁盘29和可移动光盘31的系统。将由本领域的普通技术人员所理解,也可以利用能够以计算机可读的形式存储数据的任何类型的媒介56(固态驱动器、闪存卡、数字盘、随机存取存储器(ram)等等)。
计算机系统20具有可以存储操作系统35的文件系统36、以及额外的程序应用37、其它程序模块38和程序数据39。计算机系统20的用户可以使用键盘40、鼠标42、或本领域的普通技术人员已知的任何其它输入设备(诸如但不限于麦克风、操纵杆、游戏控制器、扫描器等)输入命令和信息。这些输入设备通常通过串行端口46插入到计算机系统20中,串行端口46转而连接到系统总线,但是本领域的普通技术人员将领会,输入设备也可以以其它方式来连接,诸如但不限于借助并行端口、游戏端口、或通用串行总线(universalserialbus,usb)来连接。监控器47或其它类型的显示设备也可以通过接口(例如视频适配器48)连接到系统总线23。除了监控器47,个人计算机还可以装备有其它的外围输出设备(未示出),例如扬声器、打印机等。
计算机系统20可以使用与一个或多个远程计算机49的网络连接而工作在网络环境中。一个或多个远程计算机49可以为本地计算机工作站或服务器,其包括在描述计算机系统20的性质时使用的上述元件中的大多数元件或全部元件。其它设备也可以存在于计算机网络中,诸如但不限于路由器、网站、对等设备或其它的网络节点。
网络连接可以形成局域计算机网络(local-areacomputernetwork,lan)50和广域计算机网络(wide-areacomputernetwork,wan)。这些网络用在企业计算机网络和公司内部网络中,并且这些网络通常有权访问因特网。在lan或wan网络中,个人计算机20通过网络适配器或网络接口51连接到局域网50。当使用网络时,计算机20系统可以采用调制解调器54或本领域的普通技术人员所熟知的实现与广域计算机网络(诸如因特网)的通信的其它模块。调制解调器54可以是内部设备或外部设备,可以通过串行端口46连接到系统总线23。本领域的普通技术人员将领会,所述网络连接是使用通信模块建立一个计算机与另一个计算机的连接的许多熟知方式的非限制性示例。
在各个方面中,本文中所描述的系统和方法可以以硬件、软件、固件或它们的任何组合来实施。如果以软件来实施,则上述方法可以作为一个或多个指令或代码而被存储在非暂时性计算机可读介质上。计算机可读介质包括数据存储器。以示例性而非限制性的方式,这种计算机可读介质可以包括ram、rom、eeprom、cd-rom、闪存或其它类型的电存储介质、磁存储介质或光存储介质、或可用来携带或存储所期望的指令或数据结构形式的程序代码并可以被通用计算机的处理器访问的任何其它介质。
在各个方面中,本发明中所描述的系统和方法可以按照模块来处理。本文中所使用的术语“模块”指的是例如现实世界的设备、部件、或使用硬件(例如通过专用集成电路(applicationspecificintegratedcircuit,asic)或现场可编程门阵列(field-programmablegatearray,fpga))实现的部件的布置,或者指的是硬件和软件的组合,例如通过微处理器系统和实现模块功能的指令组(该指令组在被执行时将微处理器系统转换成专用设备)来实现这样的组合。一个模块还可以被实施为两个模块的组合,其中单独地通过硬件促进某些功能,并且通过硬件和软件的组合促进其它功能。在某些实现方式中,模块的至少一部分(以及在一些情况下,模块的全部)可以被执行在通用计算机(例如上文在图5中更详细描述的通用计算机)的处理器上。因此,每个模块可以以各种适合的配置来实现,而不应受限于本文中所列举的任何特定的实现方式。
为了清楚起见,本文中没有公开各个方面的所有例程特征。应当领会的是,在本发明的任何实际的实现方式的开发中,必须做出许多特定实现方式的决定,以便实现开发者的特定目标,并且这些特定目标将对于不同的实现方式和不同的开发者变化。应当理解的是,这种开发努力会是复杂的且费时的,但对于了解本发明的优点的本领域的普通技术人员来说仍然是工程的例行任务。
此外,应当理解的是,本文中所使用的措辞或术语出于描述而非限制的目的,从而本说明书的术语或措辞应当由本领域技术人员根据本文中所提出的教导和指导结合相关领域技术人员的知识来解释。此外,不旨在将本说明书或权利要求中的任何术语归于不常见的或特定的含义,除非明确如此阐述。
本文中所公开的各个方面包括本文中以说明性方式所引用的已知模块的现在和未来已知的等同物。此外,尽管已经示出并描述了各个方面和应用,但是对于了解本发明的优点的本领域技术人员将显而易见的是,在不脱离本文中所公开的发明构思的前提下,相比于上文所提及的内容而言的更多修改是可行的。