Linux操作系统内存页面即时加解密方法和系统与流程

文档序号:12887539阅读:318来源:国知局
Linux操作系统内存页面即时加解密方法和系统与流程
本发明涉及内存页面加解密
技术领域
,特别是涉及一种linux操作系统内存页面即时加解密方法和系统。
背景技术
:为了保护数据在磁盘中的安全,人们设计和实现的文件加密技术。为了保护数据在通信网络中的安全,数据被加密后再发送。然而,由于处理器处理的需求,在内存中的数据始终以明文形式存在,这就给攻击者提供了便利。自然的,人们希望存在能够直接处理密文的处理器。但是目前并不存在这样的商用处理器,而且由于使用者查看和编辑的需求,有的秘密信息必须以明文形式展示给使用者。目前,诸如linux等主流商用操作系统并不支持对内存页面进行加密。由于现有处理器都无法访问处于密文状态的数据或指令,使得在内存中的页面均处于明文状态。这就给攻击者窃取用户的敏感信息提供了方便。一旦攻击者进入操作系统,就可以通过扫描内存来查找感兴趣的敏感信息,从而绕开文件加密、通信加密等安全手段。为了减少内存数据泄露的风险,一种典型的方法是操作系统在内存中“锁”住存有秘密的内存页面,避免页面被换到磁盘,但是内存数据仍然是明文,存在被窃取的风险。内存数据的安全问题急待解决。针对这一问题,存在一些解决方案。从硬件上来看,典型的有aegis和xomos。两者的核心思想类似,都是在处理器层面上寻求解决方案。就aegis而言,它希望存在一个具备数据加解密和完整性验证功能的处理器,所有指令和数据在离开处理器之后,均被加密并生成完整性指纹,当处理器处理密文状态的指令和数据时,会首先完成完整性验证和解密操作,续而再完成具体的操作。这样,明文状态的数据和指令就始终处于处理器内部,攻击者只有进入处理器才能窃取信息,而这无疑增加了攻击者的难度。然而遗憾的是,虽然aegis和xomos的影响巨大,但是它们都仅仅是实验室成果,并没有得到市场的广泛认可。一些软件的解决方案主要是利用新的特权软件,典型的是虚拟机监控器。由于虚拟机客户机运行在虚拟机监控器之上,只有通过虚拟机监控器才能访问硬件,所以在虚拟机监控器上可以截获操作系统对内存硬件的一切访问。这样就可以实现:访问前解密、访问后加密的目的,典型的案例如sp3,其系统架构如图1所示,此时,操作系统不再与硬件直接交互,而是由虚拟机监控器完成与硬件的交互,操作系统需要经过虚拟机监控器才能访问硬件。sp3就是在虚拟机监控器层面增加安全机制来实现对内存页面访问操作的控制。不被处理器访问的内存页面均以密文形式存在,只有在处理器访问时才会解密供处理器使用。但是这样的方案最明显的限制是必须依赖虚拟机监控器的支持,而虚拟机监控器本身就消耗了系统的性能开销,从而极大的影响了系统的整体性能。其次,操作系统内核安全性往往仍然影响了机制本身的可信,由于安全解决方案力求对操作系统透明,在不修改操作系统的前提下达到安全目的,这就使得安全解决方案不够彻底,恶意操作系统内核仍然可能窃取秘密数据。技术实现要素:针对秘密信息在内存中始终以明文状态存在的问题,在不过多损耗计算机性能以及不依赖特殊硬件的前提下,本发明提供一种linux操作系统内存页面即时加解密方法和系统,在页面访问前解密,在页面访问后加密,从而减少秘密数据的暴露时间,使秘密信息主要以密文的形式存在于内存中,从而减少秘密信息泄漏的风险。为了实现上述目的,本发明采用以下的技术方案:本发明提供一种linux操作系统内存页面即时加解密方法,包括以下步骤:步骤1,页面标识页面标识包括保护页面标识和受限状态标识;保护页面标识用于操作系统识别需要保护的页面,分为动态实时页面标识和静态预页面标识两种情况;受限状态标识用于操作系统识别保护页面的明密文状态;步骤2,页面解密处理器在访问某个地址之前,检查目标地址所在页面是否在内存中,即缺页检查,如果目标地址所在页面在内存中,操作系统检查处理器所要访问地址所在页面是否为受限页面,如果处理器所要访问地址所在页面为受限页面,那么处理器无法直接访问,操作系统发出访问受限页面中断,将受限页面转换为非受限页面,完成对受限页面的解密操作;步骤3,页面加密在内核中增设页面加密服务例程,由该页面加密服务例程周期性检查和批量加密非受限页面,即定时对所有非受限页面进行检查,如果存在非受限页面长时间不被处理器所访问,再对其进行加密,将其转换为受限页面。进一步地,所述步骤1中动态实时页面标识是指进程根据需要动态向操作系统申请保护页面,以便存储秘密信息,动态实时页面标识是由申请保护页面的函数接口ppmalloc和取消保护页面的函数接口ppfree实现的,具体为:ppmalloc是在传统c库函数malloc的基础上增加了页面标识功能,具体来说,ppmalloc首先利用传统的malloc函数申请相应的存储空间,然后利用新增系统调用ppset来标识malloc函数申请的页面;ppfree是在传统c库函数free的基础上增加了页面标识功能,其目的是取消ppmalloc函数所申请的保护页面;ppset系统调用根据所给的首地址以及存储空间范围大小,标识所涵盖的页面为保护页面或者取消保护页面的标识。进一步地,所述步骤1中静态预页面标识是指在程序装入内存前就提前对需要保护的秘密数据所在页框进行标识,具体为:对linux操作系统的elf文件格式进行解析,将秘密数据所在位置进行标识,并将标识结果存储于附属的标识文件,当ppexec系统调用装载程序时,将标识文件装载入内核形成标识数据;为了标识进程对应的页表中相应的标志字,增加缺页中断服务程序的工作内容,要求缺页中断在装载页面的同时也更新页面对应页表项的标志字。进一步地,所述步骤2中访问受限页面中断的具体工作流程为:步骤2.1,中断服务程序读取产生中断的目标地址,查获目标地址所在页面所对应的页表项;步骤2.2,中断服务程序读取目标页面的内容,对其进行解密,将受限页面转换为非受限页面;步骤2.3,中断服务程序查获目标页面所对应的页表项的标志字,更新该页面对应页表项的标志字,当中断服务程序返回后,处理器直接访问该页面。进一步地,所述步骤3中页面加密服务例程周期性检查和批量加密非受限页面的具体过程为:内核维护一个非受限页面单链表,当受限页面转换为非受限页面后,内核将在非受限页面单链表中增加一个新的节点,记录新增加非受限页面的基本信息,页面加密服务例程周期性检查该单链表,检查页表项以及页面访问信息,得到待加密非受限页面集,页面加密服务例程将加密待处理的非受限页面转换为受限页面,然后更新对应页面的页表项标志字,最后从非受限页面单链表中删除该节点。进一步地,所述页面加密服务例程采用最近最久未使用算法来筛选待处理的非受限页面集,最近最久未使用是指从若干页面中挑选最近一段时间最久没有使用的页面。本发明还提供一种linux操作系统内存页面即时加解密系统,包括用户接口和内核,用户接口经过系统调用向内核提出服务请求,所述内核包括页面标识单元、页面加密单元和页面解密单元;页面标识单元,用于标识需要保护的页面或者取消需要保护的页面;页面加密单元,用于页面暂时不被访问时,对保护页面进行加密操作;页面解密单元,用于在页面被处理器访问时,及时对保护页面进行解密操作。进一步地,所述页面标识单元包括保护页面标识单元和受限状态标识单元;保护页面标识单元用于操作系统识别需要保护的页面;受限状态标识单元用于操作系统识别保护页面的明密文状态。与现有技术相比,本发明具有以下优点:本发明在不依赖特殊硬件以及虚拟机监控器支持,通过改造linux操作系统内核,在不过多牺牲系统整体性能的原则和影响处理器访问页面内容的前提下,为进程提供页面粒度的加解密服务,使被保护的页面只有处理器访问前以及访问后一定时间内呈明文状态,从而减少内存中秘密数据暴露的风险。附图说明图1是引入sp3的系统架构框图;图2是本发明一种linux操作系统内存页面即时加解密方法的流程示意图;图3是现有技术页面内的秘密信息始终以明文形式存在的工作原理图;图4是本发明页面内的秘密信息处于明密文状态的工作原理图;图5是动态实时页面标识流程示意图;图6是实施例一x86处理器使用的页表项;图7是静态预页面标识流程示意图;图8是访问受限页面中断流程示意图;图9是页面加密服务例程工作流程图;图10是本发明一种linux操作系统内存页面即时加解密系统的结构示意图;图11是非受限页面与受限页面状态转换示意图。具体实施方式为了便于理解,对本发明中出现的部分名词作以下解释说明:局部性原理:所谓局部性原理是指处理器存取数据或指令时,往往总是集中于一小片连续区域。由于局部性原理及性能考虑,本发明并不会在页面数据被使用后立即加密,而是待处理器一定时间内不再访问该页面后再进行加密。lru算法:lru是leastrecentlyused的缩写,即最近最久未使用,可用于页面置换算法,当内存无法容纳新的页面时,系统将从现有页面中选取最近最久没有使用的页面,将其替换出内存,用于容纳新的页面。本发明也将借鉴lru算法,将长时间不再访问的受保护的页面加密。保护页面:需要操作系统保护的进程页面。从效率来看,进程所属页面并不需要都保护,只有少量存储于敏感信息(如用户口令)的页面才需要保护,这些需要保护的页面称为保护页面。普通页面:不需要操作系统保护的进程页面。普通页面是相对保护页面而言,是进程不包含秘密信息的页面。受限页面:保护页面存在受限和非受限两种状态,处于受限状态的保护页面也简称受限页面,受限页面是页面数据处于密文状态的保护页面。非受限页面:处于非受限状态的保护页面简称非受限页面,非受限页面是页面数据处于明文状态的保护页面。访问受限页面中断:当处理器在访问数据或指令时,若发现所要访问的指令或数据处于密文状态,操作系统便产生访问受限页面中断信号,并唤醒相应的中断服务例程,将受限页面转换为非受限页面。此中断是本发明要求linux操作系统新增加的中断。页面加密服务例程:页面加密服务例程根据最近最久未使用原则,周期性检查非受限页面的访问情况,并加密符合要求的非受限页面,将其转换为受限页面,页面加密服务例程是本发明要求linux操作系统新增加的内核成分。下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述:实施例一,由于执行、编辑和查看的需要,计算机中的指令和数据都是以明文形式存在于内存。这使得攻击者可以直接窃取内存中的用户秘密数据(如:银行口令),从而绕开困难的安全措施。有必要对含有秘密信息的页面进行保护。不过,想要完全避免秘密信息以明文形式暴露于内存中是不现实的,这是因为目前主流商用处理器都无法直接处理密文形式的指令与数据。本发明拟构建内存页面粒度的加解密算法,从而减少秘密信息在内存以明文形式存在的时间,当处理器访问这些需要保护的信息时,这些信息以明文形式存在,当处理器不再访问这些信息时,系统及时将其转换为密文。本发明将内存页面分为普通页面和保护页面两类。所谓保护页面是指含有秘密信息、需要操作系统保护的页面。保护页面存在受限和非受限两种状态,操作系统根据处理器处理请求及时完成保护页面在受限状态与非受限状态之间转换。保护页面的受限状态是指页面所含信息为密文状态,保护页面的非受限状态是指页面所含信息为明文状态。处理器能够直接访问非受限页面,但是无法直接访问受限页面。为了支持处理器对保护页面的访问,操作系统在处理器访问保护页面时,解密保护页面的内容,将页面从受限状态转变为非受限状态。当处理器暂时不再访问该页面,操作系统加密保护页面的内容,将页面从非受限状态转变为受限状态。通过这种方法可以减少秘密信息在内存中以明文形式存在的时间。如图3所示,在传统操作系统内部,页面内的秘密信息始终以明文形式存在。攻击者在任何一个时间点都可以从内存中直接窃取秘密信息。引入本发明以后,如图4所示,秘密信息只有处理器访问前后处于明文状态。具体来说,在秘密信息装入内存且处理器未访问前,秘密信息所在页面处于受限状态。在处理器访问期间,页面内容被解密,处于非受限状态。在处理器不再访问该页面时,页面又转换为受限状态。如图2所示,本发明提供的一种linux操作系统内存页面即时加解密方法,包括以下步骤:步骤1,页面标识页面标识的目的在于识别保护页面以及页面的受限状态。页面标识单元与用户接口和系统调用协调工作,以便用户标识所需要保护的对象。页面标识包括保护页面标识以及受限状态标识两个方面。保护页面标识的目的在于操作系统识别需要保护的页面,分为动态实时标识和静态预标识两种情况。受限状态标识的目的是为了便于操作系统识别保护页面的明密文状态,以便决定是否加解密。动态实时页面标识是指进程根据需要动态向操作系统申请保护页面,以便存储秘密信息。为了实现动态实时页面标识,如图5所示,本发明向程序设计人员提供申请保护页面的函数接口ppmalloc(即protectedpagemalloc的简写)以及取消保护页面的函数接口ppfree(即protectedpagefree)。ppmalloc是在传统c库函数malloc的基础上增加了页面标识功能。具体来说,ppmalloc首先利用传统的malloc函数申请相应的存储空间,然后利用新增系统调用ppset来标识malloc函数申请的页面。考虑到安全性以及linux操作系统写时复制机制,本发明在页面标识前,强制向新分配的存储空间写入随机数,从而使操作系统立即为ppmalloc申请的存储空间分配具体的页面。类似的ppfree是与传统c库函数free基础上增加了页面标识功能,其目的是取消ppmalloc函数所申请的保护页面。ppset系统调用是本发明在linux操作系统内核中新增加的系统调用,它将根据所给的首地址以及存储空间范围大小,标识所涵盖的页面为保护页面,或者取消这些保护页面的标识。本发明利用页表项的空闲位来记录页面是否为保护页面以及受限状态此类页面属性。在利用x86处理器寻址过程中将使用页表项,而页表项共32位,如图6所示,其中前20位为物理地址的高20位,用于定位一个物理页框,后12位包含多种页面属性,例如r/w位用于表明页面的读、写和执行权限。页表项中预留了3个比特给进程所使用,它们是第9、10和11位。这3比特的空闲位可以表示8种状态,足够满足页面标识需求。需要说明的是:本发明所使用的页面标注只是针对x86处理器,其它处理器略有不同。本发明利用页表项的第9位和第10位标识当前页面是否为保护页面以及保护页面是否处于受限状态。第9位用于标识保护页面的状态,用y表示。当y=1表明当前页面为受限页面,当y=0表明当前页面为非受限页面。第10位用于标识保护页面,用z表示。当z=1表示当前页面为保护页面,当z=0表示当前页面为普通页面。当z=0时,位y的值没有实际含义。状态位z和y的详细解释见表1。z=1z=0y=1受限页面普通页面y=0非受限页面普通页面表1状态位z和y的解释静态预页面标识是指在程序装入内存前就提前对需要保护的秘密数据所在页框进行标识,其工作流程如图7所示。为了不对linux操作系统的elf可执行文件格式进行修改,本发明采用其它辅助工具对elf文件格式进行解析,将秘密数据所在位置进行标识,并将标识结果存储于附属的标识文件。本发明对exec系统调用进行修改,形成新的ppexec系统调用。当ppexec系统调用装载程序时,也将标识文件装载入内核形成标识数据。在linux操作系统中,进程所属页面将逐渐装载入内存。为了标识进程对应的页表中相应的标志字,本发明增加缺页中断服务程序的工作流程,要求缺页中断在装载页面的同时也更新页面对应页表项的标志字。静态预页面标识的一种极端情况是全进程标识,即标识进程所有页面为保护页面。从安全性来看,全进程标识无疑增加了安全性,但是安全性的增加的代价是性能开销的增加。由于所有指令和数据大多时候均处于密文状态,为此必将导致频繁的加解密操作。为了提高效率,本发明根据局部性原理,将不会在指令和数据被使用完立即加密,从而避免将短时间会再次访问的指令或数据再次加密,但是这不能从根本上减少全进程标识所带来的性能开销。理想情况下,应该有针对性标识需要保护的秘密数据。步骤2,页面解密为了实现及时解密受限页面,本发明拟在内核中增加访问受限页面中断。在linux操作系统中,进程会通过查找线性区等中间过程,最终查找页表项来获得页面属性信息,明确线性地址是否合法、页面是否在内存等情况,以决定最终是否访问该地址。在引入本发明后,linux操作系统将增加一项检查内容:处理器所要访问地址所在页面是否为受限页面。如果处理器所要访问地址所在页面为受限页面,那么处理器不能直接处理处于密文的指令和数据,操作系统发出访问受限页面中断。图8显示了访问受限页面中断产生的时机。处理器在访问某个地址前,势必需要检查目标地址所在区域的合法性,如访问权限、是否位于内存等。为了及时截获处理器对受限页面的访问,本发明构造“伪缺页”,即页面已经装入物理内存,但是页表项标志字显示该页面为受限页面且未装入内存,这样处理器访问时将产生缺页中断。linux缺页中断服务程序将完成一系列的检查,本发明增加“伪缺页”检查项。操作系统结合页表项标志字可以判定当前异常是否是“伪缺页”,如果是“伪缺页”则实际意味处理器访问了受限页面,就唤醒访问受限页面中断服务程序。图8显示了访问受限页面中断服务程序主要完成以下三个工作。首先,中断服务程序读取产生中断的目标地址,查获目标地址所在页面所对应的页表项。产生中断的目标地址可以由内核在中断产生前写入指定处理器寄存器,而后由中断服务程序读取。其次,中断服务程序读取目标页面的内容,对其进行解密,将受限页面转换为非受限页面。最后,中断服务程序会查获目标页面所对应的页表项的标志字,将y置为0,表明当前保护页面的状态已经由受限转变为非受限,当中断服务程序返回后,处理器可以直接访问该页面。根据页面的加解密算法复杂程度,决定访问受限页面中断服务程序是否分为下半部和下半部。在linux内核中,为了让中断服务程序完成尽可能多且必要的任务,同时也希望及时响应中断,所以将中断服务程序分为上半部和下半部。上半部强调执行效率和时效性,下半部则执行没有严格时间限制的部分功能。当加解密算法较为复杂,耗时过多时,可以将其放入下半部执行,以保证操作系统的运行效率。页面加解密算法的一个基本要求是:加解密后的数据流长度不发生变化,以保证解密后的页面内容可以正好覆盖加密后的页面内容。基于移位寄存器的序列密码算法就是一种典型的页面加解密算法:以每个页面首地址作为移位寄存器的初始向量,保护移位寄存器结构不被泄漏,产生足够加解密页面内容的随机数流加解密目标页面。本发明不对页面加解密算法作强制要求。步骤3,页面加密为了及时将非受限页面转变为受限页面,本发明在内核中增设页面加密服务例程,由该服务例程周期性加密非受限页面。当处理器访问完非受限页面,一种理想的情况是立即对其进行加密。然而,处理器访问的指令和数据往往集中于一小块连续区域,很有可能在少数几个页面来回访问,如果采用处理器不再访问页面就立即加密的策略,就会导致这几个页面被反复加解密,从而产生极大的性能开销。故而,本发明采用周期性检查和批量加密的策略,即定时对所有非受限页面进行检查,如果存在非受限页面已经长时间不被处理器所访问,再对其进行加密,将其转变为受限页面。为了避免扫描整个页表来查找需要加密的非受限页面,内核维护一个非受限页面链表,如图9所示。当受限页面转变为非受限页面后,内核将在非受限页表单链表中增加一个新的节点,记录新增加非受限页面的基本信息。由于受限页面只能经过访问受限页面中断服务程序才能转变为非受限页面,所以将由访问受限页面中断服务程序完成非受限页面单链表节点的增加工作。页面加密服务例程周期性检查该单链表,快速检查页表项以及页面访问信息,最终得到加密非受限页面集。页面加密服务例程将加密待处理的非受限页面,将其转换为受限页面;然后更新对应页面的页表项标志字,表明保护页面的状态发生变化;最后从非受限页面单链表中删除该节点。页面加密服务例程采用最近最久未使用(lru:leastrecentlyused)算法来筛选待处理的非受限页面集。所谓最近最久未使用是指从若干页面中挑选最近一段时间最久没有使用的页面,一种经典的用法是页面置换。本发明将其用于决定哪些非受限页面需要加密,以便最近可能会被处理器再次使用的页面不被加密,而已经长时间不被处理器所访问的页面则及时加密,以减少秘密数据暴露的时间。本发明将借助linux操作系统基于最近最久未使用页面置换算法来获取最近最久未使用信息。页面加密服务例程的检查周期是一个需要综合平衡的因子。如果页面加密服务例程检查周期过短,可能会造成处理器还需要访问的非受限页面被加密,从而导致系统性能开销过大。如果页面加密服务例程检查周期过长,可能会造成秘密数据在内存中存活时间过长,安全风险增加。如图10所示,本发明还提供一种linux操作系统内存页面即时加解密系统,包括用户接口和内核,用户接口经过系统调用向内核提出服务请求,所述内核包括页面标识单元、页面加密单元和页面解密单元;页面标识单元,用于标识需要保护的页面或者取消需要保护的页面;页面加密单元,用于页面暂时不被访问时,对保护页面进行加密操作;页面解密单元,用于在页面被处理器访问时,及时对保护页面进行解密操作。其中,页面标识单元包括保护页面标识单元和受限状态标识单元;保护页面标识单元用于操作系统识别需要保护的页面;受限状态标识单元用于操作系统识别保护页面的明密文状态。非受限页面与受限页面的状态转换如图11所示。第一步,当处理器访问受限页面时,由于受限页面内的数据处于密文状态,处理器无法直接访问,产生系统中断,由页面解密单元提供服务。第二步,页面解密单元完成对受限页面的解密操作,受限页面转换为非受限页面。第三步,处理器访问非受限页面,完成指定的业务工作。第四步,页面加密单元定时检查是否存在长时间未用的非受限页面,如果有则对其进行加密,将非受限页面转换为受限页面。之所以不在处理器访问完页面立即将非受限页面转换为受限页面,是考虑到处理器可能在不久的将来再次访问该页面,频繁的对页面实施加解密将极大的影响系统的整体效率,故而本发明采用定时检查、批量加密的方式完成非受限页面向受限页面的转换。以上所示仅是本发明的优选实施方式,应当指出,本发明并不限定操作系统所使用的页面加密算法。适用于本发明的页面加密算法至少应该有两个准则:加解密后数据长度不发生变化,加解密速度足够快。本发明提及可以使用的基于移位寄存器的序列密码,但也不排除其它密码算法。典型的如使用aes分组加密算法作为页面加解密算法,内核维护一个主密钥,并为每个进程生成一个私有密钥,内核为每个进程使用其私用密钥完成页面加解密操作。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1