首页> 中国专利> 对软件程序集的本机图像进行防病毒检查的系统和方法

对软件程序集的本机图像进行防病毒检查的系统和方法

摘要

公开了一种用于对软件程序集的本机图像进行防病毒检测的系统和方法。实施例包括用于检测机器代码的恶意本机图像的方法,所述方法包括:接收所述机器代码的本机图像;识别父程序集,所述父程序集用于创建所述本机图像;确定所述父程序集是否对应所述机器代码的本机图像;和当所述父程序集不对应所述机器代码的本机图像时,确定本机图像是恶意的。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-07

    授权

    授权

  • 2016-07-20

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20160129

    实质审查的生效

  • 2016-06-22

    公开

    公开

说明书

技术领域

本公开大体涉及计算机科学领域,更具体地,涉及对软件程序集的本 机图像进行防病毒检查的系统和方法。

背景技术

目前,可安装在用户装置(例如,个人计算机、智能电话、平板电脑等) 上的软件应用显著地增长,且可由这些应用创建的文件的数目也指数地上升。 在应用的安装和运行时由软件应用创建的某些文件是唯一的,即,文件可作 为单一副本存在。很难在不执行其内容的详细分析的情况下分类此类文件。

通常,这些文件可为机器代码中的父程序集的图像(即,本机图像),这 是.NET技术的一部分。.NET应用可使用一定数目的程序集一起创建,其中 程序集为由公共语言运行("CLR")环境辅助的二进制文件。.NET程序集包括 以下元数据元素:

·可移植执行("PE")文件标头;

·CLR标头;

·公共中间语言("CIL")代码;

·在各种类型的程序集中使用的元数据(例如,类别、接口、结构、列 举(enumerations)、委托);

·程序集的清单;以及

·额外的内置资源。

大体上,PE标头识别程序集可在系列的操作系统中加载和执行。 PE标头还识别应用(例如,控制台应用、具有图形用户接口的应用、代码库 等)的类型。

CLR标头构成可支持所有.NET程序集以便它们可在CLR环境中维护的 数据。CLR标头包含诸如标记、CLR版本、入口点(例如,在特定情况下, 开始函数Main()的地址),这允许执行环境确定管理的文件的组成(即,包含管 理代码的文件)。

各个程序集均包含CIL代码,其为并非依赖处理器的中间代码。在执行 期间,CIL代码由JIT(准时,即,动态编译)以实时模式编译成对应于特定处 理器的要求的指令。

在任何给定程序集中,还存在完整描述存在于程序集内的类型(例如,类 别、接口、结构、计数、委托等)以及程序集参照的外部类型(即,其它程序 集中描述的类型)的格式的元数据。在可执行环境中,元数据用于确定二进制 文件中的类型的位置,以将类型置于存储器中,且简化类型的方法的远程调 用的进程。

程序集还可包含清单,其描述组成程序集的各个模块、程序集的版本以 及还有当前程序集参照的任何外部程序集。清单还包含指定程序集的版本和 身份的程序集的要求所需的所有元数据,以及确定程序集的范围和允许链接 至资源和类别所需的所有元数据。下表示出了包含在程序集的清单中的数据。 前四个元素(程序集名称、版本号、语言和区域参数,以及强名称数据)构成程 序集的身份。

任何.NET程序集都可包含任何给定数目的嵌入资源,如,应用图标、图 形文件、音频片段或字符串表。

程序集可由若干模块构成。模块为程序集的一部分,即,代码或资源的 逻辑收集。用于程序集中的实体的等级为:程序集>模块>类型(类别、接口、 结构、计数、委托(delegate))>方法。模块可为内部(即,程序集的文件内) 或外部的(即,分离文件)。模块没有入口点,其也不具有任何独立的版本号, 且因此其不可由CLR环境直接地载入。模块仅可由程序集的主模块载入,如, 包含程序集的清单的文件。模块的清单仅包含所有外部程序集的计数。各个 模块均具有模块版本标识符("MVID"),其为程序集的各个模块中写出的唯一 标识符,其在各次编译期间变化。

图1A示出了单文件程序集的示例性布局。如图所示,在单文件程序集 中,所有要求元素(例如,标头、CIL代码、类型的元数据、清单和资源)位于 单个文件*.exe或*.dll内。

图1B示出了多文件程序集的实例。多文件程序集由一组.NET模块构成, 其以单个逻辑单元的形式配置,且设有相同的版本号。通常,这些模块中的 一个称为主模块,且包含程序集的清单,且还可包含所有所需的CIL指令、 元数据、标头和附加资源。

主模块的清单描述主模块的操作依赖的所有其它相关模块。多文件程序 集中的次级模块可分配扩展名*.netmodule。次级*.netmodule模块也包含CIL 代码和类型的元数据,以及模块的水平的清单,其中列举了由给定模块所需 的外部程序集。

正如任何PE文件,程序集可利用数字签名(例如,X.509)来签名,其位 于PE文件或数字签名目录文件(.cat)的叠加部分(overlay)中。强名称签名 另外或单独使用,即,通过使用程序集的内容和RSA私钥生成的哈希值。哈 希值位于PE标头与元数据之间的程序集中。哈希值使得有可能检查程序集从 其编译时的时间起没有变化。对于单文件程序集,当编译文件时,在PE标头 之后没有字节。文件的哈希值然后使用私钥计算,且所得的哈希值输入这些 可用的字节中。

该技术对于多文件程序集是不同的。除程序集的主文件的哈希值之外, 还计算外部模块的哈希值,此后,数据输入主程序集中。模块没有其自身的 签名,且它们具有不同于主模块的MVID。以下项目输入程序集的清单中:

·PublicKey,即,强名称签名的公钥,以及

·PublicKeyToken,即,强名称签名的密钥的公开部分的哈希。

通常,程序集分成:私密和公开/共享。私密程序集应当总是位于与它们 用于其中的客户应用相同的目录(即,应用目录)中或其子目录中的一个中。

相比之下,公开程序集可同时用于同一装置上的若干应用中。公开程序 集并非位于与它们被认为应用其中的应用相同的目录内。相反,它们可安装 在全局程序集缓存(GAC)中。GAC可同时位于如下表所示的若干位置中:

安装在GAC中的程序集应当具有强名称。强名称是用于COM中的全局 唯一标识符(GUID)的当代.NET等同物。不同于128位数字的COM中的GUID 值,.NET的强名称部分地基于称为公开密钥和秘密(私密)密钥的两个相关加 密密钥。

强名称由一组相关数据构成,至少包括:

·程序集的名称(没有文件扩展名的程序集的名称)。

·程序集的版本号;

·公钥值;

·指定区域的值,其不是强制的,且可用于应用的定位;以及

·利用从程序集的内容和私钥的值获得的哈希值创建的数字签名。

为了创建程序集的强名称,例如,用户可获得公钥和私钥,公钥和私钥 的数据由提供为.NET框架SDK的一部分的实用程序sn.exe生成。实用程序 生成包含用于两个不同但数学上相关的密钥(公钥和私钥)的数据的文件。该文 件的位置然后向编译器指出,编译器写出程序集的清单中的公钥的全部值。

在特定情况中,编译器基于程序集的全部内容(例如,CIL代码、元数据 等)生成对应的哈希值。哈希值是对于固定输入数据在统计上唯一的数值。因 此,在.NET程序集的任何数据(甚至字符串字面值中的单个字符)的变化的情 况下,编译器将生成不同的哈希值。生成的哈希值然后与包含在文件内的私 钥数据组合,以获得插入CLR标头数据内的程序集中的数字签名。

图1C示出了用于生成强名称的示例性进程。通常,私钥数据未在清单中 指出,而是仅用于由数字签名(连同生成的哈希值)识别程序集的内容。在完成 创建和分配强名称的进程之后,程序集可安装在GAC中。

例如,至GAC中的程序集的路径可为:

C:WindowsassemblyGAC_32KasperskyLab2.0.0.0__b03f5f7f11d50a3a KasperskyLab.dll,其中:

C:Windowsassembly是至GAC的路径;

GAC_32是处理器的GAC结构;

KasperskyLab是程序集的名称;

2.0.0.0__b03f5f7f11d50a3a是程序集_公钥标记的版本;以及

KasperskyLab.dll是程序集名称的扩展名。

在一个特定情况中,程序集的代码的执行按以下发生。首先,分析PE标 头来确定应当开始哪个进程(32或64位)。接下来,载入的选择的文件版本 MSCorEE.dll(对于32位系统是C:WindowsSystem32MSCorEE.dll)。程序集 的源代码的实例按以下存在:

为了方法的执行(为了方便起见,代码以其原始形式存在,且并未编译成 CIL代码),如,方法System.Console。WriteLine("Kaspersky"),JIT编译器将 CIL代码转换成机器命令。

图2示出了执行程序集代码的示例性方法。首先,在执行函数Main()之 前,CLR环境找出所有公告的类型(级别)(例如,类型Console)。接下来,CLR 环境确定方法,将它们组合在统一"结构"内的记录中(一个方法,如类型 Console中分别限定那样)。该条目(entry)包含可找到方法的实施方式所处 的位置。在方法WriteLine的首次访问中,调用JIT编译器。JIT编译器知晓 调用的方法和限定该方法的类型。一旦调用,则JIT编译器搜索对应的程序 集的元数据来实施方法代码(即,实施方法WriteLine(stringstr)的代码)。JIT 编译器然后将CIL代码编译成机器代码,且将编译的代码保存在动态存储器 中。接下来,JIT编译器返回类型数据(控制台)的内部"结构",且以具有机器 代码的存储器区段的地址替换调用的方法的地址。方法Main()又访问方法 WriteLine(stringstr)。由于已经编译了代码,故访问没有JIT编译器调用。在 执行方法WriteLine(stringstr)之后,控制回到方法Main()。

从描述中得出的是,当JIT编译器将CIL代码转换成处理器指令时,该函 数仅在第一调用时工作"较慢"。在所有其它情况中,代码已经在存储器中, 且提供为针对给定处理器优化。然而,如果又一个程序在另一个过程中开始, 则将为了此同一方法又调用JIT编译器。

上文所述的本机图像解决了在第一调用时程序缓慢工作的问题。当加载 程序集时,将加载图像,机器代码将从其执行。使用该技术,有可能加速应 用的加载和运行,因为JIT编译器不需要编译任何东西,且/或还每次重新创 建数据结构。其所有都取自图像。图像可对于任何给定的.NET程序集创建, 而不管其是否安装在GAC中。对于编译,在一个实例中,人们使用由路 径%WINDIR%Microsoft.NETFramework<Framework_version> gen.exe定位 的实用程序ngen.exe。在ngen.exe启动时,使用了JIT编译器创建程序集的 CIL代码的机器代码,且结果保存至本机图像缓存("NIC")中的盘上。编译在 本地装置上完成,考虑了其软件和硬件配置,且因此,图像应用仅用于编译 其的环境。创建此图像的目的在于提高管理的应用的有效性,即,在JIT编 译的地方加载机器代码完成的程序集。

如果程序集的代码由许多应用使用,则图像的创建显著增大了启动和执 行应用的速度,因为图像可由许多应用同时使用,同时由JIT编译器即时生 成的代码仅由其为之编译的应用的副本使用。

至可编译图像的路径形成为以下,例如: C:WindowsassemblyNativeImages_v4.0.30319_32Kaspersky9c87f327866f53 aec68d4fee40cde33dKaspersky.ni.dll,其中:

C:WindowsassemblyNativeImages是至系统的图像缓存的路径;

v4.0.30319_32是<版本.NET框架>_<处理器架构(32or64)>;

Kaspersky是程序集的易记名称;

9c87f327866f53aec68d4fee40cde33d是应用的哈希值;以及

Kaspersky.ni.dll是<程序集的易记名称>.ni.<扩展名>。

在创建64位应用的程序集ngen.exe的机器代码的图像时,相关部分可保 存在注册表分支HKEY_LOCAL_MACHINE SOFTWAREMicrosoft.NETFrameworkv2.0.50727NGenServiceRoots中,对 于32位应用,可保存在HKEY_LOCAL_MACHINESOFTWARE Wow6432NodeMicrosoft.NETFrameworkv2.0.50727NGenServiceRoots中。

如果对于位于GAC中的程序集安装图像,则可调用分支:… RootsAccessibility,版本=2.0.0.0,Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a,processorArchitecture=msil。但如果程序集 并未安装在GAC中,则其可调用:…RootsC:/ProgramFiles(x86)/ATI Technologies/ATI.ACE/Core-Static/A4.Foundation.DLL。

在之前,开发者总是必须自己利用ngen.exe(或通过配置安装 程序)来开始程序集的图像的创建、更新和移除。在中,可为某些 程序集自动地创建图像。

在一个特定情况中,本机图像服务用于控制图像。这允许在装置静止不 动时开发者推迟安装、更新和移除机器代码(这些进程随后执行)的图像。 本机图像服务由安装应用或更新程序启动。这借助于实用程序ngen.exe完成。 该服务结合保存在注册表中的请求队列进行工作,各个请求具有其 自身的优先级。形成的优先级确定了将何时执行任务。

在另一个特定情况中,机器代码的图像不但根据开发者或管理员的主动 性创建,而且由.NET框架平台自动创建。.NET框架平台自动地创建图像, 跟踪JIT编译器的工作。大体上,在应用的操作期间创建图像花费很多时间, 且因此,该操作通常随后被执行,为此目的,CLR环境将任务置于队列中, 且在装置空闲期间执行任务。

CLR环境使用程序集结合模块(即,程序集结合器)来找出在执行对应的程 序集时加载的程序集。CLR可使用若干类型的结合模块。图像结合模块(即, 本机结合器)用于搜索图像。搜索所需的图像在两个阶段中执行,首先,给定 模块识别文件系统中的程序集和图像,且其次,给定模块检查图像与程序集 的对应关系。

图3示出了运行结合模块的方法。如图所示,在步骤310中,程序集结 合模块搜索程序集,搜索在GAC中执行,GAC预先假定了搜索的程序集被 签名且程序集的内容未被读取;且在应用目录中,其中打开程序集且读取元 数据。

接下来,在步骤320中,图像结合模块在对应于识别的程序集的NIC中 搜索图像。在识别图像的情况中,这在步骤330中被检查,且图像结合模块 在步骤340中从图像读取所需的数据和元数据,以确保图像满足执行仔细分 析的某些标准,包括但不限于,查阅:

·强名称;

·创建时间(图像应当比程序集更近);

·程序集和图像的MVID;

·.NET框架的版本;

·进程器架构;以及

·相关图像的版本(例如,图像mscorlib.dll)。

如果程序集没有强名称,则MVID用于检查。在步骤350处,分析图像 来确定其是否是当前的,且如果其不是当前的,则控制在步骤370中传递至 JIT编译器。否则,来自图像的代码在步骤360中加载。

从前述描述得出的是,本机图像的数目大致超过程序集的数目,而且由 相同父程序集生成的本机图像的数目对于不同的设备以及不同的图像版本来 说可能是不同的,所有这些都极大使分配图像的任务复杂化。一些常规文件 分类方法使用云服务等,但还未创造出能够正确且有效地分类图像的解决方 案。

发明内容

公开了用于对软件程序集的本机图像进行防病毒检查的示例性系统、 方法和计算机程序产品。在一个方面,用于检测机器代码的恶意本机图像 的示例性方法,所述方法包括:通过硬件处理器接收所述机器代码的本机 图像;通过硬件处理器识别父程序集,所述父程序集用于创建所述本机图 像;通过硬件处理器确定所述父程序集是否对应所述机器代码的本机图 像;和当所述父程序集不对应所述机器代码的本机图像时,通过硬件处理 器确定本机图像是恶意的。

在另一个示例性方面,确定所述父程序集是否对应所述机器代码的本 机图像包括:确定所述父程序集的公共中间语言(CIL)代码和所述机器 代码之间的对应关系。

在另一个示例性方面,使用一种或多种元数据元件确定所述父程序集 是否对应所述机器代码的本机图像,所述一种或多种元数据元素包括:CIL 代码、机器代码、元数据类型、清单、便携可执行的(PE)文件标头和公 共语言运行(CLR)标头。

在另一个示例性方面,确定所述父程序集是否对应所述机器代码的本 机图像包括:比较所述父程序集和所述机器代码的相应的元数据元素。

在另一个示例性方面,确定所述父程序集是否对应所述机器代码的本 机图像包括:比较所述机器代码的原始的本机图像和所述机器代码的生成 的本机图像的相应的元数据,其中,所述原始的本机图像是从所述父程序 集生成的机器代码的保证未修改的本机图像。

在另一个示例性方面,用于执行机器代码的本机图像的防病毒分析的 示例性方法包括:通过硬件处理器接收机器代码的本机图像;通过硬件处 理器收集关于所述机器代码的本机图像的数据,所述数据包括存储在关于 创建所述机器代码的本机映像的操作系统中的数据;通过硬件处理器基于 所收集的数据识别父程序集,其用于创建所述机器代码的本机图像;通过 硬件处理器执行所述父程序集的防病毒分析;和通过将所述父程序集的防 病毒分析结果与所述本机图像相关联,将所述机器代码的本机图像从所述 防病毒分析中排除。

在另一个示例性方面中,关于创建所述机器代码的本机图像的所收集 的数据包括至所述操作系统的注册表中的父程序集的路径。

在另一个示例性方面中,其中关于所述机器代码的所收集的数据还包 括一个或多个模块版本标识符(MVID)、强名称、机器代码的本机图像 的元数据,以及至所述机器代码的本机图像的路径。

上述实施例的方面的简述用于提供本公开的基本理解。该概述不是对 所有预期方面的广泛综述,并且既不是要确定所有方面的关键或重要元 素,也不希望描绘本公开的任何范围或所有方面。其唯一目的在于以简化 形式呈现一个或多个方面,作为随后的本公开的更详细的说明的序幕。为 了实现前述内容,本公开的一个或多个方面包括在权利要求中所描述和特 别指出的特征。

附图说明

以下附图,合并至本文并组成本文的一部分,示出了本公开的一个或 多个示例性方面,以及与详细说明一起用于解释其原理及应用。

图1A示出了单个文件程序集的示例性布局;

图1B示出了多个文件程序集的示例性布局;

图1C示出了生成强名称的示例性进程;

图2示出了执行程序集代码的示例性方法;

图3示出了运行结合模块的方法;

图4示出了根据一个方面分类图像的示例性方法;

图5示出了根据一个方面的图像的示例性结构;

图6示出了根据一个方面的将分类分配给图像的示例性方法;

图7示出了能够实施本公开的系统和方法的通用计算机系统的实施 例。

具体实施方式

在用于对软件程序集的本机图像进行防病毒检查的系统、方法和计算 机程序产品的上下文中,描述实施例的方面。本领域的普通技术人员将认 识到,以下的描述仅是说明性的并无意以任何方式进行限制。对于受益于 本公开的本领域技术人员来说,其它方面将很容易想到。现在将参考如图 附图中所示的示例方面的实施方式来详细描述。相同的编号将被尽可能地 用于全部附图和下面的说明中,以指代相同或类似的物品。

图4示出了根据一个方面分类图像的示例性方法。如图所示,在步骤400 中,获取图像。在一个实例中,图像可从本机图像缓存("NIC")获取(例如,如 果图像安装在装置上且用作意欲在装置上使用),且在另一个实例中,图像可 从任何其它的图像库获取(如,在装置用作储存器且图像并不意欲在装置上使 用)。接下来,在步骤410中,确定图像的信任类别。在一个示例性方面中, 将请求数据库来确定图像的信任类别,其中可使用图像的校验和。在另一个 示例性方面中,可使用图像的MVID。模板也用于确定图像的种类。在下文 中更详细论述以模板工作的机制。

如果图像在数据库中是未知的,则在步骤420中,确定创建该图像的父 程序集。为了确定父程序集,至少可使用以下数据、数据结构和机制:MVID、 注册表(例如,Windows注册表)、结合模块和强名称。

在一个示例性方面中,例如,当包含存在于当前装置上的程序集的MVID 的数据库存在时,可使用经由MVID确定的结果。在此方面中,图像的MVID 可在包含程序集的MVID的数据库中识别。

在另一个示例性方面中,当注册表中的条目在图像的创建期间被创建时, 父程序集可从注册表中的条目来确定。在上文更详细论述了此条目的实例。 在一个示例性方面中,条目可包含关于至父程序集的路径的信息、关于本机 图像的信息以及各种辅助数据。通过将来自注册表的数据与从分析的影响获 取的数据相比较,可识别父程序集。

在另一个示例性方面中,父程序集可从用于由强名称程序集创建的图像 的强名称确定。父程序集的强名称的组成部分从图像取得,强名称生成,且 基于该数据,确定了至装置的GAC中的、或以有序方式根据强名称保存程序 集的数据库中父程序集的路径。

确定父程序集的进程取决于一定数目的因素,其例如可包括父程序集和 图像的位置(例如,用户的装置或远程或本地数据库)、在其储存位置处危害程 序集和图像的可能性、命名程序集(强名称或普通名称)的方法等。

在一个示例性方面中,在确定父程序集之后,本机图像与程序集之间的 对应关系在步骤421中确定。如果存在本机图像(在创建之后)可在储存位置处 未授权(例如,其可被危害、损坏等)的情况下改变的可能性,则执行该步骤。 在一个示例性方面中,算法可用于确定使用图像结合模块(上文所述)的对应关 系。在另一个示例性方面中,在确定父程序集之后,可创建来自此程序集(即, 原始的本机图像,其是保证未改变的图像)的图像,且其可与进行分析来确定 对应关系的本机图像直接比较。在一个示例性方面中,比较可逐字节地进行。

在一个示例性方面中,为了防止图像的未授权改变,仅允许对信任进程 (例如,如,仅ngen.exe)改变图像,而仅容许对其它进程从本机图像读取 数据。

一个示例性方面中,模板的机制可用于确定图像与父程序集之间的对应 关系。在一个示例性方面中,如果没有父程序集与对应本机图像之间的对应 关系,则图像认作是损坏的(即,恶意的)。损坏的图像与原始图像的差别可在 于CIL代码、机器代码、类型的元数据、包含在CLR和PE标头中的信息等。

图5示出了根据一个方面本机图像的示例性结构。本机图像如父程序集 具有某一结构。例如,程序集KasperskyLab.dll和图像KasperskyLab.ni.dll包 含元数据和代码,其中程序集只包含CIL代码,而特定方面中的本机图像也 包含机器代码和结构NativeImageHeader。基于该结构、元数据和代码,生成 模板KasperskyLab.dll.tmpl(上文所述)且其与父程序集和由此创建的图像相关 联(即,建立对应关系)。为了将结构、代码和元数据合并到模板中,例如,示 例性系统和方法使用智能哈希技术(也称为本地敏感哈希)。在一个示例性方面 中,生成了如图5中所示的模板。

更具体而言,数据(即,清单、元数据、CIL代码等)从程序集取得。相同 的数据和机器代码从本机图像取得。处理对于由相同父程序集创建的图像的 可能版本中的各个不变的数据(例如,从中计算校验和),且哈希形成且置于 模板中。从图像的一个版本变为图像另一个版本的数据(如,机器代码)也被处 理,且只能因此生成智能哈希值。在特定方面中,生成了用于机器代码的函 数调用日志,具有分解的机器代码的列表或反映给定机器代码的实施的逻辑 的任何其它实体;以及由这些实体形成的智能哈希值。在另一个特定方面中, 这些实体直接用于模板中。应当注意的是,模板形成为以便清楚地关联(建立 对应关系)父程序集和图像,而不管取决于装置的软件和硬件配置的图像版 本。在图像的机器代码中产生变化且图像代码的执行的逻辑不再对应于程序 集代码的执行的逻辑的情况中,没有在父程序集与图像之间基于模板建立对 应关系,且确定图像为不对应程序集。

下文更详细描述使用模板确定对应关系的实例。例如,如果某一父程序 集Kaspersky.dll存在,且在装置上对其创建图像Kaspersky.ni.dll。形成 Kaspersky.dll.tmpl模板,使得有可能建立父程序集与图像之间的对应关系。 则在装置上,更新软件和硬件(即,操作系统、.NET框架、进程器替换等的 更新),且使图像Kaspersky.ni.dll的版本不再是当前的。因此,不可使用图像, 且该图像的更新开始,且创建不同于之前版本的图像的新图像 Kaspersky.ni.dll。在使用模板时,发现了更新的图像对应于父程序集(即,机 器代码的执行的逻辑仍相同)。在另一个情况中,恶意程序安装在装置上,其 改变图像Kaspersky.ni.dll。在此情况中,当使用模板时,确定了由恶意程序 改变的图像不对应于父程序集(例如,机器代码的执行的逻辑不同于嵌入父程 序集的逻辑)。

再次参看图4,在确定父程序集之后,建立程序集的信任类别(步骤430)。 程序集的信任类别为装置的保护系统的部分上的程序集(如,防病毒应用) 中的信任度(信任或不信任)。在一个示例性方面中,存在两个可能的程序集类 别:信任的程序集或不信任的程序集。在本公开内容的上下文中,人们应当 将程序集的种类的概念与程序集的危险状态的概念区分开。本公开内容的上 下文中的程序集的危险状态可为:危险或不危险。还存在其危险状态并未确 定的未知程序集。程序集的危险状态确定程序集对程序集安装到其上的装置 的危险性。在一个示例性方面中,程序集对装置的危险性包括在执行程序集 的代码期间从装置窃取数据、置换数据或对装置的软件未授权修改的可能性。

信任程序集包括由保护系统确定为不危险的程序集。具体而言,该装置 的保护系统,在为程序集分配信任类别时,在设备上当前状态的上下文中 并且基于关于该程序集的信息在本地这样做。在一个特定方面中,此信息 为程序集的危险状态。程序集的危险状态可通过使用程序集的标识信息确定, 如,程序集的MVID、程序集的强名称、程序集的校验和等。为此,在步骤 431中,对信誉数据库组织请求。一方面,数据库存在于程序集储存在其上 的装置上,而另一方面,数据库位于远程。如果程序集是已知的(即,关于其 的信息包含在信誉数据库中),则程序集已经相应地取决于来自信誉数据库的 信息具有不危险或危险的危险状态。如果程序集的标识信息未包含在数据库 中,则程序集认作是未知的,即,程序集不具有状态(即,状态未确定)。如果 程序集具有不危险状态,则在一个特定方面中,程序集接收信任的类别。在 另一个特定方面中,程序集的种类由关于程序集的其它实际和统计信息确定, 例如,通过将程序集安装在危险状态已知的带有安装程序包的装置上或其附 属物上。

在特定方面中,关于程序集的实际信息是关于数字签名(例如,签名的强 名称或X.509)的信息。在此情况下,应当验证数字签名。对于步骤432中的 验证,获取关于程序集的数字签名的标识信息,例如,其包含关于制造者的 信息或文件或其部分的哈希值。签名可位于程序集中或目录(即,目录签名) 中。程序集的数字签名的危险状态通过使用签名的标识信息确定,由此组织 对信誉数据库的查询。如果签名已知(即,关于签名的信息包含在信誉数据库 中),则签名已经具有不危险或危险的状态。如果签名的标识信息未包含在数 据库中,则签名认作是未知的,即,签名没有状态(即,状态未知)。在特定方 面中,如果签名具有不危险的状态,则在特定方面中,对程序集给予信任类 别,且如果签名具有危险状态,则在特定方面中,对程序集给予不信任类别。

状态以多种方式分配至签名。在一个特定方面中,签名的状态取决于制 造者。另一方面,签名的状态由其签名状态已知的安装程序的承继 (inheritance)来分配。另一方面,签名的状态取决于签名的普及性分配, 例如,签名越普及,则分配越高水平的信任。

在一个示例性方面中,在步骤433处,信任类别由程序集的防病毒检查 来确定,为此,各种方法用于检测恶意程序,包括签名、启发式、统计等。 在此方面,如果从防病毒检查的结果中发现程序集不危险,则程序集接收信 任的类别。否则,程序集被认作是不受信任的。

在确定程序集的信任类别之后,在步骤440中,确定图像的信任类别。 在特定方面中,对图像分配针对父程序集确定的信任类别。在另一个方面中, 图像的类别由上文针对步骤410所述的方法确定。

根据示例性方面,当保护系统安装在装置上时,示例性系统和方法确认 图像的存储库并未且将不会在未授权情况下改变。

图6示出了用于将类别分配至图像的示例性方法。如图所示,在步骤600 中,限制了对图像的存储库或至少一个图像的访问。一方面,限制包括仅允 许信任进程或有限数目的某些信任程序(如,仅进程ngen.exe)改变图像, 所有其它进程仅允许读取访问。在另一个特定方面中,限制包括完全阻止访 问写入作为整体的库中或至少一个图像中。

接下来,在步骤610中,确定用于创建其访问已经被限制的图像的父程 序集。在步骤620中,更新至少一个图像(例如,由另一个图像替换)。在一个 特定方面中,更新包括移除之前创建的图像和由操作系统创建新图像(例如, 通过在父程序集上运行ngen.exe或通过自动图像创建服务)。另一方面,更新 图像数据的仅一部分,如,机器代码,且更新通过信任的程序来完成。在第 一种情况中,在其移除之后重新创建图像。在一个特定方面中,这立即执行, 且在另一个情况中,创建推迟一定时间长度,例如,直到如步骤610中确定 的那样,运行更新的图像的父程序集。在步骤630中,将父程序集的类别分 配至图像。

防病毒应用在其运行中使用信任类别,例如,其除去具有信任或不信任 的类别的本机图像,或大致限制其使用,例如,防病毒应用限制其对由操作 系统提供的资源的访问。

在一个示例性方面中,防病毒应用可执行检测到的父程序集的防病毒扫 描,且从防病毒分析中排除机器代码的本机图像,但使父程序集的防病毒扫 描的结果与机器代码的本机图像相关联。在仅扫描的父程序集时,这改善了 计算机系统的防病毒分析的性能,同时由其创建的机器代码的本机图像将承 继程序集的信任类别和/或危险状态(判定)。因此,未执行本机图像的防病毒 扫描。

图7示出了公开的系统和方法可根据示例性方面在其上实施的通用计算 机系统(其可为个人计算机或服务器)的实例。如图所示,计算机系统包括中央 处理单元21、系统存储器22和连接各种系统构件(包括与中央处理单元21 相关联的存储器)的系统总线23。系统总线23实现为从现有技术中获知的任 何总线结构,依次包括总线存储器或总线存储器控制器,外围总线和本地总 线,其能够与任何其它总线构架交互。系统存储器包括永久性存储器(ROM)24 和随机存取存储器(RAM)25。基本输入/输出系统(BIOS)26包括确保信息在个 人计算机20的元素之间传输的基本进程,如,借助于ROM24加载操作系统 时的那些程序。

个人计算机20继而又包括用于读取和写入数据的硬盘27、用于在可移 动磁盘29上读取和写入的磁盘驱动器28以及用于在可移动光盘31,如 CD-ROM、DVD-ROM和其它光学信息介质上读取和写入的光学驱动器30。 硬盘27、磁盘驱动器28和光学驱动器30分别穿过硬盘接口32、磁盘接口 33和光学驱动器接口34连接到系统总线23上。驱动器和对应的计算机信息 介质为用于个人计算机20的计算机指令、数据结构、程序模块和其它数据的 储存的功率独立模块。

本公开内容提供了使用硬盘27、可移动磁盘29和可移动光盘31的系统 的实施方式,但应当理解的是,有可能使用其它类型的计算机信息介质56(固 态驱动器、闪存卡、数字盘、随机存取存储器(RAM)等),其能够储存可由计 算机可读的形式的数据,其经由控制器55连接到系统总线23上。

计算机20具有文件系统36,所记录的操作系统35、以及附加的程序应 用37、其它程序模块38和程序数据39被存储在其中。用户能够通过使用输 入装置(键盘40、鼠标42)将命令和信息输入个人计算机20中。其它输入装置 (未示出)可使用:麦克风、操纵杆、游戏控制器、扫描仪等。此类输入装置通 常经由继而又连接到系统总线上的串行端口46插入计算机系统20中,但它 们可以以其它方式连接,例如,借助于并行端口、游戏端口或通用串行总线 (USB)。显示器47或其它类型的显示装置也穿过接口如视频适配器48连接到 系统总线23上。除显示器47之外,个人计算机可配备有其它外围输出装置(未 示出),如,扬声器、打印机等。

个人计算机20能够在网络环境中使用,使用网络连接到一个或多个远程 计算机49。远程计算机(或多个计算机)49也是个人计算机或服务器,其具有 所描述的个人计算机20(如图4中所示)的性质中大部分或所有上述元素。 其它装置也可存在于计算机网络中,如,路由器、网络基站、对等装置或其 它网络节点。

网络连接可形成局域计算机网络(LAN)50和广域计算机网络(WAN)。此 网络用于企业计算机网络和内部公司网络中,且它们一般可访问因特网。在 LAN或WAN网络中,个人计算机20通过网络适配器或网络接口51连接到 局域网络50上。当使用网络时,个人计算机20可使用调制解调器54或其它 模块来用于提供与广域计算机网络如因特网的通信。可为内部或外部装置的 调制解调器54由串行端口46连接到系统总线23上。应当注意的是,网络连 接仅为示例,且不必绘出网络的准确构造,即,实际上存在由技术通信模块 形成一个计算机与另一个计算机的连接的其它方式。

在各种方面中,本文所述的系统和方法可在硬件、软件、固件或它们的 任何组合中实施。如果在软件中实施,则方法可储存为非暂时性计算机可读 介质上的一个或多个指令或代码。计算机可读介质包括数据储存器。举例来 说但不限制的是,此计算机可读介质可包括RAM、ROM、EEPROM、 CD-ROM、闪速存储器或其它类型的电学、磁性或光学储存介质,或可用于 传送或储存指令或数据结构形式的期望程序代码且可由通用计算机的处理器 访问的任何其它介质。

在各种方面中,本公开中以模块为术语的方式描述了系统和方法。如 本文所使用的。如本文使用的术语"模块"是指使用硬件来实施的现实世界的 装置、构件或构件布置,例如,如,通过专用集成电路(ASIC)或字段可编程 门阵列(FPGA),或作为硬件和软件的组合,如,通过微处理器系统和一组指 令来实施模块的功能,其(在执行时)将微处理器系统转换成专用装置。模块还 可实施为两者的组合,其中某些功能由硬件单独促进,而其它功能由硬件和 软件的组合来促进。在某些实施方式中,模块的至少一部分(且有时全部)可在 通用计算机的处理器上执行(如,在以上的图6中更详细描述的处理器)。因此, 各个模块均可以以多种适合的构造实现,且不应当限于本文列举的任何特定 实施方式。

为了清楚起见,本文并未公开这些方面的所有常规特征。将认识到的是, 在本公开内容的任何实际实施方式的开发中,必须进行许多实施方式特有的 决定,以便实现开发者特定的目标,且这些特定目标将对于不同的实施方式 和不同的开发者变化。将理解的是,此开发努力可能很复杂且耗时,但仍将 是受益于本公开内容的本领域的普通技术人员的工程的常规任务。

此外,将理解的是,本文使用的措辞或术语为了描述而非限制的目的, 使得本说明书的措辞或术语将由本领域的技术人员鉴于本文提出的教导内容 和方针与相关领域中的技术人员的知识组合来理解。此外,不期望说明书或 权利要求中的任何用语归于不常见或特殊的意义,除非明确地如此阐明。

本文公开的各种方面包含本文通过图示提到的已知模块的目前和未来的 已知的等同物。此外,尽管已经示出和描述了一些方面和应用,但受益于本 公开内容的本领域的技术人员将清楚的是,比上文提到的更多的改型是可能 的,而不会脱离本文公开的发明构想。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号