使用解释器虚拟机的行为恶意软件检测的制作方法

文档序号:13689471阅读:201来源:国知局
使用解释器虚拟机的行为恶意软件检测的制作方法



背景技术:

本发明涉及用于保护计算机系统免受恶意软件侵害的系统及方法。

恶意软件(也被称为恶意软件)影响世界范围内的大量计算机系统。恶意软件以其例如计算机病毒、蠕虫、木马、未经请求的广告软件、勒索软件及间谍软件等许多形式向数百万计算机用户造成严重的风险,使其容易丢失数据及敏感信息、身份盗用以及生产力损失等等。恶意软件可能会进一步显示某些用户认为是淫秽、过度暴力、骚扰或其它令人反感的材料。

安全软件可用于检测感染用户的计算机系统的恶意软件,并且另外用于移除或以其它方式使此恶意软件失能。所属领域已知有若干恶意软件检测技术。一些依赖于将恶意软件代理的代码片段与恶意软件指示性签名的库相匹配。其它常规方法检测恶意软件代理的一组恶意软件指示性的行为。

恶意软件迅速发展,以便于保持领先检测算法。为解决此类快速改变的威胁,安全软件的提供者通常例如通过重新训练分类器以检测新的恶意软件版本来以几分钟到几小时的规模调整检测方法及/或参数。通常,此重新训练在计算上是昂贵的。此外,引入新的行为检测算法或甚至改变现有算法通常需要大量的测试以及对相应安全软件的源代码进行重新编译。只有这样才能将新软件版本递送给客户端,例如作为软件更新。相比之下,在基于签名的检测系统中,可容易地将新恶意软件签名添加到现有签名组。

因此,人们对开发能够迅速更新算法及/或参数的反恶意软件解决方案以跟上恶意软件的不断改变的性质有极大的兴趣。



技术实现要素:

根据一个方面,一种客户端系统包括至少一个硬件处理器,其经配置以形成例程调度器、字节代码解译虚拟机及行为评估引擎。所述例程调度器经配置以响应于检测到触发事件的发生而从多个反恶意软件字节代码例程选择反恶意软件字节代码例程用于执行,根据所述触发事件选择所述反恶意软件字节代码例程。所述触发事件的所述发生是由在所述客户端系统内执行的受监测过程引起。所述字节代码解译虚拟机经配置以执行所述反恶意软件字节代码例程以确定所述触发事件的所述发生是否指示恶意软件,其中执行所述反恶意软件字节代码例程包括:将所述反恶意软件字节代码例程的一组字节代码指令解译成本机处理器指令序列,以及执行所述本机处理器指令序列。所述行为评估引擎经配置以根据所述字节代码解译虚拟机执行所述反恶意软件字节代码例程的结果来确定所述客户端系统是否包括恶意软件。

根据另一方面,一种计算机实施的方法包括采用客户端系统的至少一个硬件处理器,响应于检测到触发事件的发生,根据所述触发事件从多个字节代码例程选择反恶意软件字节代码例程,所述反恶意软件字节代码例程经配置以确定所述触发事件的所述发生是否指示恶意软件。所述触发事件是由在所述客户端系统内执行的受监测过程引起。所述方法进一步包括采用所述客户端系统的至少一个硬件处理器,响应于选择所述反恶意软件字节代码例程,将所述反恶意软件字节代码例程的一组字节代码指令解译成本机处理器指令序列,并执行所述本机处理器指令序列。所述方法进一步包括采用所述客户端系统的至少一个硬件处理器根据执行所述本机处理器指令序列的结果来确定所述客户端系统是否包括恶意软件。

根据另一方面,一种非暂时性计算机可读媒体存储计算机程序,所述计算机程序在由客户端系统的至少一个硬件处理器执行时致使所述客户端系统形成例程调度器、字节代码解译虚拟机及行为评估引擎。所述例程调度器经配置以响应于检测到触发事件的发生而根据所述触发事件从多个反恶意软件字节代码例程选择反恶意软件字节代码例程用于执行,所述反恶意软件字节代码例程经配置以确定所述触发事件的所述发生是否指示恶意软件。所述触发事件是由在所述客户端系统内执行的受监测过程引起。所述字节代码解译虚拟机经配置以执行所述反恶意软件字节代码例程,其中执行所述反恶意软件字节代码例程包括将所述反恶意软件字节代码例程的一组字节代码指令解译成本机处理器指令序列,以及执行所述本机处理器指令序列。所述行为评估引擎经配置以根据所述字节代码解译虚拟机执行所述反恶意软件字节代码例程的结果来确定所述客户端系统是否包括恶意软件。

根据另一方面,一种非暂时性计算机可读媒体存储反恶意软件字节代码例程,所述反恶意软件字节代码例程可由在包括至少一个硬件处理器的客户端系统上形成的字节代码解译虚拟机执行,其中执行所述反恶意软件字节代码例程致使所述至少一个硬件处理器确定所述客户端系统内的触发事件的发生是否指示恶意软件。执行所述反恶意软件字节代码例程包括将所述反恶意软件字节代码例程的一组字节代码指令解译成本机处理器指令序列,以及执行所述本机处理器指令序列。所述客户端系统进一步包括例程调度器及行为评估引擎。所述例程调度器经配置以响应于检测到所述触发事件的所述发生,根据所述触发事件从所述多个字节代码例程选择所述反恶意软件字节代码例程。所述行为评估引擎经配置以根据所述字节代码解译虚拟机执行所述反恶意软件字节代码例程的结果来确定所述客户端系统是否包括恶意软件。

附图说明

通过阅读以下详细描述并参考附图,将更好地理解本发明的前述方面及优点,其中:

图1展示根据本发明的一些实施例的防范计算机安全威胁(例如,恶意软件)的示范性客户端系统。

图2展示根据本发明的一些实施例的客户端计算机系统的示范性硬件配置。

图3说明根据本发明的一些实施例的安全应用程序的示范性结构。

图4说明环境中的一组过程的示范性执行流程。实线箭头指示没有事件拦截器时的流程。虚线箭头指示对执行流程的修改,所述修改由根据本发明的一些实施例操作的多个事件拦截器引入。

图5展示根据本发明的一些实施例的由安全应用程序执行以配置恶意软件检测的示范性步骤序列。

图6展示根据本发明的一些实施例的示范性字节代码例程。

图7说明根据本发明的一些实施例的由例程调度器(图3)执行的示范性步骤序列。

图8展示根据本发明的一些实施例的由例程调度器执行以处理事件队列的示范性步骤序列。

图9展示根据本发明的一些实施例的由字节代码解译vm(图3)执行的示范性步骤序列。

图10说明根据本发明的一些实施例的示范性软件更新过程。

具体实施方式

在下文描述中,应理解,结构之间的所有陈述的连接可为直接操作连接或通过中间结构的间接操作连接。一组元件包含一或多个元件。元件的任何陈述被理解为指至少一个元件。多个元件包含至少两个元件。除非另外要求,否则任何所描述的方法步骤不一定必须以特定说明顺序执行。从第二元件导出的第一元件(例如,数据)涵盖等于第二元件的第一元件,以及通过处理第二元件及任选其它数据产生的第一元件。根据参数做出确定或决定涵盖根据参数并且任选地根据其它数据做出确定或决定。除非另有规定,否则一些数量/数据的指示符可能是数量/数据本身,或是与数量/数据本身不同的指示符。计算机安全涵盖保护用户及装备免遭意外或未经授权的数据及/或硬件访问,防止意外或未经授权的数据及/或硬件的修改以及数据及/或硬件的破坏。计算机程序是实行任务的处理器指令序列。在本发明的一些实施例中描述的计算机程序可为其它计算机程序的独立软件实体或子实体(例如,子例程,库)。除非另外规定,否则过程是计算机程序的例子,例如应用程序或操作系统的一部分,并且特征在于具有为其指派的至少一个执行线程及虚拟存储器空间,其中相应虚拟存储器空间的内容包含可执行代码。术语平台用于表示特定物理或虚拟化硬件配置(例如,包括特定模型或处理器系列)。虚拟平台包括虚拟化硬件,例如虚拟化处理器。本文的术语字节代码是指计算机程序的多平台编码,意思是字节代码指令可以相同的形式被递送到不同平台。与字节代码指令相反,本机处理器指令包括特定于执行相应本机处理器指令的物理或虚拟平台的指令集架构(isa)的指令。计算机可读媒体涵盖例如磁性、光学及半导体存储媒体的非暂时性媒体(例如,硬盘驱动器、光盘、闪存、dram),以及例如导电缆线及光纤链路的通信链路。根据一些实施例,本发明尤其提供包括经编程以执行本文描述的方法的硬件(例如,一或多个微处理器)的计算机系统,以及编码用于执行本文描述的方法的指令的计算机可读媒体。

以下描述以实例的方式且不一定以限制的方式说明本发明的实施例。

图1展示根据本发明的一些实施例的在受保护而免受计算机安全威胁的客户端系统10上执行的一组示范性软件对象。客户端系统10可表示计算机系统(例如,最终用户计算机、公司服务器等等)。其它示范性客户端系统10包含移动计算装置(例如,膝上型计算机、平板计算机)、电信装置(例如,智能手机)、数字娱乐设备(tv、游戏控制台等等)、可佩戴式计算装置(例如智能手表)、或具有处理器及存储器并且需要计算机安全保护的任何其它电子装置。

在一些实施例中,操作系统(os)30包括提供到客户端系统10的硬件的接口的软件,并且充当用于一组软件应用程序32a到c及40的主机。os30可包括例如等的任何广泛可用的操作系统。应用程序32a到c通常表示用户软件,其可包含例如文字处理、图像处理、数据库、浏览器及电子通信应用程序等等。在一些实施例中,安全应用程序40与应用程序32a到c同时执行并且经配置以确定在客户端系统10上执行的任何软件(包含应用程序32a到c及os30)是否构成计算机安全威胁。例如,应用程序40可检测在客户端系统10上操作的恶意软件(例如,病毒、间谍软件、广告软件等等)。应用程序40可进一步经配置为擦除或以其它方式使此类恶意的软件失能,并且提醒客户端系统10的用户或系统管理员。安全应用程序40可为独立的程序,或可形成尤其包括反恶意软件、反垃圾邮件及防欺诈组件的软件套件的部分。下文详细描述安全应用程序40的操作。

图2说明客户端系统10的示范性硬件配置,其中客户端系统10是计算机系统。技术人员将了解,例如平板计算机、移动电话、智能手表等等的其它装置的硬件配置可不同于所说明的配置,但本描述可适用于此类装置。客户端系统10包括一组物理装置,其包含硬件处理器12、存储器单元14、一组输入装置16、一组输出装置18、一组存储装置20以及一组网络适配器22,全部通过控制器集线器24互连。

在一些实施例中,处理器12包括经配置以利用一组信号及/或数据执行计算及/或逻辑操作的物理装置(例如,形成在半导体衬底上的微处理器、多核集成电路)。在一些实施例中,此类逻辑操作以处理器指令序列(例如,机器代码或其它类型的软件)的形式从存储器单元14传输到处理器12。存储器单元14可包括存储由处理器12在实行指令的进程中访问或产生的数据/信号的易失性计算机可读媒体(例如,ram)。输入装置16可包含计算机键盘、鼠标及麦克风等等,其包含允许用户将数据及/或指令引入客户端系统10的相应硬件接口及/或适配器。输出装置18可包含显示装置,例如监测器及扬声器等等以及例如图形卡的硬件接口/适配器,从而允许客户端系统10将数据传达给用户。在一些实施例中,输入装置16及输出装置18可共享共同硬件,如在触摸屏装置的情况下。存储装置20包含启用处理器指令及/或数据的非易失性存储、读取及写入的计算机可读媒体。示范性存储装置20包含磁盘及光盘以及闪存装置,以及例如cd及/或dvd盘及驱动器的可装卸式媒体。所述组网络适配器22使得客户端系统10能够连接到网络(例如,局域网、无线网络等等)及/或其它装置/计算机系统。控制器集线器24通常表示能够促进在处理器12与装置14、16、18、20及22之间进行通信的多个系统、外围装置及/或芯片组总线,及/或所有其它电路。例如,控制器集线器22可包括将处理器12连接到存储器14的北桥,及/或将处理器12连接到装置16、18、20及22的南桥。

在一些实施例中,客户端系统10经配置以操作虚拟平台(例如,虚拟机)。可使用硬件虚拟化技术(例如,管理程序)来设置此类配置。虚拟平台可包括虚拟化硬件组件,每一此虚拟化组件至少部分模拟客户端系统10的对应硬件组件的功能性。例如,虚拟平台可包含虚拟化处理器、虚拟化存储器单元及虚拟输入/输出装置。操作系统30以及应用程序32a到c及安全应用程序40可在相应虚拟平台上执行,与虚拟化硬件交互。当软件采用相应平台的虚拟化处理器执行时,软件称为在虚拟平台上执行。

图3展示根据本发明的一些实施例的安全应用程序40的示范性组件。安全应用程序40包括例程调度器32、行为评估引擎38及连接到调度器32及评估引擎38的字节代码解译虚拟机(btvm)34。在一些实施例中,应用程序40进一步包括连接到btvm34及/或评估引擎38的辅助器模块36。例程调度器32可进一步管理事件队列31,如下文进一步详细描述。

在一些实施例中,例程调度器32从安装于在客户端系统10上执行的各种软件对象内的一组事件拦截器28a到c接收一组事件通知42。事件通知42可因此告知调度器32关于在软件执行期间的各种事件的发生。示范性通知事件尤其可包含创建过程或线程、代码注入、系统调用、创建新磁盘文件的尝试、写入现有磁盘文件的尝试、尝试编辑系统寄存器键,以及尝试写入特定存储器部分。一些通知的事件可为恶意软件指示性的。其它事件本身可能并不指示安全威胁,但可能表示与其它事件一起发生时的潜在威胁。响应于接收到通知42,调度器32的一些实施例可根据通知42的细节来选择字节代码例程,并且将相应字节代码例程连同一组通知事件的事件参数47一起发送到字节代码解译vm34用于执行。相应字节代码例程的执行可将评估指示符50供应给行为评估引擎38。引擎38可维持多个此类评估指示符(例如分数),并且在至少一个此指示符指示计算机安全威胁时可提出警报。下文详细描述组件32、34及38的操作。

为说明事件拦截器28a到c的操作,图4展示根据本发明的一些实施例的一组软件实体60a到b的示范性执行流程。为简单起见,所选择的实体60a到b是在os的例子中执行的过程;举例来说,可为例如linux的其它操作系统呈现类似的图。实线箭头表示没有事件拦截器时的执行流程。虚线箭头表示由于存在根据本发明的一些实施例执行的事件拦截器28a到c而对流程的修改。

示范性过程60a加载多个动态链接库(dll)62a到c;在图4的实例中,dll62c由(可能是恶意的)过程60b注入过程60a。当过程60a(或其加载的dll中的一者)执行调用某个系统功能性的指令(例如)以将某些内容写入磁盘文件或编辑注册表项时,相应指令调用用户模式api,例如kernel32.dll或ntdll.dll。在图4的实例中,相应用户模式api调用由用户级事件拦截器28a拦截。此类拦截器可通过例如dll注入或挂钩等方法来实现。挂钩是所属领域中用于拦截在软件组件之间传递的函数调用、消息或事件的方法的通用术语。一种示范性挂钩方法包括通过插入指令(在此情况下,事件拦截器28a)将执行重定向到第二函数来改变目标函数的入口点。在此挂钩之后,第二函数可替代目标函数执行或在执行目标函数之前执行。在图4的实例中,安全应用程序40可钩入kernel32.dll及/或ntdll.dll库的某些功能,以指示相应功能以将执行重定向到应用程序40的组件。因此,应用程序40可为每当过程60a正在尝试执行根据挂钩功能标识的特定动作时被通知。

在典型的执行流程中,由实体60a调用的用户模式api函数可从操作系统的内核请求服务。在一些实施例中,通过在x86平台上发出系统调用(例如syscall及sysenter)来实行此类操作。在图4的实例中,此类系统调用由事件拦截器28b拦截。在一些实施例中,此拦截包括例如通过改变存储在处理器12的模型特定寄存器(msr)中的值来修改系统调用处置器例程,其有效地将相应处置器例程的执行重定向到拦截器28b,或直接到应用程序40的组件。此类技术在所属领域中被称为msr挂钩,并且可允许每当软件实体尝试执行某些系统调用时通知安全应用程序40。

在系统调用之后,处理器的控制通常被转交到os30的内核。在一些实施例中,内核级别事件拦截器28c经配置以拦截os内核的某些动作,并且因此确定评估过程正尝试执行某些操作,这可为恶意软件指示性的。为拦截此类动作,一些实施例可采用内置于os30中并由os30揭露的一组过滤机制。举例来说,在os中,fltregisterfilter可用于拦截如创建、打开、写入及删除文件的操作。在另一个实例中,事件拦截器28c可使用obregistercallback来拦截创建或复制对象处置操作,或pssetcreateprocessnotifyroutine拦截新过程的创建。在另一个实例中,可使用cmregistercallbackex拦截windows注册表操作,例如创建及设置注册表项/值。所属领域中已知用于例如的其它操作系统的类似事件过滤机制。响应于检测到特定事件/动作的发生,事件拦截器28可将通知42传输到安全应用程序40。

图5展示根据本发明的一些实施例的由安全应用程序40执行的用于建立对计算机安全威胁的检测的示范性步骤序列。例如,当安全应用程序40启动时,可执行所说明的步骤序列。在步骤102中,应用程序40例如通过挂钩os30的各种功能,修改调度表的条目等来安装事件拦截器28a到c。用于安装此类拦截器的各种方法在所属领域中是已知的(例如,修补、msr挂钩、代码注入等)。步骤104设置事件队列31,由例程调度器的一些实施例使用来存储关于通知事件的信息以及已发生此类事件的顺序。在一些实施例中,事件队列31被组织为先进先出(fifo)队列。示范性队列31可为简单链接、无锁、多生产者、多消费者队列。

步骤106到108的序列访问例程数据库26(参见例如图3),并将来自数据库26的一组字节代码例程加载到存储器的一部分中。数据库26可驻留在客户端系统10的存储装置20上或通信地耦合到客户端系统10的计算机可读媒体上。

在一些实施例中,存储在数据库26中的每一字节代码例程包括一组字节代码指令,其在由btvm34执行时使btvm34实行与计算机安全相关的特定任务。一个示范性字节代码例程应用一组启发式测试来确定特定软件对象(或对象群组)是否是恶意的。字节代码例程的另一实例检查在客户端系统10上特定事件序列(行为签名)的发生。不是序列的所有事件都需要由相同实体引起。然而,此序列事件的发生可为恶意软件指示性的。在一个此实例中,恶意活动被划分在实体群组中,所述群组的每一成员实行一小部分恶意活动。经配置以关联对应于此类分布式活动的事件的字节代码例程因此可检测整个群组的恶意实体。

其它示范性字节代码例程执行簿记及/或统计任务(例如,计数事件、相关事件参数)。其它字节代码例程可改变软件及/或客户端系统10的用户与os30及/或硬件装置交互的方式(例如,例程可防止软件对象写入到磁盘或访问网络适配器22)。每一字节代码例程可体现相异检测方法及/或启发式。在一些实施例中,每一字节代码例程可经配置以检测恶意代理的特定类别、族群、类型或变体的存在。若干相异例程可协作检测恶意代理的单个类别、族群、类型或变体。在一些实施例中,单个例程可参与检测恶意软件的若干类别、类型、族群或变体。

图6展示根据本发明的一些实施例的示范性字节代码例程70。例程70包括触发指示符72及字节代码区段74。在一些实施例中,触发指示符72编码一或多个条件用于执行相应字节代码例程。可由例程调度器32及/或btvm34评估相应条件,以便确定是否应响应于检测到特定类型的事件的发生而执行相应字节代码例程。示范性条件需要确定特定触发表达式是评估为真(true)还是假(false),并且当表达式为true时确定满足条件。在一些实施例中,相应触发表达式包括事件类型的指示符(例如,过程创建、特定的系统调用等等)。触发表达式可进一步包括事件参数,例如路径、文件名,过程id等等。在一些实施例中,触发表达式可包括由btvm34及/或例程调度器32使用的变量(参见下文的实例)。

触发指示符72可进一步包括指示是否应该以同步或异步方式执行相应例程/字节代码段的旗标。本文使用术语同步来表示执行字节代码例程的方式,其中执行产生触发相应例程的执行的事件的过程(为简单起见,在本文被视为触发过程)在相应例程被执行时暂停。一些实施例使用触发过程的线程执行上下文来执行相应字节代码例程,这隐含地暂停触发过程(或者至少是相应过程的线程)的执行达执行例程的持续时间。触发过程执行的暂停及/或恢复可由相应事件的拦截器来实现。例如,拦截器28a到c可劫持触发过程的线程,及/或仅仅响应于来自例程调度器32的信号而恢复触发过程的执行。与同步执行相反,异步执行是指执行其中触发过程被允许继续执行的字节代码例程的方式,而触发通知的事件被插入到事件队列中用于稍后处理。具有与每一例程或字节代码区段相关联的同步旗标可帮助例程调度器32确定如何处置事件通知(下文给出进一步细节)。

在一些实施例中,字节代码区段74包括连续的字节代码指令74a到c,其指示btvm34执行与例程70相关联的计算机安全任务。在一些实施例中,每一字节代码指令是btvm34的虚拟处理器的本机指令。在示范性实施例中,btvm34是虚拟机,且字节代码指令74a到c是语言的指令。为使字节代码指令由硬件处理器12执行,相应字节代码指令首先被解译(解释或编译)成本机处理器指令序列,例如,解译成处理器12的指令集架构(isa)的指令。此类解译至少部分由btvm34执行。当安全应用程序40在虚拟平台上执行时,btvm34可将每一字节代码指令解译成对于相应虚拟平台的虚拟处理器来说是本机的处理器指令序列。

示范性的字节代码指令集可尤其包括用于设置值、比较值、执行跳转的字节代码指令、循环指令及用于调用外部功能(例如图3中的辅助器模块36的功能)的指令。在一些实施例中,每一字节代码指令包含指示操作的操作代码字段76及指示至少一个操作数的操作数字段78。

一些字节代码例程可具有多个区段,其中每一区段可具有相异触发指示符。在此类配置中,例程的每一区段可由相异条件触发。在一个此实例中,字节代码例程70可针对检测勒索软件,即加密用户的文件并要求用户在解密相应文件之前支付赎金的恶意软件。勒索软件的实例包括cryptowall、cryptolocker及ctb-locker恶意软件等等。此恶意软件通常会调用加密api、枚举用户的文件、并显示赎金消息。检测此恶意软件的示范性字节代码例程可包含四个区段:

区段1:trigger:eventtype=calltoacryptographicfunction

output:setstaticvariablecryptoapicall=true

区段2:trigger:[eventtype=enumeratefilesusingfindfirstfileapiandcryptoapicall=true]

do:checkfileextensionofenumeratedfiles

output:setstaticvariableransomdocsearch=trueifenumeratedfileshaveextensionspdf,docx,jpg,...

区段3:trigger:[eventtype=attempttowritetoadiskfileandransomdocsearch=true]

do:determinewhetherfileisamongenumeratedfiles

output:setransomactivity=trueandincreaseevaluationscoreby30points

区段4:trigger:[eventtype=changeofscreenbackgroundandransomactivity=true]

output:increaseevaluationscoreby20points

在上文实例中,区段2仅在区段1已至少执行一次时执行,区段3将仅在区段2已执行时执行,等等。

在一些实施例中,每一字节代码例程进一步包括初始化区段、清除区段及错误区段。初始化区段可包括变量初始化,并且在相应字节代码例程被加载到存储器中时可执行一次(例如,在图5中的步骤108)。清除区段可在相应例程终止时执行。错误区段可包括在相应字节代码例程的任何其它区段的执行期间发生错误的情况下执行的指令。

在一些实施例中,在步骤110(图5)中,安全应用程序40可解析所加载的字节代码例程并创建指示由相应事件类型触发的事件类型与字节代码例程之间的关联的关联指示符(例如,表或散列索引)。此关联使得例程调度器32能够响应于检测到某些事件的发生而选择例程用于执行。

图7展示根据本发明的一些实施例由例程调度器32执行的示范性步骤序列。步骤序列112到114侦听来自拦截器28a到c的事件通知。响应于接收到事件通知42,步骤116确定相应通知事件的一组事件参数47。此类参数可为事件特定的。一些示范性事件参数尤其包含执行通知动作的过程或线程(例如,过程id)的标识符、文件名、路径、存储器地址以及处理器指令的操作数。事件参数可由拦截器28a到c确定并且包含在事件通知42中,或可由例程调度器32响应于接收到通知42而被确定。在其中通知事件是尝试创建新的磁盘文件的一个实例中,事件参数可包含正在创建的文件的名称。相应文件名可由事件拦截器确定并作为通知42的一部分传输给例程调度器32。在另一实例中,执行特定动作的过程的标识可由例程调度器32直接确定,例如通过解析由os30使用来管理当前执行的过程的数据结构。在os中,每一过程被表示为执行过程块(eprocess),其尤其包括到相应过程的线程中的每一者的句柄,以及允许os30从多个执行过程标识相应过程的唯一过程id。类似过程/线程表示可用于其它os,例如linux。

某些事件的发生可能需要同步执行相关联的字节代码例程。此类事件的实例尤其包含对相应客户端系统具有实质及/或不可逆的后果的事件,例如终止过程、删除文件及删除注册表项。为管理同步执行,例程调度器32的一些实施例可维护<事件、例程>元组的列表,其中每一元组指示相应例程应响应于相应事件的发生而被同步执行。此类元组可为静态的,例如,每次相应触发发生时,必须以同步方式执行一些例程(或者例程的区段)。静态元组可例如根据与相应例程/区段相关联的同步旗标的值来标识(参见上文)。其它<事件、例程>元组可为情境式的,即可能仅在某些情况下才有效。例如响应于其它事件的发生等,此类元组可被动态地添加及/或从列表移除。在一些实施例中,为同步处理而注册的<事件、例程>元组的列表可根据集由相应客户端系统的用户(例如,管理员)指示的一组选项。一般来说,字节代码例程的同步处理/执行可提供更高的安全性,但可通过减慢一些任务而对用户体验产生负面影响。不同用户可能偏好不同的安全设置。在一些实施例中,每一设置(例如,期望的安全级别)可对应于<事件、例程>列表的不同组成。

在步骤120中,例程调度器32确定由当前事件通知指示的触发事件的发生是否保证同步处理,例如通过确定是否存在包括相应事件的至少一个<事件、例程>元组。步骤120中的确定可根据相应事件的类型、根据通知42的同步旗标或根据字节代码例程的触发指示符进一步进行。

在步骤122中,当相应事件的发生不需要同步处理时,例程调度器32将相应事件插入到事件队列31中。进一步步骤124向拦截器28a到c发信号以恢复引起相应事件通知的过程/线程的执行。

在步骤126中,在当前通知事件的发生需要同步处理时,例程调度器32根据相应事件来选择字节代码例程。步骤126可包含标识与当前事件的类型相关联的字节代码例程的子组,并评估每一此例程的触发条件。步骤130包括启动用相应字节代码例程例示的btvm34的例子。一些实施例使用触发处理的执行线程来执行btvm34的相应例子。当步骤126标识由当前事件通知触发的一个以上字节代码例程时,可针对每一此例程重新执行步骤128到130的序列。

在一些实施例中,在步骤132中,例程调度器32等待来自行为评估引擎38及/或btvm34的指示对引起通知42的过程的安全性评估的结果的响应。例如,评估可指示相应过程是否是恶意的。在替代实施例中,在步骤132中,调度器32可等待,直到btvm34完成执行当前字节代码例程。当相应例程已完成执行及/或安全评估完成时,调度器32可向事件拦截器28a到c发信号以恢复执行引起事件通知42的过程。

图8说明根据本发明的一些实施例的由例程调度器32执行以处理事件队列31的示范性步骤序列。序列步骤142到144等待直到队列31含有至少一个项目。步骤146从队列移除事件。当队列31是fifo类型时,事件将按照其插入的顺序被删除。在步骤148中,例程调度器32根据事件的类型及/或参数评估触发条件,以标识由相应事件触发的字节代码例程的子组。在步骤序列150到152到154中,调度器32选择每一此例程并将其发送到btvm34用于执行。

图9展示在执行字节代码例程时由字节代码解译虚拟机34执行的示范性步骤序列。在一些实施例中,btvm34包括计算机系统的软件仿真,其包括虚拟处理器、虚拟存储器及一组虚拟寄存器。btvm34的虚拟处理器将字节代码指令视为其本机指令集。然而,因为字节代码指令不是安全应用程序40在其上执行的平台的本机指令,所以执行字节代码指令包含将每一字节代码指令解译成对于相应平台的处理器来说是本机的处理器指令序列。在一些实施例中,btvm34包括代码解释器,其经配置以逐个解释并执行字节代码指令。在替代实施例中,btvm34可包含经配置以将字节代码例程的所有指令一起编译成本机代码例程的即时(jit)编译器。经编译的本机代码例程接着作为一个整体执行。在一些实施例中,btvm34包括在处理器12的本机指令集中编码的功能库(例如,类),其中每一类型的字节代码指令对应于所述库的相异功能。在此类情况下,解释字节代码指令可包括根据字节代码指令标识适当的功能,并且执行相应功能。示范性字节代码解译虚拟机尤其包含虚拟机。

在一些实施例中,btvm34的虚拟存储器空间被划分成若干区,每一区存储相异类型的变量。一些变量可为local类型的;此类变量的值对于相应例程或字节代码区段的当前例子可能是唯一的。其它变量可为static类型(专用于特定例程类型,在所述特定类型的例程的所有代码区段中共享,在相同例程/字节代码区段的多个例子中保持其值)。其它变量可为global类型(在所有字节代码例程及例子中共享)。btvm34的一些实施例也可使用process类型的变量来操作—这些变量可唯一地附接到例程-处理元组,在所述特定类型的例程的所有代码区段中共享,在相同例程/字节代码区段的多个例子中保持其值,但每一过程都不同。当btvm34的虚拟存储器经配置以存储process类型的变量时,对于由事件拦截器28a到c监测的每一个过程,此类变量可被初始化一次,并且在相应过程终止时被擦除。

在一些实施例中,安全应用程序40维护供btvm34使用的线程池。在一个实例中,线程池包括与处理器12的逻辑cpu的计数相同数目的线程。线程池的所有线程可被设置为相同的优先级。当调度字节代码例程时,调度器32可等待下一个可用线程。btvm34的相异例子因此可在任意的存储器背景中独立并且同时运行。在一些实施例中,btvm34的实例可乱序执行,即,不一定按照对其进行触发的事件被插入事件队列31中的相同顺序来执行。

响应于从例程调度器32接收到例程指示符46(例如,字节代码例程的存储器地址),btvm34可访问字节代码区段74。不失一般性,接下来所说明的步骤描述其中btvm34解释并依次执行每一字节代码指令的实施例。技术人员将了解,本描述可适用于描述使用即时(jit)编译的实施例的操作。在步骤166到168的序列中,btvm34可解释字节代码指令并执行由相应指令指示的一组操作。

一些字节代码指令要求复杂的功能性,例如为由os30的功能提供的功能性。为将btvm34的复杂性保持最小并减少btvm34的攻击表面,一些实施例经由体现为辅助器模块36(图3)的应用程序接口(api)向btvm34提供此功能性。模块36可包括一组辅助器函数,其经配置以辅助btvm34,执行例如验证文件的存在、尝试将存储器区段的内容与恶意软件指示性签名匹配、枚举文件以及设置评估分数的任务等等。在步骤170中,在当前字节代码指令调用辅助器函数时,字节代码解译vm34向辅助器模块36发出api调用48。辅助器模块36可进一步与os30介接。

在一些实施例中,辅助器模块36可具有响应于来自字节代码解译vm34的api调用(参见例如图3)将新事件添加到事件队列31的功能性。在一个此实例中,字节代码例程的第一部分被同步处理。btvm34接着可通过调用辅助器模块36以将新事件添加到队列31而致使相应例程的第二部分稍后(以异步方式)执行,新事件被选择以触发执行例程的第二部分。在另一实例中,所描述的机制可用于执行字节代码例程的级联,其中每一例程通过指示辅助器模块36将新事件插入到事件队列31中来确定级联的下一成员的执行。

一些字节代码例程将评估指示符50输出到行为评估引擎38,例如经由api调用到引擎38或到辅助器模块36。评估指示符50可包含指示特定受监测对象(例如,过程)是恶意的可能性的评估分数。另一示范性评估指示符50包括将被添加到由评估引擎38针对相应对象维护的评估分数的分数增量。另一示范性指示符50包含判决结果(例如,干净/恶意)。在一些实施例中,步骤174到176的序列确定是否满足评估条件(例如,是否已计算分数增量),并且在满足评估条件的情况下,将指示符50传输到评估引擎38。

步骤178可验证是否满足终止条件,并且在不满足终止条件的情况下,btvm34可前进到当前例程的下一个字节代码指令(参见上文步骤166)。在一些实施例中,步骤178可包括确定是否已执行当前例程/字节代码区段的最后字节代码指令。一些字节代码例程可经配置以执行最长时间;在此类情况下,步骤178可确定自启动当前字节代码例程/区段来执行以来最大允许时间段是否已过去。无论何时在执行相应例程/字节代码区段期间发生错误,都可满足另一示范性终止条件。当满足终止条件时,步骤180可终止btvm34的当前例子,并将相应线程释放到线程池中。

在一些实施例中,行为评估引擎38维护受监测软件实体(例如在客户端系统10上执行的过程及线程)的集中式知识库。对于每一此实体,引擎38可存储父子关系指示符(例如,以指示主从关系、注入代码的过程与此代码注入的接收者之间的关系等等)。评估引擎38的一些实施例进一步存储与每一受监测实体相关联的一组评估分数。可根据相异准则来确定每一此分数(例如,每一分数由特定的字节代码例程更新)。在一些实施例中,评分引擎38经配置以根据此类分数确定每一受监测实体是否构成计算机安全威胁。当标识此威胁时,引擎38可针对相应恶意实体采取反恶意软件动作,例如停止相应软件对象的执行或以其它方式使相应软件对象失能。引擎38可进一步提醒客户端系统10及/或系统管理员的用户。

上述示范性系统及方法允许保护客户端系统免受例如恶意软件及间谍软件的计算机安全威胁。对于多个可执行实体(例如当前在客户端系统上执行的过程及线程)中的每一者,安全应用程序维护一组评估分数,这可指示相应实体构成威胁的可能性。在一些实施例中,响应于执行多个检测例程而产生此类评分,每一例程经配置以根据特定于每一检测例程的准则来评估受监测实体。检测例程可实施各种计算机安全启发式;单独例程可能对应于相异启发式。例如,一个例程可确定受监测实体是否执行恶意软件指示性的动作序列,在所属领域中被称为行为签名。检测例程的执行可响应于检测到特定触发事件的发生而被选择性地触发。

在本发明的一些实施例中,以字节代码形式表示检测例程,即,使用不容易由相应客户端系统的处理器执行的自定义指令集。取而代之的是,在执行相应指令之前,在字节代码解译虚拟机内执行检测例程,所述字节代码解译虚拟机使用解释或即时编译技术来将每一字节代码例程解译成对于相应平台的处理器来说是本机的一组处理器指令。

在常规计算机安全系统中,检测例程通常被预编译成目标平台的本机代码,并与安全应用程序的其余组件打包在一起。尽管此类配置允许相应检测例程的经优化快速的执行,但其可能难于开发、保持最新并且部署到客户端计算机系统。举例来说,检测例程中的任何小的改变或引入新检测例程/启发式,都可能需要重新编译安全应用程序的大量代码,并且需要部署相对较大的软件更新(例如,若干兆字节)。此外,更新中的软件故障可潜在地降低整个安全应用程序的性能,因此在递送到客户端之前更新通常需要经过大量测试。

相反,字节代码检测例程的使用允许本发明的一些实施例大大缩短安全解决方案的上市时间,并且简化软件更新过程。由于字节代码检测例程被即时解释或编译,因此可将其开发并递送到与安全解决方案的主要组件分离的客户端。可完全独立于现有例程来开发及实施新检测启发式。如图10中所展示,软件更新可仅包括一组字节代码例程70,总计少至几百字节。为激活新检测能力,可将相应字节代码例程引入到例程数据库26中,并且随后向例程调度器32注册。此外,由于每一检测例程在字节代码解译虚拟机的例子内并且与安全应用程序的其它组件分离地执行,因此字节代码例程内存在的错误或软件故障被包含并且不太可能影响其它软件的操作。

本发明的一些实施例可使用广泛可用的字节代码解译虚拟机(例如虚拟机或虚拟机)来实现检测例程的解释及/或jit编译。然而,为最小化架构复杂性并减少字节代码解译虚拟机的攻击表面,一些实施例采用赋予最小功能性的定制解译虚拟机。当在检测例程内调用更复杂的功能性时,一些实施例通过单独辅助器api提供所需的功能性。

由于字节代码解译虚拟机的每一例子可在单独的、独立存储器背景内执行,因此本发明的一些实施例可提供与例如通过容器化提供的相同的安全优点。本发明的其它优点包含便携性。虽然所提出的安全解决方案的一些组件可能需要针对每一类型的客户端装置(例如,计算机系统、智能手机等等)单独编译,但字节代码例程在相同检测例程(包含更新)可递送到所有平台及客户端装置的意义上是平台独立的。

本发明的此类优点可能以存储器开销及处理速度为代价。虽然预编译的解决方案针对特定平台的最大性能而被优化,但检测例程的解释及/或jit编译可使得本发明的一些实施例比预编译的安全应用程序更慢。

所属领域的技术人员将清楚的是,在不脱离本发明的范围的情况下,上文实施例可以许多方式改变。因此,本发明的范围应由随附权利要求书及其合法等效物来确定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1