一种Windows平台下检测虚拟机监视器存在的方法转让专利

申请号 : CN201110003479.0

文献号 : CN102063594B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 宁剑刘波陈林肖枫涛王天佐陈新张静马晓龙彭磊

申请人 : 中国人民解放军国防科学技术大学

摘要 :

本发明公开了一种Windows平台下检测虚拟机监视器存在的方法,目的是针对恶意代码利用VMM作为隐藏自身行为与提供恶意服务的平台的问题,提出一种通过资源差异来检测VMM存在的方法。技术方案是:先给页表Allocated PTEs和页表项Special PTE分配内存空间;对Allocated PTEs写入更改映射前地址A;对Special PTE写入更改映射后地址B;对Allocated PTEs依次进行访问,使所有指向地址A的页表项都存入页表缓冲寄存器中;把Allocated PTEs指针内容依次改为Special PTE所指向的地址B;执行Windows系统中的特权指令RDMSR;设置计数器,遍历页表缓冲寄存器内的全部页表项,通过判定计数器的数值是否跟N一致来则判定当前系统内是否存在VMM。采用本发明可对VMM进行有效检测,提高系统安全性。

权利要求 :

1.一种Windows平台下检测虚拟机监视器VMM存在的方法,其特征在于包括以下步骤:第一步、根据页表缓冲寄存器大小N,通过Windows提供的函数Malloc()为页表项Allocated PTEs和Special PTE分配内存空间,Allocated PTEs为分配好内存空间且大小为N的一组页表项;Special PTE为分配好内存空间且大小为1的页表项;页表项是页表中的基本组成单位,其内容是当前页表项对应的物理地址;

第二步、对Allocated PTEs通过Windows提供的函数Memset()写入更改映射前地址A即页表项中存储的原始物理地址;对Special PTE写入更改映射后地址B,即页表项中存储的更改以后的物理地址;

第三步、对Allocated PTEs依次进行访问,使所有指向地址A的页表项都存入页表缓冲寄存器中,也就是说页表缓冲寄存器内全部的N条记录都指向更改映射前地址A;

第四步、在不改变页表缓冲寄存器内容的前提下,把Allocated PTEs指针内容依次改为Special PTE所指向的地址B;

第五步、执行Windows系统中的特权指令RDMSR,如果存在VMM,该指令引起系统控制权的下陷,即系统控制权转换给VMM;

第六步、设置一个计数器Counter,初始值为N;设置指针i,并使该指针指向页表缓冲寄存器的起始地址;

第七步、若i>=起始地址+N,转第十步;否则转第八步;

第八步、对指针i所指向的页表项内的指针地址进行判定:若当前页表项内的指针地址为更改映射前的地址A,i加1,转第七步;若当前页表项内的指针地址不为更改映射前的地址A,转第九步;

第九步、使计数器Counter数值减1,i加1,并转第七步;

第十步、判定计数器Counter的数值是否跟页表缓冲寄存器大小N一致,如果计数器Counter的数值为N,则判定当前系统内不存在VMM;如果计数器Counter的数值小于N,判定当前系统内存在VMM。

说明书 :

一种Windows平台下检测虚拟机监视器存在的方法

技术领域

[0001] 本发明涉及检测虚拟机监视器(VMM)存在的方法,尤指通过页表缓冲寄存器差异来检测虚拟机监视器存在的方法。

背景技术

[0002] 在硬件虚拟化技术中,虚拟机监视器(Virtual Machine Monitor,VMM)是能够为计算机系统创建高效、隔离的副本的软件。由于VMM具有比客户操作系统(Guest OS)更高的权限,越来越多的恶意代码利用VMM作为隐藏自身行为与提供恶意服务的平台。对于这种恶意代码的检测技术主要以检测VMM(Virtual Machine Monitor)存在特征为主,只有检测了VMM存在,才能以此作为检测这种新型恶意代码存在的重要依据之一。传统的检测VMM方法目前有以下几种:
[0003] (1)检测逻辑差异。逻辑指纹是指计算机物理硬件系统与虚拟化的硬件系统提供的不同接口之间的语义差异。检测逻辑差异就是通过发现运行环境与x86体系结构的差异来判断VMM的存在。但是,这种检测必须基于一个前提:虚拟机软件为了简化实现,只模拟了某一种能够支持虚拟机所有功能但是实现更为简便的芯片组,包括VMware Player和Microsoft Virtual PC等。一旦虚拟机软件精确模拟出相应的芯片组,这种检测方法将失效。
[0004] (2)RedPill。RedPill项目通过在用户模式运行一个单机语言指令SIDT,存储处理机寄存器里中断描述符列表寄存器(IDTR)的内容。通过判断IDTR的地址范围来确定当前操作系统是否运行在VMM之上。但是这种检测方法存在着局限性:对于VMM直接运行在硬件环境上的情况,VMM并不把IDTR重定位到一个新地址,从而也就无法区分当前操作系统的运行环境。
[0005] (3)检测时间差异。由于VMM需要通过某种特定的方式取得操作系统的控制权(通常通过捕获特权指令),当VMM对特权指令产生下陷并模拟整个特权指令的执行过程最终把正常执行结果返回操作系统,这一系列动作会对特权指令的执行产生一个延迟。这种方法就是通过检测特权指令在真实系统和VMM中执行时间的差异来判断VMM的存在。对于这种检测方法,部分VMM可以采取修改时间戳寄存器的方法避免检查,所以这种检测方法通用性不强。
[0006] 以上三种方法虽然各具特色,从不同方面提出了基于不同环境对于VMM的检测方法,但是三种方法受制于应用环境,通用性不强。
[0007] 对于检测VMM的方法,可以从VMM和客户操作系统之间共享的系统资源差异入手,因为无论VMM怎么隐蔽自己,它总会占用或者消耗系统的资源,例如处理器、物理内存和磁盘空间,可能还有网络带宽。基于这种资源共享构架,可以从这些资源差异中发现VMM的特性,作为检测VMM存在的方法,但目前还没有通过页表缓冲寄存器这种资源差异来检测VMM存在的技术方案的公开报导。

发明内容

[0008] 本发明要解决的技术问题在于:针对恶意代码利用VMM作为隐藏自身行为与提供恶意服务的平台的问题,提出一种通过资源差异来检测VMM存在的方法,使用户在通用环境下,实现对VMM存在的有效检测,从而以此作为检测以VMM为平台的恶意代码的重要依据,提高系统安全性。
[0009] 为了解决上述技术问题,本发明的技术方案为:以CPU中的页表缓冲寄存器为检测目标,为两个页表指针分别分配内存地址——更改映射前地址和更改映射后地址。通过修改页表项的指针地址,同时对页表缓冲寄存器的内容不进行更新。在检测程序产生一个特权指令之后,对目标页表缓冲寄存器进行检测,如果页表缓冲寄存器在特权指令执行期间被更改,则证明系统中存在VMM;反之,如果页表缓冲寄存器在特权指令运行前后没有变化,则证明系统中不存在VMM。
[0010] 定义:
[0011] A:更改映射前地址,即页表项中存储的原始物理地址。
[0012] B:更改映射后地址,即页表项中存储的更改以后的物理地址,明显区别于A。
[0013] N(N为正整数):页表缓冲寄存器大小。
[0014] PTE:Page Table Entry,页表项,指页表中的基本组成单位,其内容是当前页表项对应的物理地址。
[0015] Allocated PTEs:分配好内存空间且大小为N的一组页表项。
[0016] Special PTE:分配好内存空间且大小为1的页表项。
[0017] 具体技术方案为:
[0018] 第一步、根据页表缓冲寄存器大小N,通过Windows提供的函数Malloc()为Allocated PTEs分配内存空间。同时,为另一个页表项Special PTE分配内存空间,这个内存空间用于存放更改映射后地址B。
[0019] 第二步、对Allocated PTEs通过Windows提供的函数Memset()写入更改映射前地址A;对分配单独的页表Special PTE写入更改映射后地址B,用于区别更改映射之后页表缓冲寄存器的变化。
[0020] 第三步、对Allocated PTEs依次进行访问,将所有指向地址A的页表项都存入页表缓冲寄存器中,也就是说页表缓冲寄存器内全部的N条记录都指向更改映射前地址A。
[0021] 第四步、在不改变页表缓冲寄存器内容的前提下,把Allocated PTEs指针内容依次改为Special PTE所指向的地址B。通过改变虚拟地址到物理地址的映射,把Special PTE所指向的地址B存入Allocated PTEs的内存空间里,这个过程并不改变页表缓冲寄存器的内容。此时,页表缓冲寄存器内的指针地址A与实际页表项Allocated PTEs的指针地址B不一致。
[0022] 第五步、执行Windows系统中的特权指令RDMSR,如果存在VMM,该指令引起系统控制权的下陷,即系统控制权转换给VMM。
[0023] 第六步、设置一个计数器Counter,初始值为N;设置指针i,并使该指针指向页表缓冲寄存器的起始地址。
[0024] 第七步、若i >=起始地址+N,转第十步;否则转第八步。
[0025] 第八步、对指针i所指向的页表项内的指针地址进行判定:若当前页表项内的指针地址为更改映射前的地址A时,i加1,转第七步;否则转第九步。
[0026] 第九步、使计数器Counter数值减1,i加1,转第七步。
[0027] 第十步、对计数器Counter的数值进行判断:如果计数器Counter的数值为N,说明在特权指令RDMSR执行期间,页表缓冲寄存器没有被篡改,则判定当前系统内不存在VMM;如果计数器Counter的数值小于N,则说明在特权指令RDMSR执行期间,页表缓冲寄存器被使用过,判定当前系统内存在VMM,且计数器Counter的数值越小,检测的准确性越高。
[0028] 与现有技术相比,采用本发明可达到以下技术效果:
[0029] 1.本发明从操作系统与VMM共享资源页表缓冲寄存器入手,避免了传统基于时间检测和基于逻辑差异检测的局限性。无论VMM体积再怎么小巧,功能再怎么单一,都必须和操作系统争夺系统资源,因此本发明适用范围广,通用性较强。
[0030] 2.与现有针对内存或是通用寄存器的检测技术相比,本发明的检测目标为CPU内部的页表缓冲寄存器,避免了VMM对检测目标的恶意篡改,使得本发明可靠性和准确度有了大幅度提高。

附图说明

[0031] 图1为本发明的总流程图。

具体实施方式

[0032] 图1是本发明的总流程图。
[0033] 步骤1)、给大小为N的页表Allocated PTEs和另一个页表项Special PTE分配内存空间;
[0034] 步骤2)、对Allocated PTEs写入地址A,对Special PTE写入地址B; [0035] 步骤3)、依次读取大小为N的Allocated PTEs内容,使指向地址A的页表项被全部存入页表缓冲寄存器中;
[0036] 步骤4)、在不改变页表缓冲器内容的前提下,把Allocated PTEs指针内容依次改为Special PTE所指向的地址B;
[0037] 步骤5)、执行一个特权指令RDMSR;
[0038] 步骤6)、设置一个计数器,初始值为N,设置指针i,并使该指针指向页表缓冲寄存器的起始地址;
[0039] 步骤7)、若指针i已遍历页表缓冲寄存器内的全部页表项,则执行步骤10);否则执行步骤8)。
[0040] 步骤8)、对指针i所指向的页表项内的指针地址进行判定:若当前页表项内的指针地址为地址A时,i加1并执行步骤7),否则执行步骤9)。
[0041] 步骤9)、使计数器Counter数值减1,i加1并执行步骤7);
[0042] 步骤10)、判定计数器Counter的数值是否跟页表缓冲寄存器大小N一致。如果计数器Counter的数值为N,则判定当前系统内不存在VMM;如果计数器Counter的数值小于N,判定当前系统内存在VMM。