一种应用程序关键数据保护系统及其保护方法

文档序号:6520541阅读:242来源:国知局
一种应用程序关键数据保护系统及其保护方法
【专利摘要】本发明公开了一种应用程序关键数据保护系统,包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器;宿主进程利用客户机操作系统访问计算机硬件,当需要关键数据保护时,向关键数据保护器发出请求,并在关键数据保护器控制下对关键数据执行读写操作;关键数据保护器运行在计算机硬件上,为宿主进程中的关键数据提供隔离保护环境,并对关键数据进行管理和访问处理。本发明还提供一种应用程序关键数据保护方法,包括:关键数据保护器的启动与初始化;关键数据注册;关键数据访问请求;关键数据保护器判断访问请求合法性;关键数据访问退出;关键数据注销。本发明能有效阻止操作系统内核级别的恶意攻击,为应用程序关键数据提供安全保护。
【专利说明】一种应用程序关键数据保护系统及其保护方法
【技术领域】
[0001]本发明涉及应用程序所使用的高安全要求的关键数据保护领域,尤其涉及一种不可信操作系统内核条件下的保护应用程序关键数据的虚拟机监控器实现及其关键数据保护方法。
【背景技术】
[0002]操作系统通常作为上层应用程序可信计算基的一部分,其安全性是可信执行环境的重要基础。但是,由于其庞大的代码规模和设计实现过程难于避免的缺陷,操作系统的安全性不能令人完全信任它。事实上,随着软件规模的不断增大,存在漏洞会更多。此外,云计算模式越来越普及,多用户共用同一个计算环境的情况下,用户对自身重要信息的保护的需求更加迫切。发展基于用户立场的数据保护技术,是非常必要的。计算机硬件虚拟化技术为此提供的较好的条件和基础。利用计算机硬件虚拟化技术,提供更为个性化的数据保护技术和方法,即使当操作系统被攻击时,也能够保证用户关键数据的保密性,具有现实意义。

【发明内容】

[0003]为了克服现有技术中存在的不足,本发明提供一种应用程序关键数据保护系统及其保护方法,阻止操作系统内核级别的恶意攻击,为应用程序关键数据提供安全保护。
[0004]为实现上述目的,本发明采取如下技术方案:
[0005]一种应用程序关键数据保护系统,包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器;
[0006]宿主进程利用客户机操作系统访问计算机硬件,当需要关键数据保护时,向关键数据保护器发出请求,并在关键数据保护器控制下对关键数据执行读写操作;
[0007]关键数据保护器运行在计算机硬件上,为宿主进程中的关键数据提供隔离保护环境,并对关键数据进行管理和访问处理。
[0008]一种应用程序关键数据保护方法,包括如下步骤:
[0009](I)关键数据保护器的启动与初始化:关键数据保护器由Grub (GRand UnifiedBootloader,一个多重启动管理器)引导程序启动后,并启用扩展页表EPT机制和intel的VPID (Virtual-Processor Identifier)技术,用于支持虚拟化环境;
[0010](2)关键数据注册:宿主进程向关键数据保护器发出关键数据保护请求,并利用VMCALL超级调用指令注册关键数据KD (key data),关键数据保护器设置关键数据KD的保护环境;
[0011](3)关键数据访问请求:宿主进程需要访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的访问请求;
[0012](4)关键数据保护器判断访问请求合法性;
[0013](5)关键数据访问退出:宿主进程退出访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的退出访问请求;
[0014](6)关键数据注销,宿主进程利用VMCALL超级调用指令向关键数据保护器发出关键数据注销请求,关键数据保护器注销关键数据KD的保护环境。
[0015]更进一步的,步骤(I)中关键数据保护器的初始化包括如下步骤:
[0016](10)起始状态;
[0017](11)初始化用于连接所有safe_data结构的链表safe_link, safe_data结构唯一对应宿主进程中的关键数据KD,初始化的safe_link为仅包含头结点的空链表;
[0018](12)启用扩展页表EPT机制和VPID机制,启用VPID的目的是为了减少不必要的TLB刷新将虚拟机控制块VMCS中Enable EPT位和Enable VPID位置I ;
[0019](13)按照客户机Guest物理地址的大小设置全部的EPT表项,扩展页表EPT页面大小设为4KB,初始化全部EPT表项的READ、WRITE、EXE⑶TION位置1,保证客户机Guest物理地址与机器物理地址的恒等映射,并将EPT页表基地址存放到虚拟机控制块VMCS的EPTP字段,将关键数据保护器自身所在物理内存区域从EPT页表项中删去,以禁止外部组件访问关键数据保护器自身内容;
[0020](14)结束。
[0021]更进一步的,步骤(2)中关键数据保护器注册关键数据KD包括如下步骤:
[0022](20)起始状态;
[0023](21)验证VMCALL超级调用指令传递参数的合法性,即判断关键数据KD的起始地址start和结束地址end是否处在其宿主进程地址空间里面,并且start〈end,若传递参数合法,转入步骤22,否则转入步骤2c的错误处理;
[0024](22)动态产生safe_data结构,用于保存宿主进程注册的关键数据KD信息,所述关键数据KD信息包括关键数据KD的起始地址start和结束地址end、所占用的内存页面数num、页面对应的Guest物理地址、宿主进程页表基地址cr3寄存器、宿主进程cs、ds、es、fs、gs段寄存器以及该关键数据KD所处状态;
[0025](23)safe_data结构保存关键数据KD起始地址start、结束地址end、所需内存页面数num,并将关键数据KD起始地址start转换为页对齐;
[0026](24)设置循环起始状态,将关键数据KD起始地址start设为当前地址Laddr ;
[0027](25)判断Laddr是否大于等于结束地址end,若是,则所有页面处理完成,跳转到步骤29,循环结束;否则进入循环体,转步骤26 ;
[0028](26)使用Laddr查询宿主进程的Guest页表,获取对应Guest物理地址Paddr并保存到safe_data结构体中;
[0029](27)使用Paddr遍历EPT页表,将对应EPT表项的READ、WRITE、EXECUTE位清0,并保存获取的机器物理地址Haddr ;
[0030](28)将当前地址Laddr设置为下一个页面的地址,转步骤25 ;
[0031](29)将宿主进程页表基地址cr3寄存器,以及宿主进程cs、ds、es、fs、gs段寄存器保存到safe_data结构体中;
[0032](2a)将 safe_data 结构加入到链表 safe_link 中;
[0033](2b)结束注册过程;
[0034](2c)传入的地址参数不合法,程序错误结束。[0035]更进一步的,步骤(4)中关键数据保护器判断访问请求合法性包括如下步骤:
[0036](40)起始状态;
[0037](41)遍历safe_data链表,根据VMCALL超级调用指令传递参数查找对应的safe_data结构,判断safe_data结构保存的宿主进程页表基地址cr3寄存器值和虚拟机控制块VMCS中的Guest cr3寄存器值相同,并且该safe_data结构中保存的起始地址start和结束地址end同VMCALL超级调用传递的起始地址start和结束地址end相同;若找到,进入步骤42,否则转步骤45 ;
[0038](42 )根据关键数据KD所占的内存页面数num判断关键数据KD所占页面物理地址是否被篡改,即比较关键数据KD在当前客户机Guest的物理地址同注册时保存的物理地址是否相同,若不同,跳转到步骤45错误结束;若全部相同,则转到步骤43 ;
[0039](43)判断cs、ds、ss、fs、gs段寄存器基地址是否等于注册关键数据KD时保存在safe_data结构体中的值,若相同,贝U转到步骤44 ;否贝U,转到步骤45 ;
[0040](44)访问请求有效,返回“是”的合法结果;
[0041](45)错误结束,返回“否”的不合法结果。
[0042]更进一步的,步骤(3)中关键数据访问请求包括如下步骤:
[0043](30)起始状态;
[0044](31)依据步骤40至步骤45判断访问请求是否合法,若返回“否”的不合法结果,则转到步骤35,否则转步骤32 ;
[0045](32)修改EPT表项,将关键数据KD所对应EPT表项的READ、WRITE置I ;
[0046](33)关中断,使得在宿主进程访问关键数据KD期间内,无法被中断;
[0047](34)正常结束,状态为合法的访问;
[0048](35)结束,状态为不可访问。
[0049]更进一步的,步骤(5)中关键数据访问请求包括如下步骤:
[0050](50)起始状态;
[0051](51)依据步骤40至步骤45判断访问请求是否合法,若返回“否”的不合法结果,则转到步骤55,否则转步骤52 ;
[0052](52)修改EPT表项,将关键数据KD所对应EPT表项的READ、WRITE、EXECUTION均置O ;、
[0053](53)开中断,恢复操作系统以及应用程序的正常执行;
[0054](54)正常结束,退出完成;
[0055](55)错误结束。
[0056]更进一步的,步骤(6)中关键数据注销包括如下步骤:
[0057](60)起始状态;
[0058](61)根据当前宿主进程的cr3寄存器、VMCALL传递的起始地址start和结束地址end在safe_link链表中查找对应的safe_data结构,若存在,跳转到步骤62,否则跳转到步骤67 ;
[0059](62)判断关键数据KD所占页面是否都处理完成,若是,则转到步骤65,否则转到步骤63 ;
[0060](63)将关键数据KD的页面清零;[0061](64)将关键数据KD对应的EPT页表项READ、WRITE、EXECUTE位置1,将该关键数据KD所占页面设为空闲页面,客户机操作系统可对其再使用;
[0062](65)关键数据KD所有页面处理完成,将safe_data从safe_link链表上取下,并释放其所占内存空间;
[0063](66)关键数据注销过程结束;
[0064](67)错误结束。
[0065]有益效果:(I)本发明提供的关键数据保护系统及其保护方法基于硬件虚拟化技术Intel-VT机制。在这个系统中,所有用户应用程序工作在操作系统之上,普通的资源访问由操作系统支持,对于关键数据的访问,由关键数据保护器实施隔离保护、控制使用,使得操作系统对于关键数据也不能任意的访问,从而保护其安全性;(2)本发明提供的关键数据保护器为一个轻量级虚拟机监控器,仅仅是为了给关键数据提供一个隔离保护环境,而无需其他的虚拟化特征,关键数据保护器几乎不设置虚拟机控制块VMCS中的执行控制域,仅仅启用扩展页表EPT机制,通过EPT页表控制客户机对物理内存的访问,使关键数据保护器的保护过程安全高效。
【专利附图】

【附图说明】
[0066]图1为关键数据保护器结构示意图。
[0067]图2为关键数据保护方法流程图。
[0068]图3为关键数据保护器初始化流程图。
[0069]图4为关键数据注册流程图。
[0070]图5为关键数据注销流程图。
[0071]图6为关键数据访问请求流程图。
[0072]图7为判断请求合法性流程图。
[0073]图8为关键数据访问退出流程图。
【具体实施方式】
[0074]下面结合附图对本发明作更进一步的说明。
[0075]如图1所示,本发明提供的一种应用程序关键数据保护系统,包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器,其中关键数据所属的应用程序,称为宿主进程,当没有关键数据保护需求时,宿主进程以正常方式工作,利用客户机操作系统访问计算机硬件,当需要高安全关键数据保护时,宿主进程中包含了关键数据KD,向关键数据保护器发出请求,并经过关键数据保护器允许后对关键数据KD进行读写;关键数据保护器是本系统的核心组件,为关键数据KD提供隔离保护环境,为一个轻量级虚拟机监控器,对关键数据KD实施全程管理,关键数据保护器主要包含两部分功能:(I)关键数据管理,按照宿主进程发出的请求,处理关键数据KD的注册、注销请求;(2)关键数据访问处理,接受宿主进程对关键数据KD的访问请求以及退出通知,并作对应处理,保证宿主进程对关键数据KD的安全访问,同时需要处理非法访问。
[0076]关键数据为安全应用程序的一部分数据;运行时,占用宿主进程的一段地址空间。对于宿主进程,关键数据保护不是必须的,由宿主进程来选择是否使用关键数据保护机制。宿主进程在读写关键数据内容时,都要主动请求关键数据保护器以获得允许,关键数据保护器验证请求访问并做相应处理,从而保证关键数据的安全属性不被破坏。
[0077]关键数据保护器作为一个虚拟机监控器,由Grub引导启动,直接运行在计算机硬件上。在关键数据保护器系统启动之后,运行Grub和客户机操作系统内核。为了保证自身的安全启动,关键数据保护器系统在启动时使用Intel TXT的GETSEC指令进行可信启动。关键数据保护器仅仅是为了给关键数据提供一个隔离保护环境,而无需其他的虚拟化特征。关键数据保护器几乎不设置虚拟机控制块VMCS中的执行控制域,仅仅启用扩展页表EPT机制,通过EPT页表控制客户机对物理内存的访问。EPT页表项中的READ、WRITE、EXECUTION位反映了该表项所指物理内存页面的读、写以及可执行权限,这是关键数据保护的基本需要。
[0078]为了管理应用程序的关键数据,关键数据保护器为每个关键数据KD产生对应的数据结构safe_data。safe_data与存储系统中的关键数据KD唯一对应,其中记录了关键数据KD宿主进程的页表基地址、段寄存器、关键数据KD在宿主进程地址空间中的起始和结束地址以及对应的客户机物理地址。这些信息唯一地标识了一个受到保护的关键数据KD。关键数据保护器通过链表safe_link来存放和管理所有的safe_data结构。
[0079]如图2所示,本发明提供的一种应用程序关键数据保护方法,包括关键数据保护器初始化流程图,关键数据注册流程图,关键数据注销流程图,关键数据访问请求流程图,判断请求合法性流程图和关键数据访问退出流程图。
[0080]其中,图3为关键数据保护器初始化流程图。步骤20为起始状态;步骤21初始化用于连接所有safe_data结构的链表safe_link,初始化的safe_link为仅包含头结点的空链表;步骤 22 启用 EPT 机制和 VPID 机制,intel 的 VPIDC Virtual-Processor Identifier)技术,用于支持虚拟化环境,启用VPID的目的是为了减少不必要的TLB刷新,以提高系统性能,将虚拟机控制块VMCS中Enable EPT位和Enable VPID位置I ;步骤23按照客户机Guest物理地址的大小,设置全部的EPT表项。其中,页面大小为4KB,初始化全部EPT表项的READ、WRITE、EXE⑶TION位置1,保证客户机物理地址与机器物理地址的恒等映射,并将EPT页表基地址存放到VMCS的EPTP字段,将关键数据保护器自身所在物理内存区域从EPT页表项中删去,以禁止外部组件访问关键数据保护器自身内容;步骤24结束。初始化完成,等待客户机操作系统启动运行。
[0081]关键数据保护器初始化之后,就具备了为宿主进程保护关键数据KD的功能,宿主进程具有保护需求时,通过注册关键数据KD来设置关键数据KD的保护环境。在程序结束之前,需要注销关键数据KD。具体的注册和注销过程是由宿主进程使用超级调用来进行。在Intel VT-x下,超级调用利用了 VMCALL指令,为此,本发明提供如下两个超级系统调用:(1)VMCALL_REGIST:用于注册关键数据KD。调用参数包括VMCALL_REGIST,以及关键数据KD的起始地址start和结束地址end。(2)VMCALL_UNREGIST:用于注销关键数据KD。调用参数包括VMCALL_UNREIST,以及关键数据KD的起始地址start和结束地址end。当宿主进程调用超级系统调用时,处理器会陷入关键数据保护器中,关键数据保护器根据具体的参数信息对超级系统调用进行处理。
[0082]图4为关键数据注册的执行流程图。该过程主要是对关键数据KD存储地址[start, end]对应的物理内存进行检查,将EPT的相应表项READ、WRITE、EXECUTION位置0,此外,需要动态产生一个新的safe_data结构体来管理该关键数据KD。系统中可以同时保护多个关键数据KD,一个宿主进程可以同时注册多个关键数据KD,因此需要一种标识机制来标识关键数据KD。关键数据保护器中用宿主进程地址空间的页表基址cr3和关键数据KD的起止结束地址[start,end]来标识一个关键数据KD,并且根据关键数据KD所对应的物理内存进行保护。在注册阶段,关键数据保护器记录关键数据KD标识与主机物理内存的对应关系,并保证该对应关系在关键数据KD的生命周期中保持不变。具体步骤如下:步骤30为起始状态;步骤31验证VMCALL传递参数的合法性,参数的合法性,指关键数据KD的起始地址start和结束地址end是否处在其宿主进程地址空间里面,并且start〈end,若合法,转入步骤32,否则转入步骤3c的错误处理;步骤32中动态产生safe_data结构,用于保存宿主进程注册的关键数据KD信息,关键数据KD信息包括关键数据KD的起始和结束地址、所占用的内存页面数num、页面对应的Guest物理地址、宿主进程页表基地址、宿主进程相应段寄存器以及该关键数据KD所处状态等;步骤33中safe_data结构保存关键数据KD起始地址、结束地址、所需页面数num,关键数据KD起始地址应转换为页对齐;步骤34中设置循环起始状态,关键数据KD起始地址start设为当前地址Laddr ;步骤35中判断Laddr是否大于等于结束地址end,若是,则所有页面处理完成,跳转到步骤39,循环结束;否则进入循环体,转步骤36 ;步骤36使用Laddr查询宿主进程的Guest页表,获取对应Guest物理地址Paddr并保存到safe_data中;步骤37使用Paddr遍历EPT页表,将对应EPT表项的READ、WRITE、EXECUTE位清0,并保存获取的机器物理地址Haddr ;步骤38将当前地址Laddr设置为下一个页面的地址,转步骤35 ;步骤39保存宿主进程页表基地址cr3寄存器,保存宿主进程cs、ds、es、fs、gs段寄存器到safe_data结构;步骤3a将safe_data结构加入到链表safe_link中;步骤3b结束注册过程;步骤3c传入的地址参数不合法,程序错误结束。
[0083]图5为关键数据注销的执行流程图。该过程首先检查关键数据KD地址[start, end]是否对应着一个关键数据KD,若对应则将该关键数据KD对应的物理内存清空,将EPT相应页表项设置READ、WRITE置1,释放对应的safe_data。步骤40为起始状态;步骤41通过当前宿主进程的cr3寄存器,VMCALL传递的start、end在safe_link链表中查找对应的safe_data结构,若存在,跳转到步骤42进行下一步处理,否则,跳转到步骤47 ;步骤42判断关键数据KD所占页面是否都处理完成,是则转步骤45,否则转步骤43 ;步骤43将关键数据KD的页面清零;步骤44对应的EPT页表项READ,WRITE, EXE⑶TE位置1,该关键数据KD所占页面为空闲页面,客户机操作系统可对其再使用;步骤45中所有页面处理完成,将safe_data从safe_link链表上取下,并释放其所占内存空间;步骤46关键数据注销过程结束;步骤47错误结束。
[0084]当宿主进程需要访问关键数据KD时,通过指定接口提出对关键数据KD的访问申请,然后可以访问关键数据KD ;当关键数据KD访问完成后,应用程序通知关键数据保护器退出访问。关键数据KD的访问和退出访问是由宿主进程主动发出请求,通过超级调用方式进行。为此,提供如下两个关键数据KD访问的超级调用:(1)VMCALL_ACCESS:用于请求访问关键数据KD。调用参数包括VMCALL_ACCESS,以及关键数据KD的起始地址start和结束地址end。(2)VMCALL_EXIT:用于告知关键数据访问退出。调用参数包括VMCALL_EXIT,以及关键数据KD的起始地址start和结束地址end。当宿主进程调用上面两个超级系统调用时,关键数据保护器根据具体的参数信息对该超级系统调用进行处理。而其他任何对关键数据KD的非法访问都会产生违反EPT的页面访问权限,被识别为恶意行为。在虚拟化环境中,对物理内存的访问是由EPT控制的。因此,宿主进程发出VMCALL_ACCESS超级调用后,将关键数据KD所在物理内存空间对应的EPT表项的Read、Write位置1,使得宿主进程可以对关键数据KD的内容进行读写。当宿主进程退出对关键数据KD部分的访问时,将关键数据KD模块的EPT置为禁止对关键数据KD的读写执行访问。
[0085]图6为关键数据KD的访问请求的处理流程图。步骤50为起始;步骤51判断访问请求是否合法,访问请求合法性判断具体过程在图6中描述,若非法,则转到步骤55,否则转步骤52 ;步骤52修改设置EPT页表项,将关键数据KD所对应EPT页表项的READ、WRITE置I ;步骤53关中断,使得在宿主进程访问关键数据KD期间内,无法被中断;步骤54正常结束,可合法的访问;步骤55结束,状态为不可访问。
[0086]图7为判断请求合法性的流程图。步骤60为起始步骤;步骤61遍历safe_data链表,根据VMCALL超级调用指令传递参数查找合适的safe_data结构,当且仅当其保存的cr3值和VMCS中的Guest cr3值相同并且该safe_data结构中保存的起始结束地址同VMCALL_ACCESS超级调用的调用参数相同。若找到,进入步骤62,否则转步骤65 ;步骤62对关键数据KD所占的页面,比较其当前Guest物理地址同注册时保存的地址是否相同,若不同,跳转到步骤65错误结束;若全部相同,则转到步骤63 ;步骤63判断cs、ds、ss.fs.gs段寄存器基地址是否等于注册关键数据KD时保存在safe_data中的值,若相同,则转到步骤64 ;否贝U,转到步骤65 ;步骤64访问请求有效,返回“是”的合法结果;步骤65错误结束,返回“否”的不合法结果。
[0087]图8为关键数据访问退出的处理流程图。当宿主进程结束对关键数据KD的访问时,需要主动通过VMCALL告知关键数据保护器,关键数据保护器的处理流程如下:步骤70为起始;步骤71判断访问请求是否合法,访问请求合法性判断具体过程在图6中描述;若非法,则转到步骤75,否则转步骤72 ;步骤72修改设置EPT页表项,将关键数据KD所对应EPT页表项的READ、WRITE、EXE⑶TION均置O ;步骤73开中断,恢复操作系统以及应用程序的正常执行;步骤74正常结束,退出完成;步骤75错误结束。
[0088]以上所述仅是本发明的优选实施方式,应当指出:对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.一种应用程序关键数据保护系统,其特征在于:该系统包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器; 所述宿主进程利用客户机操作系统访问计算机硬件,当需要关键数据保护时,向关键数据保护器发出请求,并在关键数据保护器控制下对关键数据KD执行读写操作; 所述关键数据保护器运行在计算机硬件上,为宿主进程中的关键数据KD提供隔离保护环境,并对关键数据KD进行管理和访问处理。
2.一种应用程序关键数据保护方法,其特征在于包括如下步骤: (O关键数据保护器的启动与初始化:关键数据保护器由Grub引导程序启动后,启用扩展页表EPT机制和VPID机制; (2)关键数据注册:宿主进程向关键数据保护器发出关键数据KD保护请求,并利用VMCALL超级调用指令注册关键数据KD,关键数据保护器设置关键数据KD的保护环境; (3)关键数据访问请求:宿主进程需要访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的访问请求; (4)关键数据保护器判断访问请求合法性; (5)关键数据访问退出:宿主进程退出访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的退出访问请求; (6)关键数据注销,宿主进程利用VMCALL超级调用指令向关键数据保护器发出关键数据注销请求,关键数据保护器注销关键数据KD的保护环境。
3.根据权利要求2所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(1)中关键数据保护器的初始化包括如下步骤:` (10)起始状态; (11)初始化用于连接所有safe_data结构的链表safe_link,所述safe_data结构唯一对应宿主进程中的关键数据KD,初始化的safe_link为仅包含头结点的空链表; (12)启用扩展页表EPT机制和VPID机制,将虚拟机控制块VMCS中EnableEPT位和Enable VPID 位置 I ; (13)按照客户机Guest物理地址的大小设置全部的EPT表项,扩展页表EPT页面大小设为4KB,初始化全部EPT表项的READ、WRITE、EXE⑶TION位置1,保证客户机Guest物理地址与机器物理地址的恒等映射,并将EPT页表基地址存放到虚拟机控制块VMCS的EPTP字段,将关键数据保护器自身所在物理内存区域从EPT页表项中删去,以禁止外部组件访问关键数据保护器自身内容; (14)结束。
4.根据权利要求3所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(2)中关键数据保护器注册关键数据KD包括如下步骤: (20)起始状态; (21)验证VMCALL超级调用指令传递参数的合法性,即判断关键数据KD的起始地址start和结束地址end是否处在其宿主进程地址空间里面,并且start〈end,若传递参数合法,转入步骤22,否则转入步骤2c的错误处理; (22)动态产生safe_data结构,用于保存宿主进程注册的关键数据KD信息,所述关键数据KD信息包括关键数据KD的起始地址start和结束地址end、所占用的内存页面数num、页面对应的Guest物理地址、宿主进程页表基地址cr3寄存器、宿主进程cs、ds、es、fs、gs段寄存器以及该关键数据KD所处状态; (23)safe_data结构保存关键数据KD起始地址start、结束地址end、所需内存页面数num,并将关键数据KD起始地址start转换为页对齐; (24)设置循环起始状态,将关键数据KD起始地址start设为当前地址Laddr; (25)判断Laddr是否大于等于结束地址end,若是,则所有页面处理完成,跳转到步骤29,循环结束;否则进入循环体,转步骤26 ; (26)使用Laddr查询宿主进程的Guest页表,获取对应Guest物理地址Paddr并保存到safe_data结构体中; (27)使用Paddr遍历EPT页表,将对应EPT表项的READ、WRITE、EXECUTE位清O,并保存获取的机器物理地址Haddr ; (28)将当前地址Laddr设置为下一个页面的地址,转步骤25; (29)将宿主进程页表基地址cr3寄存器,以及宿主进程cs、ds、es、fs、gs段寄存器保存到safe_data结构体中; (2a)将safe_data结构加入到链表safe_link中; (2b)结束注册过程; (2c)传入的地址参数不合法 ,程序错误结束。
5.根据权利要求4所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(4)中关键数据保护器判断访问请求合法性包括如下步骤: (40)起始状态; (41)遍历safe_data链表,根据VMCALL超级调用指令传递参数查找对应的safe_data结构,判断safe_data结构保存的宿主进程页表基地址cr3寄存器值和虚拟机控制块VMCS中的Guest cr3寄存器值相同,并且该safe_data结构中保存的起始地址start和结束地址end同VMCALL超级调用传递的起始地址start和结束地址end相同;若找到,进入步骤42,否则转步骤45 ; (42 )根据关键数据KD所占的内存页面数num判断关键数据KD所占页面物理地址是否被篡改,即比较关键数据KD在当前客户机Guest的物理地址同注册时保存的物理地址是否相同,若不同,跳转到步骤45错误结束;若全部相同,则转到步骤43 ; (43)判断CS、dS、SS、fS、gS段寄存器基地址是否等于注册关键数据KD时保存在safe_data结构体中的值,若相同,则转到步骤44 ;否则,转到步骤45 ; (44)访问请求有效,返回“是”的合法结果; (45)错误结束,返回“否”的不合法结果。
6.根据权利要求5所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(3)中关键数据访问请求包括如下步骤: (30)起始状态; (31)依据步骤40至步骤45判断访问请求是否合法,若返回“否”的不合法结果,则转到步骤35,否则转步骤32 ; (32)修改EPT表项,将关键数据KD所对应EPT表项的READ、WRITE置I; (33)关中断,使得在宿主进程访问关键数据KD期间内,无法被中断;(34)正常结束,状态为合法的访问; (35)结束,状态为不可访问。
7.根据权利要求5所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(5)中关键数据访问退出包括如下步骤: (50)起始状态; (51)依据步骤40至步骤45判断访问请求是否合法,若返回“否”的不合法结果,则转到步骤55,否则转步骤52 ; (52)修改EPT表项,将关键数据KD所对应EPT表项的READ、WRITE、EXECUTION均置 O;、 (53)开中断,恢复操作系统以及应用程序的正常执行; (54)正常结束,退出完成; (55)错误结束。
8.根据权利要求4所述的一种应用程序关键数据保护方法,其特征在于:所述步骤(6)中关键数据注销包括如下步骤: (60)起始状态; (61)根据当前宿主进程的cr3寄存器、VMCALL传递的起始地址start和结束地址end在safe_link链表中查找对应的safe_data结构,若存在,跳转到步骤62,否则跳转到步骤.67 ; (62)判断关键数据KD所占页面是否都处理完成,若是,则转到步骤65,否则转到步骤.63 ; (63)将关键数据KD的页面清零; (64)将关键数据KD对应的EPT页表项READ、WRITE、EXECUTE位置1,将该关键数据KD所占页面设为空闲页面,客户机操作系统可对其再使用; (65)关键数据KD所有页面处理完成,将safe_data结构从safe_link链表上取下,并释放其所占内存空间; (66)关键数据注销过程结束; (67)错误结束。
【文档编号】G06F12/14GK103699498SQ201310606121
【公开日】2014年4月2日 申请日期:2013年11月25日 优先权日:2013年11月25日
【发明者】曾庆凯, 黄啸 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1