首页> 中国专利> 用于提供对引导驱动程序的原始例程的访问的系统和方法

用于提供对引导驱动程序的原始例程的访问的系统和方法

摘要

公开了用于检测由恶意软件对引导驱动程序例程的访问的系统和方法。一个示例性方法包括:由驱动程序拦截器识别已被加载入存储器中但尚未被初始化的一个或多个引导驱动程序;由所述驱动程序拦截器安装拦截处理程序,所述拦截处理程序可操作用于拦截对所识别的一个或多个引导驱动程序的初始化例程的调用;由所述驱动程序拦截器拦截对所识别的一个或多个引导驱动程序的所述初始化例程的程序调用;由所述拦截处理程序存储由所述驱动程序在其初始化的过程中提供的关于所述引导驱动程序的信息,其中,所述信息至少包含所述引导驱动程序的一个或多个例程的入口点的地址;以及由所述驱动程序拦截器通过先前存储的所述入口点的地址提供对所述引导驱动程序的所述例程的访问。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-08

    授权

    授权

  • 2016-07-13

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

    实质审查的生效

  • 2016-06-15

    公开

    公开

说明书

技术领域

概括而言,本发明涉及计算机安全领域,更具体地说,涉及用于提供 到引导驱动程序的原始例程的访问的系统和方法。

背景技术

rootkit是一种类型的恶意软件,其经常被第三方(通常是入侵者)用 来获得对计算机系统的访问,以旨在隐藏运行的进程、文件或系统数据, 这可以帮助入侵者在用户不知道的情况下保持对系统的访问。rootkit通常 隐藏登陆、进程、线程、注册表项、文件以及记录,并且可以包括用于拦 截来自终端、网络连接和键盘的数据的软件。rootkit能够感染在操作系统 (OS)进行加载期间执行的引导驱动程序,并从而在任何杀毒软件之前被 加载系统上。Rootkit还可以以类似过滤器的方式嵌入在操作系统进程中, 使得任何常规的恶意软件检测手段无法得到与隐藏的软件或软件片段相关 的信息。

检测rootkit的难点之一是由于以下事实:与病毒不同,rootkit通常在 计算机开启时在操作系统已完全启动之前激活其自身,并且rootkit通常获 得系统权限。另外,rootkit通常会采取措施来掩盖其存在并防止传统的杀 毒检测机制识别到其存在。例如,典型的杀毒软件调用系统功能调用来识 别当前正在运行的进程。rootkit会拦截该功能调用,并将其自己的返回参 数提供给杀毒软件,但掩盖其自己的进程。另外,rootkit通常对检查文件 是否包含已知的病毒标签的传统杀毒机制隐藏其所存储在其中的文件。

因此,存在改善对rootkit以及类似类型的恶意软件的检测的需求。

发明内容

公开了用于提供对引导驱动程序的原始例程的访问的系统、方法和计 算机程序产品的示例性方面。在一个示例性实施例中,一种用于检测对引 导驱动程序例程的访问的方法,所述方法包括:由驱动程序拦截器识别已 被加载入存储器中但尚未被初始化的一个或多个引导驱动程序;由所述驱 动程序拦截器安装拦截处理程序,所述拦截处理程序可操作用于拦截对所 识别的一个或多个引导驱动程序的初始化例程的调用;由所述驱动程序拦 截器拦截对所识别的一个或多个引导驱动程序的所述初始化例程的程序调 用;由所述拦截处理程序存储由所述驱动程序在其初始化的过程中提供的 关于所述引导驱动程序的信息,其中,所述信息至少包含所述引导驱动程 序的一个或多个例程的入口点的地址;以及由所述驱动程序拦截器通过先 前存储的所述入口点的地址提供对所述引导驱动程序的所述例程的访问。

在一个示例性方面,所述拦截处理程序可操作用于将在引导驱动程序 的列表中包含了其指针的所述引导驱动程序的原始入口点的地址用所述拦 截处理程序的入口点的地址代替,其中,将所述引导驱动程序的所述原始 入口点存储在所述拦截处理程序中。

在一个示例性方面,对引导驱动程序的识别是使用已被加载入所述存 储器但尚未被初始化的引导驱动程序的列表来执行的。

在一个示例性方面,所述引导驱动程序的列表由所述驱动程序拦截器 在系统注册表中读取。

在一个示例性方面,所述引导驱动程序的列表由所述驱动程序拦截器 使用OS引导加载程序来读取。

在一个示例性方面,关于所述引导驱动程序的所述信息被存储在针对 所述驱动程序拦截器所分配的存储器区域中。

在一个示例性方面,在所述引导驱动程序的初始化期间获得的关于所 述引导驱动程序的所述信息包含以下各项中的一项或多项:所述引导驱动 程序的名称、所述引导驱动程序的一些或所有例程的入口点的地址、由所 述OS引导加载程序在所述初始化过程中转移给所述引导驱动程序的参数、 在所述注册表中到所述驱动程序的路径、所述入口点的地址、以及驱动程 序对象结构。

在另一个示例性方面,一种用于检测对引导驱动程序例程的访问的计 算机系统,所述系统包括:用于存储杀毒应用的存储器,所述杀毒应用配 置为在一个或多个其它引导驱动程序之前将驱动程序拦截器放入所述计算 机的主引导记录;硬件处理器,其耦合到所述存储器并且配置为:由所述 驱动程序拦截器识别已被加载入存储器中但尚未被初始化的一个或多个引 导驱动程序;由所述驱动程序拦截器安装拦截处理程序,所述拦截处理程 序可操作用于拦截对所识别的一个或多个引导驱动程序的初始化例程的调 用;由所述驱动程序拦截器拦截对所识别的一个或多个引导驱动程序的所 述初始化例程的程序调用;由所述拦截处理程序存储由所述驱动程序在其 初始化的过程中提供的关于所述引导驱动程序的信息,其中,所述信息至 少包含所述引导驱动程序的一个或多个例程的入口点的地址;以及由所述 驱动程序拦截器通过先前存储的所述入口点的地址提供对所述引导驱动程 序的所述例程的访问。

上面示例性方面的简单概要是用来提供对本公开内容的基本理解。该 概要并非所有预期方面的广泛概述,并且其意图既不是要确定所有方面的 关键或重要元素,也不是要划定本公开内容的任何或所有方面的范围。其 唯一目的是以简化的形式给出一个或多个方面,作为下面本公开内容的更 详细描述的前奏。为了实现上述目的,本公开内容的所述一个或多个方面 包括在权利要求中描述并特别指出的特征。

附图说明

被合并入说明书并且构成说明书的一部分的附图示出了本公开内容的 一个或多个示例性方面,并且与具体实施方式一起用来解释本公开内容的 原理和实现。

图1示出了根据一个示例性方面,引导操作系统的过程的示例。

图2示出了根据一个示例性方面,对引导驱动程序初始化例程的调用 进行拦截的示例方法。

图3示出了可以用来实现用于对由恶意软件对引导驱动程序例程的访 问进行检测的系统和方法的通用计算机系统的示例。

具体实施方式

本文在用于对由恶意软件对引导驱动程序例程的访问进行检测的系 统、方法和计算机程序产品的背景下,描述了若干示例性方面。本领域的 普通技术人员应意识到的是,下面的描述仅是说明性的,并非旨在以任何 方式进行限定。其它方面将使本领域的技术人员很容易得出本公开内容的 益处的启示。现在将详细地参照如图所示出的示例性方面的实施。贯穿附 图以及下面的描述,将尽量使用相同的附图标记来指代相同或相似的项目。

图1示出了根据本发明的一个方面的引导操作系统(OS)的过程,该 过程包括驱动程序拦截器的初始化的阶段。该引导OS的过程是大多数OS (诸如Windows、Unix、OSX、安卓以及其它OS)所具有的特征。当计算 机的电源打开时,在步骤101中加载BIOS(基本输入/输出系统),并且借 助于写入到BIOS的软件和硬件,计算机组件被初始化并且POST(通电自 检)运行。在BIOS发现硬盘的系统分区、读取到MBR(主引导记录)并 且启动引导管理器(例如,WindowsOS中的Bootmgr.exe)时,该自检过 程终止。在步骤102,该引导管理器发现硬盘的系统分区中的OS引导加载 程序(诸如WindowsOS中的Winload.exe)并将其启动。应当注意的是, 在许多现代计算机中,BIOS已被UEFI(统一可扩展固件接口)替代,并 且MBR被GPT(GUID分区表—一种针对分区表使用全局唯一标识符 (GUID)在物理硬盘上的布局的格式标准)替代,其中,UEFI和GPT均 能够在本发明中使用。

在步骤103,OS引导加载程序对从磁盘读取数据所需要的引导启动系 统驱动程序进行初始化,并且对OS内核进行初始化。在步骤104,OS引 导加载程序加载对OS进行初始化所需要的系统注册表单元和系统驱动程 序,此后,其将以读取到的数据发送给OS内核。在步骤105,对由杀毒应 用安装的驱动程序拦截器进行初始化。在一个示例性方面,在WindowsOS 中,可以通过在注册表中安装早期引导组来确保在其它驱动程序之前加载 驱动程序拦截器。例如,在WindowsOS中,从驱动程序的INF文件中读 取的StartType条目的值SERVICE_BOOT_START将被写入到注册表中。此 外,杀毒应用可以改变引导组的列表。

接下来,在步骤106,对其它引导驱动程序进行初始化,并且在步骤 107,对普通的驱动程序和软件进行初始化。在步骤108,对OS的引导结 束。在一个示例中,如果在计算机上已安装了rootkit,则也可以在步骤107 对该计算机的驱动程序进行初始化。

图2示出了拦截对引导驱动程序初始化例程的调用的方法。当在步骤 106对引导驱动程序进行初始化时,OS引导加载程序210凭借PnP管理器 (即插即用管理器—在Windows中提供对PnP功能的支持的管理器)将控 制依次转移到每个引导驱动程序220(在下文中出于解释说明的目的其将被 称作驱动程序)的入口点221。在一个方面,OS引导加载程序210将指向 驱动程序对象(包含指向驱动程序例程的指针;例如,WindowsOS中的结 构DRIVER_OBJECT)以及到注册表中的驱动程序键的路径作为参数转移 到引导驱动程序220。作为一个例子,在WindowsOS中,例程DriverEntry 负责驱动程序的初始化222,其入口点为DriverInit—结构DRIVER_OBJECT 中的成员。

在引导驱动程序220的初始化222的过程中,执行下列动作:

1.驱动程序在驱动程序对象或驱动程序扩展中存储有针对驱动程序 223的例程的入口点。驱动程序例程包括标准例程(例如,在WindowsOS 中:AddDevice、StartIo、Unload以及其它例程)和该驱动程序自己的例程 两者。

2.对由驱动程序使用的各种驱动程序范围内的对象进行创建和/或初始 化,并且安装驱动程序的各种系统资源。

3.释放未使用的已分配存储器。

4.将驱动程序224的初始化的完成的状态以及接收并执行来自PnP管 理器的、针对配置、添加和运行设备的请求的能力返回给OS引导加载程序。

由于在步骤105,驱动程序拦截器230作为引导驱动程序之中的第一个 被初始化,因此在初始化之后,其发现并读取已被加载入存储器但尚未被 初始化的引导驱动程序的列表。在一个方面,可以在系统注册表中或者利 用OS引导加载程序210读取该列表(例如,在WindowsOS中,该列表可 以被保存在结构KeLoaderBlock中,被OS引导加载程序形成并转移成OS 内核的入口点)。

在一个方面,未初始化的引导驱动程序的列表可以包含以下信息:

·名称;

·该引导驱动程序在存储器中的加载地址;

·注册表中到该驱动程序的路径;

·该驱动程序的对象;

·入口点的地址。

在获得引导驱动程序的列表之后,驱动程序拦截器230安装拦截处理 程序231,需要拦截处理程序231来拦截对引导驱动程序的初始化例程的调 用。在一个方面,当安装引导驱动程序的初始化例程的拦截处理程序231 时,拦截处理程序231将在引导驱动程序的列表中包含了其指针的引导驱 动程序220的入口点的地址用拦截处理程序231的入口点的地址代替,其 中,原始的驱动程序的入口点221将由拦截处理程序231保存。从而,当 OS引导加载程序210将控制转移到入口点221时,该控制将被拦截处理程 序231拦截。然后,拦截处理程序231将该控制转移到先前保存的原始的 驱动程序的入口点221。

在完成了初始化例程224之后,控制将被转移回拦截处理程序231,这 导致了驱动程序220的初始化。拦截处理程序231保存由驱动程序在其初 始化的过程期间提供的关于引导驱动程序220的信息。在一个方面,这些 信息可以包含:

·引导驱动程序220的名称;

·引导驱动程序220的一些或所有例程的入口点的地址;

·由OS引导加载程序210在初始换过程中转移给引导驱动程序220 的参数;

·注册表中到该驱动程序的路径;

·入口点的地址;

·驱动程序对象结构。

在另一个方面,关于引导驱动程序220的信息以及其原始的入口点可 以保存在针对驱动程序拦截器分配的存储器区域中。

在对OS进行引导之后,在步骤108,用户级别的各种应用能够调用访 问例程。通过访问驱动程序例程,能够通过各种设备的驱动程序获得对这 些设备的硬件的访问。为了隐藏其存在以及系统中的其它恶意软件组件的 存在,rootkit可以拦截由应用针对存储器中的驱动程序例程的调用,并随 后过滤对相应的设备的访问。

为了防止恶意程序活动,在本发明的最后的步骤中,驱动程序拦截器 230访问引导驱动程序的原始例程。在WindowsOS中,SCSI端口驱动程 序负责与磁盘一起工作。对负责与磁盘请求一起工作(诸如 IRP_MJ_INTERNAL_DEVICE_CONTROL、IRP_MJ_SCSI)的驱动程序例 程的访问也将在驱动程序拦截器230的帮助下通过原始地址来进行(即, 不被rootkit修改)。因而,如果在系统中存在rootkit,则对于杀毒应用而言 该rootkit将是可被访问的,尽管其会试图隐藏其操作(文件在磁盘上的位 置、控制流等)。因此,在正常的杀毒检查过程中,将会发现rootkit并对其 进行分析。在一个方面,该杀毒检查可以包括标签分析、启发式分析、仿 真、通过利用信誉服务进行检查以及其它方式。

在检测之后,杀毒应用可以执行对rootkit的移除:磁盘上的文件、加 载到存储器中的恶意软件代码,并且可以删除该rootkit的活动的其它痕迹。 为了检查该移除是否成功,还可以重启计算机。在特定情况下,为了完成 对加载入存储器的恶意程序代码的移除,也需要重启计算机。

在一个示例性方面,如果无法移除rootkit或其一部分,则杀毒应用可 以指定一个治愈脚本,该治愈脚本将在OS引导的早期阶段执行。此后,需 要重启计算机。该治愈脚本可以例如包含rootkit文件在磁盘上的位置的地 址以及用于将其移除的命令。在引导OS期间,将由杀毒程序的反rootkit 驱动程序中负责执行该治愈脚本的一个来移除该rootkit。

在一个方面,任何其它杀毒应用驱动程序(诸如反rootkit驱动程序) 均可以实现对引导驱动程序的原始例程的访问。

图3示出了通用计算机系统20(其可以是个人计算机或服务器)的示 例,通用计算机系统20可以用来实现本文所公开的系统和方法的各个方面。 计算机系统20包括中央处理单元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的属性时所提到的大部分或所有元件的个人计算机或服务器。 在计算机网络中还可以存在其它设备,诸如路由器、网络站、对等设备或 其它网络节点。

网络连接可以形成局域计算机网络(LAN)50和广域计算机网络 (WAN)。这些网络被用于企业计算机网络以及公司内部网络,并且它们通 常具有到因特网的接入。在LAN或WAN网络中,个人计算机20通过网络 适配器或网络接口51连接到局域网50。当使用网络时,个人计算机20可 以使用调制解调器54或其它模块来提供与广域计算机网络(诸如因特网) 的通信。调制解调器54(其为内部或外部设备)通过串行端口46连接到系 统总线23。应当注意的是,这些网络连接仅是示例性的,并不需要描绘网 络的实际配置,即,实际上存在通过技术通信模块来建立一个计算机到另 一个计算机的连接的其它方式。

在各个方面,本文中描述的系统和方法可以在硬件、软件、固件或其 任意组合中实现。如果在软件中实现,则该方法可以作为一个或多个指令 或代码存储在非暂时性计算机可读介质上。计算机可读介质包括数据存储。 通过举例而非限定的方式,这种计算机可读介质可以包括RAM、ROM、 EEPROM、CD-ROM、闪存或其它类型的电、磁或光存储介质,或能够用 于以指令或数据结构的形式携带或存储期望的程序代码并且能够被通用计 算机的处理器访问的任何其它介质。

在各个方面,在本公开内容中在模块方面描述了系统和方法。如本文 中使用的术语“模块”指的是现实的设备、组件、或使用硬件实现的组件 的排列,诸如通过专用集成电路(ASIC)或现场可编程门阵列(FPGA); 或者作为硬件和软件的组合,诸如通过微处理器系统以及用于实现该模块 的功能的指令集,其中该指令集(在被执行时)将该微处理器系统转换成 专用设备。模块还可以实现为以下二者的组合:单独由硬件协助的特定功 能,以及由硬件和软件的组合协助的其它功能。在某些实现中至少部分的 以及在一些情况下所有的模块能够在通用计算机的处理器上执行(诸如上 面在图3中详细描述的)。因此,每个模块可以以各种适当的配置实现,并 且不应当限于本文中所举例说明的任何特定实现。

为了清楚起见,本文并未公开各个方面的所有常规特征。应当意识到 的是,在本公开内容的任何实际实现的开发中,必须做出若干特定于实现 的决策以便达到开发者的具体目标,并且对于不同的实现和不同的开发者, 这些具体目标会不同。应当意识到的是,这种开发工作会是复杂的和耗时 的,但是对于具有了本公开内容的益处的本领域普通技术人员而言,这将 只不过是工程的例行工作任务。

此外,应当理解的是,本文中使用的措辞或术语是出于描述而非限制 的目的,因此本说明书中的术语或措辞应被本领域技术人员根据本文中给 出的教导和指导,结合相关领域的技术知识来进行解释。此外,除非明确 地指出,对于说明书或权利要求书中的任何术语,并非旨在归于非常用的 或特殊的释义。

本文中公开的各个方面涵盖本文中以解释说明的方式提及的已知模块 的目前以及未来已知的等同物。此外,虽然已示出并描述了多个方面和应 用,但具有本公开内容的益处的本领域技术人员应当意识到的是,在不背 离本文公开的发明构思的情况下,可能有比上面所提及的更多的修改。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号