发明名称 一种应用程序关键数据保护系统及其保护方法
摘要 本发明公开了一种应用程序关键数据保护系统,包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器;宿主进程利用客户机操作系统访问计算机硬件,当需要关键数据保护时,向关键数据保护器发出请求,并在关键数据保护器控制下对关键数据执行读写操作;关键数据保护器运行在计算机硬件上,为宿主进程中的关键数据提供隔离保护环境,并对关键数据进行管理和访问处理。本发明还提供一种应用程序关键数据保护方法,包括:关键数据保护器的启动与初始化;关键数据注册;关键数据访问请求;关键数据保护器判断访问请求合法性;关键数据访问退出;关键数据注销。本发明能有效阻止操作系统内核级别的恶意攻击,为应用程序关键数据提供安全保护。
申请公布号 CN103699498B 申请公布日期 2016.08.31
申请号 CN201310606121.6 申请日期 2013.11.25
申请人 南京大学 发明人 曾庆凯;黄啸
分类号 G06F12/14(2006.01)I 主分类号 G06F12/14(2006.01)I
代理机构 南京瑞弘专利商标事务所(普通合伙) 32249 代理人 陈建和
主权项 一种应用程序关键数据保护方法,其特征在于基于应用程序关键数据保护系统,该系统包括宿主进程、客户机操作系统、计算机硬件和关键数据保护器;所述宿主进程利用客户机操作系统访问计算机硬件,当需要关键数据保护时,向关键数据保护器发出请求,并在关键数据保护器控制下对关键数据KD执行读写操作;所述关键数据保护器运行在计算机硬件上,为宿主进程中的关键数据KD提供隔离保护环境,并对关键数据KD进行管理和访问处理;保护方法包括如下步骤:(1)关键数据保护器的启动与初始化:关键数据保护器由Grub引导程序启动后,启用扩展页表EPT机制和VPID机制;(2)关键数据注册:宿主进程向关键数据保护器发出关键数据KD保护请求,并利用VMCALL超级调用指令注册关键数据KD,关键数据保护器设置关键数据KD的保护环境;(3)关键数据访问请求:宿主进程需要访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的访问请求;(4)关键数据保护器判断访问请求合法性;(5)关键数据访问退出:宿主进程退出访问关键数据KD时,通过VMCALL超级调用指令向关键数据保护器提出对关键数据KD的退出访问请求;(6)关键数据注销,宿主进程利用VMCALL超级调用指令向关键数据保护器发出关键数据注销请求,关键数据保护器注销关键数据KD的保护环境;所述步骤(1)中关键数据保护器的初始化包括如下步骤:(10)起始状态;(11)初始化用于连接所有safe_data结构的链表safe_link,所述safe_data结构唯一对应宿主进程中的关键数据KD,初始化的safe_link为仅包含头结点的空链表;(12)启用扩展页表EPT机制和VPID机制,将虚拟机控制块VMCS中Enable EPT位和Enable VPID位置1;(13)按照客户机Guest物理地址的大小设置全部的EPT表项,扩展页表EPT页面大小设为4KB,初始化全部EPT表项的READ、WRITE、EXECUTION位置1,保证客户机Guest物理地址与机器物理地址的恒等映射,并将EPT页表基地址存放到虚拟机控制块VMCS的EPTP字段,将关键数据保护器自身所在物理内存区域从EPT页表项中删去,以禁止外部组件访问关键数据保护器自身内容;(14)结束;所述步骤(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位清0,并保存获取的机器物理地址Haddr;(28)将当前地址Laddr设置为下一个页面的地址,转步骤25;(29)将宿主进程页表基地址cr3寄存器,以及宿主进程cs、ds、es、fs、gs段寄存器保存到safe_data结构体中;(2a)将safe_data结构加入到链表safe_link中;(2b)结束注册过程;(2c)传入的地址参数不合法,程序错误结束;所述步骤(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)错误结束,返回“否”的不合法结果。
地址 210093 江苏省南京市鼓楼区汉口路22号