发明名称 一种Windows平台下检测虚拟机监视器存在的方法
摘要 本发明公开了一种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进行有效检测,提高系统安全性。
申请公布号 CN102063594B 申请公布日期 2012.08.22
申请号 CN201110003479.0 申请日期 2011.01.10
申请人 中国人民解放军国防科学技术大学 发明人 宁剑;刘波;陈林;肖枫涛;王天佐;陈新;张静;马晓龙;彭磊
分类号 G06F21/00(2006.01)I;G06F9/455(2006.01)I 主分类号 G06F21/00(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种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。
地址 410073 湖南省长沙市开福区德雅路109号