在管理程序模式下安全执行代码的系统和方法与流程

文档序号:11920201阅读:268来源:国知局
在管理程序模式下安全执行代码的系统和方法与流程

本发明总体涉及计算机安全领域,更具体地涉及在管理程序模式下安全执行代码的系统和方法。



背景技术:

计算机恶意软件(例如特洛伊木马、病毒和蠕虫)以不断增加的速度日益发展,并且使用多种方法来规避抗病毒应用程序。一种这样的方法是向正在执行抗病毒检查的抗病毒应用程序隐藏计算机系统的某些资源(例如文件或注册分支)。按照反病毒公司的分类,使用这样的方法的恶意程序被称为隐匿程式,或者这些恶意程序使用隐匿技术。如果可以利用在操作系统(Operating System,OS)的工作在内核级下的组成部分中的漏洞,则隐匿技术变成甚至更加危险的。这不允许现在的抗病毒应用程序检测使用这类技术的恶意程序。

解决这类情况的一种途径是使用管理程序,该管理程序将不同的OS彼此隔离、对不同运行的OS之间的资源进行划分、以及管理资源。同时,相比于在内核级下对代码的执行,在管理程序模式下对代码的执行发生在甚至更低的级上。不必惊讶的是,制作抗病毒应用程序的公司对这样的途径感兴趣。然而,当前的解决方案是低效的,并且在一些情况下不可能采用。



技术实现要素:

公开了用于在管理程序模式下安全执行代码的系统和方法。一种示例性方法包括:加载管理程序,所述管理程序配置成检查受保护的虚拟内存页面的完整性;加载可信程序,所述可信程序配置成进行对所述管理程序的超级调用;通过所述可信程序进行对所述管理程序的第一超级调用;响应于所述第一超级调用,通过所述管理程序生成令牌,所述令牌被所述管理程序用来在随后的超 级调用期间识别所述可信程序;分配用于存储所述令牌和所述管理程序的内存地址的内存页面;以及将所分配的内存页面的地址返回给所述可信程序。

在一个示例性方面中,所述可信程序是抗病毒应用程序的组成部分。

在一个示例性方面中,加载管理程序包括:在加载一个或多个客户操作系统之前加载所述管理程序。

在一个示例性方面中,通过所述管理程序生成令牌包括:针对每个客户操作系统随机地生成唯一的令牌。

在一个示例性方面中,该方法还包括:针对所述内存页面设置禁止重写所述内存页面的安全参数。

在一个示例性方面中,该方法还包括:通过所述可信程序进行第二超级调用,其中,所述第二超级调用包括由所述管理程序生成的所述令牌;通过所述管理程序验证所述令牌以确认所述第二超级调用来自于所述可信程序;如果所述令牌被验证,则通过所述可信程序向所述管理程序提供用于完整性检查的一个或多个受保护的内存页面的地址;以及通过所述管理程序执行所述受保护的内存页面的循环冗余校验。

在一个示例性方面中,该方法还包括:通过所述管理程序建立所述受保护的内存页面的反复的循环冗余校验。

一种用于安全执行管理程序的示例性系统包括:硬件处理器,所述硬件处理器配置成:加载管理程序,所述管理程序配置成检查受保护的虚拟内存页面的完整性;加载可信程序,所述可信程序配置成进行对所述管理程序的超级调用;通过所述可信程序进行对所述管理程序的第一超级调用;响应于所述第一超级调用,通过所述管理程序生成令牌,所述令牌被所述管理程序用来在随后的超级调用期间识别所述可信程序;分配用于存储所述令牌和所述管理程序的内存地址的内存页面;以及将所分配的内存页面的地址返回给所述可信程序。

以上对示例性方面的简要概述用于提供对本发明的基本理解。该概述不是对所有预期方面的广泛综述,并且既不旨在标识所有方面的关键要素或主要要素,也不旨在勾画本发明的任何方面或所有方面的范围。该概述的唯一目的是 以简化的形式呈现一个或多个方面,作为随后的对本发明的更详细的描述的前奏。为了实现前述目的,本发明的一个或多个方面包括在权利要求中所描述的且特别指出的特征。

附图说明

并入本说明书中并构成本说明书的一部分的附图示出了本发明的一个或多个示例性方面,以及连同详细的描述一起用来阐述这些示例性方面的原理和实现方式。

图1示出实现在管理程序模式下对代码的可信调用的机制的示例性系统。

图2示出向可信程序提供管理程序调用地址的示例性方法。

图3示出包含对于来自可信程序的调用的管理程序地址的内存页面的示例。

图4示出使用管理程序保护内存页面的示例性方法。

图5示出可实施所公开的系统和方法的方面的通用计算机系统的示例。

具体实施方式

本文在用于在管理程序模式下安全执行代码的系统、方法和计算机程序产品的背景下描述了示例性方面。本领域的普通技术人员将认识到,以下描述仅仅是说明性的,而不旨在以任何方式进行限制。其它方面将容易地将其自身暗示给了解本发明的优点的本领域的技术人员。现在将详细地参考如附图中所示的示例性方面的实现方式。贯穿附图和以下描述将尽可能地使用相同的附图标记来指代相同或类似的项目。

管理程序是能够在同一个计算机上同时并行执行几个操作系统(OS)的程序。管理程序分为两种类型:第一类型具有其自身内置的设备驱动器和调度器,因此不依赖于特定的OS;而第二类型在与主OS的内核相同的环内工作(内核模式或环0)。第一类型的管理程序也被称为裸机并且是用于实现本发明中的管理程序的优选示例。相比于在内核模式或环0下对代码的执行,在管理程序模式下对代码的执行发生在甚至更低的级上。

对在管理程序模式下正在执行的代码的调用(超级调用)是朝向在管理程序模式下对代码的执行(也简称为“执行”)的转变,这需要处理器的一部分上的虚拟技术的硬件支持。

可信OS是在不违背访问权限的情况下使用足够的硬件和软件来使一组用户能够同时处理具有不同保密程度的信息的操作系统。通常,可信OS能够提供用户数据的机密性和完整性。在文献“A Guide to Understanding Configuration Management in Trusted Systems”(1988年)中可以获知关于可信系统的更多内容。

对代码的可信调用是对外部代码的调用,在此期间确保该调用来自可信源(属于可信应用程序的进程的内存页面),这排除了对来自恶意程序或不可信程序的外部代码的调用的可能性。可信应用程序是这样的程序:该程序的可执行文件具有数字签名并且不是恶意的。

图1示出实现在管理程序模式下对代码的可信调用的机制的系统的示例。操作系统110执行各种应用程序130以及可信程序150和恶意程序140。应用程序130包括各种用户应用程序,例如浏览器、文字处理器等。恶意程序140(例如病毒、蠕虫、特洛伊木马等)可以使用不同的隐藏其在操作系统中存在的方式(例如,使用隐匿技术),使得其可以避免被抗病毒应用程序(在图1中未示出,但可以是应用程序130中的一者)检测到。该事实意味着,OS 110不能被视为可信的,而且它对于用户数据来说是个威胁。可以在各种来源(例如https://en.wikipedia.org/wiki/Rootkit)中读取在操作系统中隐藏恶意程序的存在的方式。

为了检测恶意程序140的存在以及防止恶意程序140访问用户信息的可能性,可以使用可信程序150和管理程序120。可信程序150可以采用单独的应用程序的形式和采用抗病毒应用程序的组成部分的形式二者来实现。可信程序150的关键特征是其进行对于管理程序120的代码的执行的调用的能力。如上所述,相比于在内核模式下对代码的执行,在管理程序模式下对代码的执行发生在甚至更低的级上,这使得可以忽视由恶意程序140所使用的可能的隐匿技术。在内核模式(环0)下正在执行的代码无权访问将在管理程序模式下执行的代码。 同样地,在用户模式(环3)下正在执行的代码无权访问在内核模式下执行的代码。可以在各种公开物(例如Russinovich,Mark E.;David A.Solomon(2005).Microsoft Windows Internals(4ed.).Microsoft Press)中找到关于保护环的更多细节。应当注意,在环0中对代码的执行也被称为在内核级上的执行,并且在环3中对代码的执行为在用户级上的执行。

如已经提及的,可信程序150进行对于管理程序120(其代码将在管理程序模式下被执行)的代码的执行的调用,即可信程序150进行超级调用。假设OS 110初始是可信的,但恶意程序140危害了OS的信任级别。另外据推测,恶意程序140具有复杂的逻辑(例如隐匿功能),使得可以避免安装在OS 110中的抗病毒应用程序(在图1中未示出)对恶意程序140的检测。因此,需要保护机密的用户信息免受恶意程序140的危害。

在当前的OS中,可以采用如下几种方式保护信息:使用加密,控制对数据存储器的访问,以及提供对与用户数据一起工作的那些进程的虚拟内存的保护。本发明总体涉及用于保护进程的虚拟内存的系统和方法。

保护进程的虚拟内存的方法是已知的。例如,NX位使得可以设置禁止执行内存页面的位,从而实现防止执行作为可执行代码的数据的可能。例如,共同拥有的美国专利No.8990934(其通过引用并入本文)描述了控制对于内存页面的执行位和写入位的互斥设置从而防止开发的写入和执行的技术。

然而,已知的技术具有如下缺点:这些技术工作在OS内核级上,这脱离了执行处于同级特权的恶意代码的可能,但是在计算机开机之后启动(初始化)OS期间过早地开始工作。这样的恶意代码可以断开或者甚至更糟地控制上述内存保护算法,在这些情况下,这还是不能对用户信息提供保护。可以在各种公开物(例如Russinovich,Mark E.;David A.Solomon(2005);Microsoft Windows Internals(4ed.);Microsoft Press)中找到关于在打开计算机之后对OS的启动(初始化)的更多细节。

在管理程序模式下对代码的执行使得可以在恶意代码的一部分上检查内存变化,即使该恶意代码在内核模式下被执行。然而,在管理程序模式下对于代 码执行的调用(进行超级调用)需要单独的应用程序,该应用程序的代码将进行这样的超级调用。在本发明中,该应用程序是可信程序150,其可以为抗病毒应用程序。

重要的是要注意,通常在管理程序120模式下以单片代码区段的形式制码是非常困难的,这将包含运行在OS 110中的进程的虚拟内存页面的验证,造成困难的几个原因如下:

●管理程序代码变为“超载的”(其证明是过于复杂的而无法写入和调试),它开始消耗过多的系统资源,尤其是处理器时间;

●管理程序代码工作过“低”(在管理程序级别上),即,它不“知道”OS(内核级)的工作机制,该OS“高于”管理程序而工作,该问题的特征是裸机管理程序。

因此,可以期望的是,将某些功能从管理程序120移出而进入可信程序150,而在管理程序120中仅留下内存页面验证功能。可信程序150可以被实施成允许OS 110的实现的多个细节(例如,允许Windows OS的虚拟内存页面组织),使得能够使该管理程序120作为跨平台的管理程序120。

在一个示例性方面中,在可信程序150和管理程序120之间应当具有受保护的通信信道。为了提供这样的通信信道,必需的是,仅可信程序150可以进行对管理程序120的代码的调用(超级调用)。考虑到管理程序120代码被存储在RAM中,需要确保调用该代码所用的地址的机密性。

图2示出向可信程序150提供管理程序120调用地址的示例性方法。在步骤205中,在计算机系统开机后立即加载管理程序120,甚至在OS 110的初始化之前。通常,在主机OS开启之前将裸机类型的管理程序初始化。主机OS指的是在管理程序的初始化之后开启的任何OS,在给定情况下,这是OS 110。在步骤207中,加载可信程序150,这通常以OS 110的驱动器的形式来实现,并且尽可能快地加载该可信程序150。该要求是必需的,以便在步骤207中仍然将OS 110视为可信的,这是因为可信程序150的及早启动使得能够在开启恶意程序140之前开启该可信程序150。在步骤210中,可信程序150执行管理程序 120代码的第一调用(超级调用),在此之后将管理程序120的地址返回到内存(所谓的安全的超级调用地址)。接着,需要保护该地址免受未授权的访问,为此,在步骤220中,创建内存页面300,该内存页面300的示例性结构在图3中示出。该内存页面本身包括一组内存地址,可以通过这组内存地址进行超级调用。在一个示例性方面中,仅一个调用将立即导致超级调用,而其它调用将引起OS 110的工作中的异常和错误以及随后的OS 110的重启。该内存页面300可以由可信程序150创建,或直接由管理程序120在其第一调用期间创建。在步骤230中,管理程序120完成通过代码用调用填充页面。内存页面可以额外地通过例如在步骤240中设置安全参数(例如安全位)来保护,该安全参数指示该内存页面不能被重写。在各个方面中,该安全参数可以由可信程序150或由管理程序120来设置。

考虑向可信程序150发送管理程序120的正确调用地址的机制。由于地址本身存储在可信程序150的进程的内存中可能不安全,因此既然不能排除恶意程序140的介入从而得到该地址,则可信程序150也存储随机生成的密钥的形式的令牌,该令牌可以用于进行超级调用。该令牌本身由管理程序120在其第一调用时(图2中的步骤210)生成,并被发送到可信程序150以便在超级调用期间比较令牌的值,从而防止对管理程序120恶意调用的情况。令牌在计算机系统的工作期间(在接通电源之后)生成一次,并且令牌对于OS 110是唯一的。因此,如果其它主机OS存在于计算机系统中,则管理程序120针对这些主机OS中的每一者生成独自的令牌。

图4示出使用管理程序保护内存页面的示例性方法。在步骤410中,可信程序150进行超级调用,在此之后,在步骤420中,检查令牌,如果可信程序150的令牌匹配保存的管理程序120的令牌(在步骤430中检查),则在步骤450中,可信程序150发送需要保护的内存页面的地址。内存保护涉及设置用于禁止/允许各种操作的位,即读取代码、写入代码和执行代码。在步骤460中,针对存储在受保护的内存页面中的数据执行校验和验证(循环冗余校验(Cyclic Redundancy Check,CRC))。在步骤470中,管理程序120通过针对受保护的内 存页面计算校验和而指示周期性的验证,这是因为攻击可能涉及利用线性地址的操作。周期性的验证可以由管理程序120或可信程序150通过按等时间间隔使用超级调用来初始化。管理程序120也可以检查可信程序150的完整性以便确保该可信程序150还未被恶意程序140更改。完整性检查包括计算校验和并将该校验和与先前保存的值相比较以确定可信程序150的变化。该检查发生在步骤420中。如果可信程序150的代码已经被改变,则管理程序可以通过从磁盘加载该可信程序150而在内存中恢复该可信程序150。

下文是涉及利用线性地址的操作的攻击的示例。例如,OS 110的中断调度表(Interrupt Dispatch Table,IDT)位于线性地址0xF1D10000,该线性地址0xF1D10000是物理地址0x123000的映射(即,虚拟内存页面的地址到物理地址上的映射)。管理程序120可以为在地址0x123000处的物理页面建立上述保护(不损失性能)。但是恶意程序140可以挑出物理页面(例如0x321000)、在其中复制原始页面0x123000的内容(此处已经替换必备要素(在给定示例中,这将是中断处理程序))、以及建立映射0xF1D10000->0x321000,从而管理程序120不能检测到变化,不具有关于OS 110中的虚拟内存的工作逻辑的信息。因此,可信程序150应当从OS 110内周期性地检查页面表的正确性,从而如在给定示例中,0xF1D1000确实对应于0x123000而非其它。

考虑在加载管理程序120之前存储管理程序120的示例。管理程序120的代码可以被存储在统一的可扩展固件接口(Unified Extensible Firmware Interface,UEFI)服务中或者被存储在PCI或PCIe板上的单独的设备中,该设备未被限定在OS 110中(例如,管理程序120或可信程序150独立地处理与该设备的中断),或者管理程序120的代码可以通过使用磁盘虚拟化而被存储(管理程序120排除磁盘的其上存储管理程序120的代码的区段,改变磁盘驱动器基本功能)。

图5示出其上可实施所公开的系统和方法的通用计算机系统(其可以是个人计算机或服务器)的示例。如所示,该计算机系统包括中央处理单元21、系统存储器22和连接各种系统组件的系统总线23,各种系统组件包括与中央处理单元21相关联的存储器。系统总线23像从现有技术已知的任何总线结构一样 来实现,依次包括总线存储器或总线存储器控制器、外围总线和本地总线,系统总线23能够与任何其它的总线架构交互。系统存储器包括永久性存储器(ROM)24和随机存取存储器(Random-Access Memory,RAM)25。基本输入/输出系统(Basic Input/Output System,BIOS)26包括确保在个人计算机20的元件之间的信息传输的基本程序,例如在使用ROM 24加载操作系统时的那些基本程序。

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

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

计算机20具有保留所记录的操作系统35的文件系统36,并且还具有额外的程序应用37、其它程序模块38和程序数据39。用户能够通过使用输入设备(键盘40、鼠标42)将命令和信息输入到个人计算机20中。可以使用其它的输入设备(未示出):麦克风、操纵杆、游戏控制器、扫描器等等。这些输入设备通常通过串行端口46插入到计算机系统20中,串行端口46转而连接到系统总线,但是这些输入设备可以以其它的方式连接,例如在并行端口、游戏端口或通用串行总线(Universal Serial Bus,USB)的帮助下得以连接。监控器47或其它类型的显示设备也可以通过接口(例如视频适配器48)连接到系统总线23。除了监控器47,个人计算机还可以装备有其它的外围输出设备(未示出),例如扬声器、打印机等等。

个人计算机20能够使用与一个或多个远程计算机49的网络连接而工作在 网络环境中。一个或多个远程计算机49也是个人计算机或服务器,其具有在描述个人计算机20的性质时使用的上述元件中的大多数元件或全部元件,如图5所示。其它的设备也可以存在于计算机网络中,例如路由器、网站、对等设备或其它的网络节点。

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

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

在各个方面中,本发明中所描述的系统和方法可以按照模块来处理。本文所使用的术语“模块”指的是例如现实世界的设备、组件、或使用硬件(例如通过专用集成电路(Application Specific Integrated Circuit,ASIC)或现场可编程门阵列(Field-Programmable Gate Array,FPGA)实现的组件的布置,或者指的是硬件和软件的组合,例如通过微处理器系统和实现模块功能的指令组(该指令组(在被执行时)将微处理器系统转换成专用设备)来实现这样的组合。一个模块还可以被实施为两个模块的组合,其中单独地通过硬件促进某些功能, 并且通过硬件和软件的组合促进其它功能。在某些实现方式中,模块的至少一部分(以及在一些情况下,模块的全部)可以被执行在通用计算机(例如上文在图5中更详细描述的通用计算机)的处理器上。因此,每个模块可以以各种适合的配置来实现,而不应受限于本文所列举的任何特定的实现方式。

为了清楚起见,本文没有公开各个方面的所有例程特征。应当领会的是,在本发明的任何实际的实现方式的开发中,必须做出许多特定实现方式的决定,以便实现开发者的特定目标,并且这些特定目标将对于不同的实现方式和不同的开发者变化。应当理解的是,这种开发努力会是复杂的且费时的,但对于了解本发明的优点的本领域的普通技术人员来说仍然是工程的例行任务。

此外,应当理解的是,本文所使用的措辞或术语出于描述而非限制的目的,从而本说明书的术语或措辞应当由本领域技术人员根据本文所提出的教导和指导结合相关领域技术人员的知识来解释。此外,不旨在将本说明书或权利要求中的任何术语归于不常见的或特定的含义,除非明确如此阐述。

本文所公开的各个方面包括本文以说明性方式所引用的已知模块的现在和未来已知的等同物。此外,尽管已经示出并描述了各个方面和应用,但是对于了解本发明的优点的本领域技术人员将显而易见的是,在不脱离本文所公开的发明构思的前提下,相比于上文所提及的内容而言的更多的修改是可行的。

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