面向sgx安全应用的内部隔离方法

文档序号:1772241 发布日期:2019-12-03 浏览:19次 >En<

阅读说明:本技术 面向sgx安全应用的内部隔离方法 (Internal insulation method towards SGX security application ) 是由 古金宇 夏虞斌 陈海波 臧斌宇 于 2019-08-19 设计创作,主要内容包括:本发明提供了一种面向SGX安全应用的内部隔离方法,利用面向SGX安全应用的内部隔离系统,该系统能够实现设定的系统库,包括一个或多个enclave;所述enclave包括一个或多个线程;所述enclave中的每个线程均包括PKRU寄存器,且所述enclave中每个线程的PKRU寄存器值互不相同,从而所述enclave中的每个线程都能够都有私有的地址空间区域,只能由本线程访问;将运行enclave的操作系统记为不可信的操作系统;本发明利用MPK性能牺牲几乎为零的优势,能够进行内存区域划分,不仅进一步减小了enclave内部程序可信计算基,而且能够满足当前云计算服务应用的安全需求。(The present invention provides a kind of internal insulation methods towards SGX security application, and using the internal insulation system towards SGX security application, which can be realized the system library of setting, including one or more enclave;The enclave includes one or more threads;Per thread in the enclave includes PKRU register, and in the enclave per thread PKRU register value it is different, can only be by this thread accesses so that the per thread in the enclave can have privately owned address space region;The operating system for running enclave is denoted as incredible operating system;The present invention sacrifices almost nil advantage using MPK performance, is able to carry out region of memory division, not only further reduces enclave internal processes trusted computing base, but also can satisfy the demand for security of current cloud computing service application.)

面向SGX安全应用的内部隔离方法

技术领域

本发明涉及计算机安全技术领域,具体地,涉及一种面向SGX安全应用的内部隔离方法。

背景技术

可信计算基(TCB)是指为保证计算机系统安全运行的所有集合,包括固件、硬件、软件等。

如专利文献CN101635016B公开的一种连接TCB组件的安全保障系统,该系统包括:应用层TCB组件,其用于实施各可信软件自身设置的安全策略;操作系统层TCB组件,其用于实施信息系统设置的安全策略;以及管道,其在应用层TCB组件与操作系统层TCB组件之间建立,用于实现可信组件与可信组件之间的可信消息传递。本申请还公开一种连接TCB组件的安全保障方法,该方法包括:应用层TCB安全保障步骤,其用于实施各可信软件自身设置的安全策略;操作系统层TCB安全保障步骤,其用于实施信息系统设置的安全策略;管道消息传递步骤,其在应用层TCB组件与操作系统层TCB组件之间建立管道,在可信组件与可信组件之间进行可信消息传递。

针对类似上述基于TCB的现有技术,一旦可信计算基中存在安全隐患或者程序错误,整个系统的安全将受到威胁。相反的,如果TCB之外的部分存在着漏洞,不会对整个系统以及系统运行的程序造成显著影响。目前大多数程序运行过程中,其可信计算基包括CPU硬件,BIOS固件,操作系统以及程序本身的代码等。随着硬件软件的不断发展,上述可信计算基的代码量已经非常庞大,例如Linux内核代码行数已经达到上千万的数量级。随着可信计算基代码数量的增加,其潜在的程序漏洞与错误也相应地增加。一旦这些漏洞被恶意攻击者利用,攻击计算机用户程序成为可能。当前正处于移动互联网时代与大数据信息时代,各种信息的处理与计算都需要借助于计算机的帮助。庞大的可信计算基中的漏洞若被恶意攻击者利用,并窃取计算机用户的敏感数据,例如商业机密,健康数据等,将给计算机用户带来不可估量的损失。

针对上述问题,研究界与工业界提出了许多减小可信计算基的软件、硬件方法。IntelSGX技术是其中之一。利用该技术,用户态应用程序能够创建私有的内存区域,称为enclave。enclave中的数据以加密的形式存储在内存中,只有当enclave中的进程访问时处理器才将其解密,而enclave外的其他部分,包括更高运行权限的操作系统都无法获取明文数据。利用SGX技术,enclave程序在运行过程中,其可信计算基仅仅包括Intel处理器及其enclave自身代码,不包括enclave外的其他部分例如操作系统等,这样以来大大减小了程序运行时的可信计算基。

SGX技术能够有效降低应用程序的可信计算基大小,从而大大提升应用程序的安全性。如何利用SGX提供的enclave抽象进行程序开发成为关键。一方面,当enclave中的程序需要借助enclave外程序完成相应的功能时,会产生进入与退出enclave等操作,带来一定的性能开销。另一方面,随着硬件的快速发展,enclave的安全内存容量在将来也会大大增加。为了性能的考虑,将整个应用程序,甚至直接将libOS应用程序放入enclave中会成为SGX开发的趋势。不过这种做法增加了应用程序可信计算基的大小。

同时,当前正处于大数据与云计算发展的上升时期,大量的数据计算都需要在云端进行。为了减小可信计算基,达到安全的目的,大多数云服务器中提供服务的应用程序需要在enclave环境中执行。若同时有多个用户向云端请求同一项服务,会出现云端一个enclave中的应用程序被多个用户同时共享的情况。由于用户与用户之间不能信任,用户之间的数据不能共享,此时需要在enclave内部进行隔离。综上,无论是减小enclave可信计算基,还是满足当前大数据、云计算的发展需求,enclave内部的隔离是有必要的。

倘若利用软件的方法进行enclave内部隔离,例如SFI(Software-basedFaultIsolation)技术,性能上会带来不可忽视的损耗;若相关硬件技术实现隔离,例如IntelMPK支持,会收获很好的效果。

IntelMPK技术能够将一个进程使用的内存页划分不同的内存区域,并且通过设置CPU中PKRU寄存器的值指定当前运行的进程对每个内存区域的访问权限。进程能够通过直接修改PKRU寄存器的方式改变不同内存区域访问权限,而不再需要昂贵的修改页表操作。利用IntelMPK技术我们能够将enclave中应用进程的内存区域划分到不同的内存页组,通过指定PKRU的值使得不同线程运行时对不同的内存页组有不同的访问权限,因此enclave中的每个线程都能够拥有其他线程无法访问的私有的地址空间区域。不同于一般利用页表进行隔离的方法,不同线程使用同一张页表,在线程调度与切换的过程中不会带来诸如TLB缓存失效等的性能损耗。因此利用IntelMPK技术,能够在性能牺牲几乎为零的基础上,实现enclave内部隔离。

然而MPK技术中可信计算基与SGX技术中可信计算基不相兼容。MPK技术中,为程序修改页表项并正确划分内存页组需要借助操作系统的帮助,因此操作系统属于可信计算基;而SGX技术中操作系统属于不可信计算基。因此如何保证enclave程序运行之前不可信的操作系统能够为enclave中的应用程序正确地设置页表项目,以及相关页表项在enclave程序执行过程中不被包括不可信操作系统在内的潜在攻击者修改成为关键。

IntelRTM技术是一种硬件事务内存的解决方案。事务内存是为程序开发者提供的事务功能编程抽象。利用RTM技术,程序开发者可以通过两条指令,Xbegin和Xend,标记关键路径,该关键路径代码执行时,CPU将其视为一个能够保证原子性,一致性与隔离性的事务。若某一事务执行过程中所读取并使用的数据被其他事务所修改,那么此行为能够被硬件所捕获,并中断此事务。本发明通过利用RTM技术,能保证enclave程序执行过程中相关页表项不被修改。

发明内容

针对现有技术中的缺陷,本发明的目的是提供一种面向SGX安全应用的内部隔离方法。

根据本发明提供的一种面向SGX安全应用的内部隔离方法,利用面向SGX安全应用的内部隔离系统;所述面向SGX安全应用的内部隔离系统能够实现设定的系统库,包括一个或多个enclave;

所述enclave包括一个或多个线程;所述enclave中的每个线程均包括PKRU寄存器,且所述enclave中每个线程的PKRU寄存器值互不相同,从而所述enclave中的每个线程都能够都有私有的地址空间区域,只能由本线程访问;

将运行enclave的操作系统记为不可信的操作系统;

所述面向SGX安全应用的内部隔离方法包括安全隔离步骤;

安全隔离步骤:通过MPK技术在enclave中实现线程间安全隔离机制,即在enclave中利用MPK技术将enclave的内存划分为不同的内存页组,并通过设置PKRU寄存器使得enclave中不同线程对相关内存页组的访问权限不同,从而实现线程间安全隔离。

优选地,所述面向SGX安全应用的内部隔离方法还包括页表项确认步骤;

页表项确认步骤:等待不可信的操作系统为enclave程序设置页表项,并将相应的页表项内容展示给enclave程序,enclave程序确认相应的页表项设置正确。

优选地,所述页表项确认步骤包括access位验证步骤和/或dirty位验证步骤;

access位验证步骤:在页表项中设置access位表示进程执行过程中是否访问过该页表项所表示的内存页,access位初始值为0,若执行过程中访问内存页中的数据,则access位会被硬件自动设置成1,否则,则access位保持初始值;

dirty位验证步骤:在页表项中设置dirty位表示进程执行过程中是否对该页表项所表示的内存页有修改操作,dirty位初始值为0,若执行过程中修改了内存页的数据,则dirty位会被硬件自动设置成1,否则,则dirty位保持初始值。

优选地,所述面向SGX安全应用的内部隔离方法还包括SSA结构体判断步骤;

SSA结构体判断步骤:在检查过程中通过读取SSA结构体判断检查过程中是否发生中断从而得知不可信操作系统在此检查中是否介入;

所述SSA结构体判断步骤的执行次数大于一次。

优选地,所述面向SGX安全应用的内部隔离方法还包括RTM保护步骤;

RTM保护步骤:enclave中的应用程序利用RTM保证执行中页表映射不会被包括不可信操作系统在内的潜在攻击者修改;

其中,所述RTM技术通过Xbegin和Xend指令声明一个事务的开始与结束。Xbegin和Xend之间,事务读取或修改的内容,如果被其他进程修改,则该行为能够被硬件捕获到,该事务会被终止;否则,则继续执行。

优选地,所述面向SGX安全应用的内部隔离方法还包括二进制检查步骤;

二进制检查步骤:利用程序运行前二进制检查的方法保证enclave程序以设定的路径运行。

优选地,所述二进制扫描步骤包括WRPKRU检查子步骤;

WRPKRU检查子步骤:利用程序运行前二进制检查的方法保证除了初始化设置线程的PKRU寄存器的值处出现WRPKRU的代码以外,其他部分不能出现WRPKRU指令以及其相应的指令编码。

优选地,所述二进制扫描步骤包括ROP检查子步骤和/或RTM绕过检查子步骤;

ROP检查子步骤:利用程序运行前二进制检查的方法保证Xend与Xbegin之间不存在程序控制流改变指令;

RTM绕过检查子步骤:用程序运行前二进制检查的方法保证Xbegin和Xend之间的二进制代码不能拼凑出Xbegin和Xend两条指令。

根据本发明提供的一种面向SGX安全应用的内部隔离方法,利用面向SGX安全应用的内部隔离系统;所述面向SGX安全应用的内部隔离系统能够实现设定的系统库,包括一个或多个enclave;

所述enclave包括一个或多个线程;所述enclave中的每个线程均包括PKRU寄存器,且所述enclave中每个线程的PKRU寄存器值互不相同,从而所述enclave中的每个线程都能够都有私有的地址空间区域,只能由本线程访问;

将运行enclave的操作系统记为不可信的操作系统;

所述面向SGX安全应用的内部隔离方法包括安全隔离步骤;

安全隔离步骤:通过MPK技术在enclave中实现线程间安全隔离机制,即在enclave中利用MPK技术将enclave的内存划分为不同的内存页组,并通过设置PKRU寄存器使得enclave中不同线程对相关内存页组的访问权限不同,从而实现线程间安全隔离;

所述面向SGX安全应用的内部隔离方法还包括页表项确认步骤;

页表项确认步骤:等待不可信的操作系统为enclave程序设置页表项,并将相应的页表项内容展示给enclave程序,enclave程序确认相应的页表项设置正确;

所述页表项确认步骤包括access位验证步骤和/或dirty位验证步骤;

access位验证步骤:在页表项中设置access位表示进程执行过程中是否访问过该页表项所表示的内存页,access位初始值为0,若执行过程中访问内存页中的数据,则access位会被硬件自动设置成1,否则,则access位保持初始值;

dirty位验证步骤:在页表项中设置dirty位表示进程执行过程中是否对该页表项所表示的内存页有修改操作,dirty位初始值为0,若执行过程中修改了内存页的数据,则dirty位会被硬件自动设置成1,否则,则dirty位保持初始值;

所述面向SGX安全应用的内部隔离方法还包括SSA结构体判断步骤;

SSA结构体判断步骤:在检查过程中通过读取SSA结构体判断检查过程中是否发生中断从而得知不可信操作系统在此检查中是否介入;

所述SSA结构体判断步骤的执行次数大于一次;

所述面向SGX安全应用的内部隔离方法还包括RTM保护步骤;

RTM保护步骤:enclave中的应用程序利用RTM保证执行中页表映射不会被包括不可信操作系统在内的潜在攻击者修改;

其中,所述RTM技术通过Xbegin和Xend指令声明一个事务的开始与结束。Xbegin和Xend之间,事务读取或修改的内容,如果被其他进程修改,则该行为能够被硬件捕获到,该事务会被终止;否则,则继续执行;

所述面向SGX安全应用的内部隔离方法还包括二进制检查步骤;

二进制检查步骤:利用程序运行前二进制检查的方法保证enclave程序以设定的路径运行;

所述二进制扫描步骤包括WRPKRU检查子步骤;

WRPKRU检查子步骤:利用程序运行前二进制检查的方法保证除了初始化设置线程的PKRU寄存器的值处出现WRPKRU的代码以外,其他部分不能出现WRPKRU指令以及其相应的指令编码;

所述二进制扫描步骤包括ROP检查子步骤和/或RTM绕过检查子步骤;

ROP检查子步骤:利用程序运行前二进制检查的方法保证Xend与Xbegin之间不存在程序控制流改变指令;

RTM绕过检查子步骤:用程序运行前二进制检查的方法保证Xbegin和Xend之间的二进制代码不能拼凑出Xbegin和Xend两条指令。

根据本发明提供的一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现上述的面向SGX安全应用的内部隔离方法的步骤。

与现有技术相比,本发明具有如下的有益效果:

1、本发明提供的面向SGX安全应用的内部隔离方法,具有隔离效果好、可靠性高、泛用性强的优点;

2、本发明提供的面向SGX安全应用的内部隔离方法,利用MPK与RTM的技术支持,与SGX技术结合,提出并实现了enclave内部高效隔离方法;

3、本发明提供的面向SGX安全应用的内部隔离方法,利用MPK性能牺牲几乎为零的优势,能够为enclave内部应用程序进行内存区域划分,使得线程拥有其他线程无法访问内存区域,不仅进一步减小了enclave内部程序可信计算基,而且能够满足当前云计算服务应用的安全需求。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1是利用WRPKRU指令非法修改PKRU寄存器的示意图;

图2是本发明实例中系统的架构示意图;

图3是enclave内部隔离的示意图;

图4是本发明实例中enclave程序从创建到运行过程的流程示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

本发明中涉及的缩略语和关键术语定义如下:

-TCB:Trusted Computing Base,可信计算基;

-SGX:Software Guard Extension,软件防护扩展;

-MPK:Memory Protection Key,内存保护技术;

-RTM:Restricted Transactional Memory,硬件事务内存技术;

-SSA:State Save Area,状态保存区。

根据本发明提供的一种面向SGX安全应用的内部隔离方法,利用面向SGX安全应用的内部隔离系统;所述面向SGX安全应用的内部隔离系统能够实现设定的系统库,包括一个或多个enclave;

所述enclave包括一个或多个线程;所述enclave中的每个线程均包括PKRU寄存器,且所述enclave中每个线程的PKRU寄存器值互不相同,从而所述enclave中的每个线程都能够都有私有的地址空间区域,只能由本线程访问;

将运行enclave的操作系统记为不可信的操作系统;

所述面向SGX安全应用的内部隔离方法包括安全隔离步骤;

安全隔离步骤:通过MPK技术在enclave中实现线程间安全隔离机制,即在enclave中利用MPK技术将enclave的内存划分为不同的内存页组,并通过设置PKRU寄存器使得enclave中不同线程对相关内存页组的访问权限不同,从而实现线程间安全隔离;

所述面向SGX安全应用的内部隔离方法还包括页表项确认步骤;

页表项确认步骤:等待不可信的操作系统为enclave程序设置页表项,并将相应的页表项内容展示给enclave程序,enclave程序确认相应的页表项设置正确;

所述页表项确认步骤包括access位验证步骤和/或dirty位验证步骤;

access位验证步骤:在页表项中设置access位表示进程执行过程中是否访问过该页表项所表示的内存页,access位初始值为0,若执行过程中访问内存页中的数据,则access位会被硬件自动设置成1,否则,则access位保持初始值;

dirty位验证步骤:在页表项中设置dirty位表示进程执行过程中是否对该页表项所表示的内存页有修改操作,dirty位初始值为0,若执行过程中修改了内存页的数据,则dirty位会被硬件自动设置成1,否则,则dirty位保持初始值;

所述面向SGX安全应用的内部隔离方法还包括SSA结构体判断步骤;

SSA结构体判断步骤:在检查过程中通过读取SSA结构体判断检查过程中是否发生中断从而得知不可信操作系统在此检查中是否介入;

所述SSA结构体判断步骤的执行次数大于一次;

所述面向SGX安全应用的内部隔离方法还包括RTM保护步骤;

RTM保护步骤:enclave中的应用程序利用RTM保证执行中页表映射不会被包括不可信操作系统在内的潜在攻击者修改;

其中,所述RTM技术通过Xbegin和Xend指令声明一个事务的开始与结束。Xbegin和Xend之间,事务读取或修改的内容,如果被其他进程修改,则该行为能够被硬件捕获到,该事务会被终止;否则,则继续执行;

所述面向SGX安全应用的内部隔离方法还包括二进制检查步骤;

二进制检查步骤:利用程序运行前二进制检查的方法保证enclave程序以设定的路径运行;

所述二进制扫描步骤包括WRPKRU检查子步骤;

WRPKRU检查子步骤:利用程序运行前二进制检查的方法保证除了初始化设置线程的PKRU寄存器的值处出现WRPKRU的代码以外,其他部分不能出现WRPKRU指令以及其相应的指令编码;

所述二进制扫描步骤包括ROP检查子步骤和/或RTM绕过检查子步骤;

ROP检查子步骤:利用程序运行前二进制检查的方法保证Xend与Xbegin之间不存在程序控制流改变指令;

RTM绕过检查子步骤:用程序运行前二进制检查的方法保证Xbegin和Xend之间的二进制代码不能拼凑出Xbegin和Xend两条指令。

根据本发明提供的一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现上述的面向SGX安全应用的内部隔离方法的步骤。

进一步地,本发明所提出的方法,主要解决以下问题:

1.如何对不可信的操作系统设置的页表项进行检查?如何保证这样的检查不被不可信的操作系统拦截并绕过?

2.如何保证enclave执行过程中相关页表项不被包括不可信操作系统在内的潜在攻击者所修改?

本发明技术实现的技术点与具体实现如下:

本发明包含以下技术点:

1.利用MPK技术在enclave中实现线程间安全隔离机制,即在enclave中利用MPK技术将enclave的内存划分为不同的内存页组,并通过设置PKRU寄存器使得enclave中不同线程对相关内存页组的访问权限不同,达到隔离的效果;

2.当不可信的操作系统为enclave程序设置完页表项之后,需要将相应的页表项内容展示给enclave程序,enclave程序确认相应的页表项设置正确,具体技术方法如下:enclave程序需要对相应的内存进行随机读写,并通过页表项中的access/dirty位是否改变判断该页表项是否为真实的;

3.为防止检查过程中不可信的操作系统拦截enclave的读写行为并修改虚假页表的access/dirty位,在检查过程中通过读取SSA结构体判断检查过程中是否发生中断从而得知不可信操作系统在此检查中是否介入;为了防止其他不可信线程在检查过程中与不可信的操作系统协作修改相应的页表位,上述检查需要进行多次;

4.通过页表有效性检查后,enclave中的应用程序利用RTM保证执行中页表映射不会被包括不可信操作系统在内的潜在攻击者修改;

5.利用程序运行前二进制检查的方法保证enclave程序在运行过程中不会修改寄存器PKRU的值;同时不会被ROP攻击,绕过RTM的保护。

以下是对上述技术点的补充说明:

由于修改PKRU寄存器的指令WRPKRU能够在用户态被随意调用,并且不会触发任何中断与异常,因此enclave程序中不可信线程在执行的过程中有机会通过调用该指令修改PKRU的值,达到修改相关内存页访问权限从而窃取可信线程敏感数据的目的。如图1所示,由于X86架构有指令不定长的特性,若代码段中出现不合法的位置出现WRPKRU的指令编码(0x0f01ef),尽管在CPU正常执行过程中不会相关二进制代码片段不会被翻译成WRPKRU指令,但是攻击者可能利用程序的漏洞进行ROP攻击,跳转到代码段中0x0f01ef的开头处,CPU会将其解释成WRPKRU指令,达到非法修改PKRU寄存器的目的。因此在enclave程序运行前需要保证,除了初始化设置线程的PKRU寄存器的值处出现WRPKRU的代码以外,其他部分不能出现WRPKRU指令以及其相应的指令编码(0x0f01ef)。

页表项中的access/dirty位初始值都为0。access位表示进程执行过程中是否访问过该页表项所表示的内存页,若执行过程中访问内存页中的数据,则access位会被硬件自动设置成1。Dirty位表示进程执行过程中是否对该页表项所表示的内存页有修改操作,若执行过程中修改了内存页的数据,则dirty位会被硬件自动设置成1。

通过页表有效性检查后与enclave程序执行前之间,页表有可能被篡改。由于不可信操作系统以及enclave中其他不可信进程无法得知页表有效性检查何时结束,因此不可信操作系统在enclave程序在通过页表有效性检查和enclave利用RTM执行之间篡改页表的几率很小。同时enclave程序在RTM开始的时候能够读取SSA的值判断不可信操作系统有无介入。其中,SSA是SGX技术为保存enclave应用程序中断上下文而设计的。当enclave应用程序执行过程发生之中断,其在中断时刻的运行状态包括中断指令地址都会由SGXCPU保存到该enclave的SSA中。

RTM技术通过Xbegin和Xend指令声明一个事务的开始与结束。Xbegin和Xend之间,事务读取或修改的内容,如果被其他进程修改,则该行为能够被硬件捕获到,该事务会被终止。如果利用RTM保护的enclave执行未终止,则表明执行过程中相应页表项未被包括不可信操作系统在内的潜在攻击者篡改,enclave的执行环境是安全的。

为了降低事务中断的概率,利用Xbegin和Xend保护的代码不宜过长,所以enclave代码由多个Xbegin和Xend对组成。攻击者可能通过ROP攻击,利用jmp等指令改变程序控制流,在Xend之后进行跳转,跳出连续的Xbegin和Xend;或者在执行过程中跳转到Xbegin和Xend中间的代码段,利用X86指令不定长的特性,CPU将其解释成与程序开发人员所定义不同的指令,例如Xend指令,结束事务,绕过RTM对已设置好的页表项保护。同时接下来二进制代码中的Xbegin和Xend对应的二进制代码也会被解释成其他的指令,从而之后的程序开发人员实现定义好的所有的Xbegin和Xend指令,对页表项保护都失效,达到篡改页表项而不被发现目的。

所以在enclave创建之前,需要对enclave中的程序代码进行二进制扫描,一方面保证上文提到WRPKRU指令及其指令编码出现的位置合法,另一方面保证Xend与Xbegin之间不存在jmp指令,同时Xbegin和Xend之间的二进制代码不能拼凑出Xbegin和Xend两条指令。

图2是本发明实例中系统的架构图。该架构基本符合当前运用SGX技术应用程序的框架。每个enclave程序都链接着本发明所实现的系统库,运行在不可信的操作系统上,enclave中应用程序是多线程的。由于enclave程序中的每个线程PKRU寄存器的值不同,因此enclave中的每个线程都能够都有私有的地址空间区域,只能由本线程访问,不能由其他线程访问,实现enclave内部隔离的效果。如图3所示,以线程1和线程2为例,虽然两个线程使用同一张页表,由于线程上下文中PKRU寄存器的值不同,线程1无法访问内存页组2中所有内存页的内容,线程2无法访问内存页组1中所有内存页的内容。

图4是本发明实例中enclave程序从创建到运行过程的流程图,具体步骤如下:

1.用户输入指令运行enclave程序,SGX驱动创建enclave,并加载相关代码;

2.系统库对enclave程序二进制代码进行检查。确保以下两点:除了初始化设置线程的PKRU寄存器的值处出现WRPKRU的代码以外,其他部分不能出现WRPKRU指令以及其相应的指令编码(0x0f01ef);Xend之后与Xbegin之前的代码不存在jmp等跳转指令被攻击者利用进行ROP攻击,同时Xbegin和Xend之间的二进制代码无法拼凑出Xbegin和Xend指令;

3.系统库创建线程,调用MPK相关接口,向不可信的操作系统请求设置内存页的页表项,将其划分到相应的内存页组,同时为线程设置PKRU的值,保证每个线程都有私有的内存区域;

4.系统库向不可信操作系统请求设置相关页表项,并将设置完成的页表项所在页表页映射到指定的地址处;

5.不可信的操作系统将enclave程序的页表项设置完后,将其内容映射到指定的地址处,enclave程序将进行相应的检查;

6.enclave程序随机对不同的内存地址进行读写操作,每进行完读写操作后,检查对应页表项中的access/dirty位的值是否正确,并读取SSA,确保此过程中没有发生中断并下陷不可信操作系统的行为。重复上述检查多次,确保每次读取到页表项的内存映射相同,同时enclave进行读/写操作后相应页表项的access/dirty位被置上,如果有一次不正确,则表明该页表项是伪造的,enclave退出;

7.通过页表项有效性检查后,enclave中的应用程序开始执行。enclave中的应用程序利用RTM的硬件支持保证执行过程中相应的页表项不被改变。

更进一步地,根据本发明优选例提供的一种在Intel SGX内部高效隔离的方法,包括:

1.提出线程间安全隔离机制,利用MPK技术在SGX内部实现高效隔离,高效地实现了线程拥有私有的、其他线程无法访问的内存区域的功能;

2.为了验证不可信操作系统正确地为enclave程序设置MPK相关页表,本发明提出检查页表项中access/dirty位在enclave程序随机读写相关内存页后是否被置上,以及读取SSA结构判断不可信操作系统在验证过程中是否介入的方法进行判断;

3.提出利用RTM技术在enclave程序运行过程中保护相关页表项不被修改;

4.为了防止enclave程序在运行过程中调用WRPRKU篡改PKRU寄存器的值,以及为了防止利用RTM保护,本发明在enclave程序运行前利用二进制扫描的方法检测enclave程序的二进制代码,对不符合要求的代码进行二进制重写,防止enclave程序出现不符合规定的WRPKRU,Xbegin以及Xend指令编码;

5.本发明提出了一个完整的,适用于主流的系统架构,针对SGX进行内部高效隔离方法。

在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:系统安全加固方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类