应用程序的运行控制方法及设备的制作方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本技术提供了一种应用程序的运行控制方法及装置。
方法包括获得基于至少一个第一系统调用以及至少一个第二系统调用编写的预设编程语言的标准库的源码,第一系统调用为SGX不支持的系统调用,第二系统调用为SGX支持的系统调用;根据至少一个第一系统调用,获得至少一个第三系统调用,所述第三系统调用是第一系统调用经过修改后得到的SGX支持的系统调用;根据至少一个第二系统调用以及至少一个第三系统调用,得到SGX支持的动态链接库;根据SGX支持的动态链接库,控制应用程序在SGX的安全内存上运行。
本技术避免了对软件源码的大量重复修改,实现不增加开发成本的同时,软件可以运行在SGX的安全内存上,保护了软件的机密性和完整性,增强了软件的运行安全。
权利要求书
1.一种应用程序的运行控制方法,其特征在于,包括:
获得预设编程语言的标准库的源码,所述预设编程语言的标准库的源码是基于软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用编写的;
根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用;
根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库;
根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行。
2.根据权利要求1所述的应用程序的运行控制方法,其特征在于,根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用,包括:
将所述SGX不支持的至少一个第一系统调用进行分类,得到多种类型的系统调用;
将所述多种类型的系统调用按照SGX的软件开发工具包SDK重新实现,得到所述SGX支持的至少一个第三系统调用。
3.根据权利要求1所述的应用程序的运行控制方法,其特征在于,根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库,包括:
将所述预设编程语言的标准库的源码中的至少一个所述第一系统调用重定向为至少一个所述第三系统调用,根据至少一个所述第二系统调用以及至少一个所述第三系统调用,获得SGX 支持的动态链接库的源码;
对SGX支持的动态链接库的源码进行编译,得到所述SGX支持的动态链接库。
4.根据权利要求1所述的应用程序的运行控制方法,其特征在于,根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行,包括:
根据所述SGX支持的动态链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境;
控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行。
5.根据权利要求4所述的应用程序的运行控制方法,其特征在于,根据所述SGX支持的动态
链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境,包括:
根据所述SGX支持的动态链接库以及配置文件,生成所述应用程序的依赖文件列表;
对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表;
创建所述SGX的安全内存;
加载所述SGX支持的动态链接库至所述SGX的安全内存,得到所述应用程序运行的隔离环境。
6.根据权利要求5所述的应用程序的运行控制方法,其特征在于,对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表,包括:
对所述依赖文件进行哈希运算,生成第一哈希值;
将所述第一哈希值作为完整性度量的所述基准度量值,并将所述第一哈希值写入所述依赖文件列表。
7.根据权利要求5或6所述的应用程序的运行控制方法,其特征在于,控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行,包括:
加载所述应用程序和所述依赖文件列表;
对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验;
校验通过后,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间;
控制所述应用程序在分配的所述内存空间中运行。
8.根据权利要求7所述的应用程序的运行控制方法,其特征在于,对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验,包括:
对所述应用程序和所述依赖文件进行哈希运算,生成第二哈希值;
将所述第二哈希值与所述依赖文件列表中的所述基准度量值进行比较,若所述第二哈希值与基准哈希值匹配,则校验通过。
9.根据权利要求7所述的应用程序的运行控制方法,其特征在于,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间,包括:
通过解析所述应用程序的文件,获取所述应用程序的文件格式;
根据所述应用程序的文件格式,识别所述应用程序的数据段和代码段;
在所述SGX的安全内存中,为所述应用程序的数据和代码分配运行所需的内存空间。
10.一种应用程序的运行控制装置,其特征在于,包括:
第一获取模块,用于获得预设编程语言的标准库的源码,所述预设编程语言的标准库的
源码中包括软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用;
第二获取模块,用于根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用;
第三获取模块,用于根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库;
控制模块,用于根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运
行。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至9中任一项所述的应用程序的运行控制方法的步骤。
技术说明书
一种应用程序的运行控制方法及装置
技术领域
本技术涉及信息安全技术领域,尤其涉及一种应用程序的运行控制方法及装置。
背景技术
软件安全是信息安全领域的重要内容,也是软件开发者面临的严峻挑战。
传统的安全手段很难保障软件运行过程中的内存安全。
软件防护扩展(Software GuardExtensions,简称SGX)是英特尔体系(IA)的一个扩展,用于增强软件的安全性,可保护软件的敏感代码和数据的机密性和完整性。
但SGX并不支持所有的系统调用,比如不支持部分I/O读写、多线程、多进程等系统调用。
如果采用SGX保护软件运行过程中的内存安全,使软件可以运行在SGX的安全内存上,以保护软件的机密性和完整性,就必须要修改软件源码,使得软件的开发成本增加。
技术内容
本技术提供一种应用程序的运行控制方法及装置,解决了在采用SGX保护软件运行过程中的内存安全时,需要修改软件源码,使得软件的开发成本增加的问题。
依据本技术的一方面,提供一种应用程序的运行控制方法,包括:
获得预设编程语言的标准库的源码,所述预设编程语言的标准库的源码是基于软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用编写的;
根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用;
根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库;
根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行。
可选的,根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用,包括:
将所述SGX不支持的至少一个第一系统调用进行分类,得到多种类型的系统调用;
将所述多种类型的系统调用按照SGX的软件开发工具包SDK重新实现,得到所述SGX支持的至少一个第三系统调用。
可选的,根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库,包括:
将所述预设编程语言的标准库的源码中的至少一个所述第一系统调用重定向为至少一个所述第三系统调用,根据至少一个所述第二系统调用以及至少一个所述第三系统调用,获得SGX 支持的动态链接库的源码;
对SGX支持的动态链接库的源码进行编译,得到所述SGX支持的动态链接库。
可选的,根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行,包括:
根据所述SGX支持的动态链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境;
控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行。
可选的,根据所述SGX支持的动态链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境,包括:
根据所述SGX支持的动态链接库以及配置文件,生成所述应用程序的依赖文件列表;
对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表;
创建所述SGX的安全内存;
加载所述SGX支持的动态链接库至所述SGX的安全内存,得到所述应用程序运行的隔离环境。
可选的,对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表,包括:
对所述依赖文件进行哈希运算,生成第一哈希值;
将所述第一哈希值作为完整性度量的所述基准度量值,并将所述第一哈希值写入所述依赖文件列表。
可选的,控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行,包括:
加载所述应用程序和所述依赖文件列表;
对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验;
校验通过后,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间;
控制所述应用程序在分配的所述内存空间中运行。
可选的,对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验,包括:
对所述应用程序和所述依赖文件进行哈希运算,生成第二哈希值;
将所述第二哈希值与所述依赖文件列表中的所述基准度量值进行比较,若所述第二哈希值与基准哈希值匹配,则校验通过。
可选的,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间,包括:
通过解析所述应用程序的文件,获取所述应用程序的文件格式;
根据所述应用程序的文件格式,识别所述应用程序的数据段和代码段;
在所述SGX的安全内存中,为所述应用程序的数据和代码分配运行所需的内存空间。
依据本技术的又一方面,提供一种应用程序的运行控制装置,包括:
第一获取模块,用于获得预设编程语言的标准库的源码,所述预设编程语言的标准库的
源码中包括软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用;
第二获取模块,用于根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用;
第三获取模块,用于根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库;
控制模块,用于根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行。
依据本技术的又一方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如上所述的应用程序的运行控制方法的步骤。
本技术的上述技术方案的有益效果是:
上述方案,通过修改预设编程语言的标准库的源码,将预设编程语言的标准库的源码中的SGX不支持的至少一个第一系统调用修改为SGX支持的至少一个第三系统调用,获得SGX支持的动态链接库。
并根据所述SGX支持的动态链接库,实现了在不增加软件开发成本的情况下,软件(应用程序)能够在SGX的安全内存上运行,保护了软件的机密性和完整性,增强软件的运行安全。
附图说明
图1表示本技术的应用程序的运行控制方法的流程图之一;
图2表示本技术的应用程序的运行控制方法的流程图之二;
图3表示本技术的应用程序的运行控制方法的流程图之三;
图4表示本技术的应用程序的运行控制方法的流程图之四;
图5表示本技术的应用程序的运行控制方法的流程图之五;
图6表示本技术的应用程序的运行控制方法的流程图之六;
图7表示本技术的应用程序的运行控制方法的流程图之七;
图8表示本技术的应用程序的运行控制装置的结构框图。
具体实施方式
为使本技术要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
在下面的描述中,提供诸如具体的配置和组件的特定细节仅仅是为了帮助全面理解本技术的实施例。
因此,本领域技术人员应该清楚,可以对这里描述的实施例进行各种改变和修改而不脱离本技术的范围和精神。
另外,为了清楚和简洁,省略了对已知功能和构造的描述。
在本技术的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
具体地,本技术的实施例提供了一种应用程序的运行控制方法及装置,解决了现有技术中在采用SGX保护软件运行过程中的内存安全时,需要修改软件源码,使得软件的开发成本增加的问题。
如图1所示,本技术的实施例提供了一种应用程序的运行控制方法,具体包括以下步骤:
步骤11,获得预设编程语言的标准库的源码,所述预设编程语言的标准库的源码是基于软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用编写的。
需要说明的是,预设编程语言的标准库建立在多个系统调用之上。
对于预设编程语言的标准库,一般在Linux平台上C程序运行最广泛使用的C语言标准库是glibc库。
这里,所述第一系
统调用为SGX不支持的系统调用;所述第二系统调用为SGX支持的系统调用;
步骤12,根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用。
例如,如果在预设编程语言的标准库为C语言标准库glibc库时,所述SGX不支持的至少一个第一系统调用包括如:部分I/O读写、多线程、多进程等。
这里,至少一个第三系统调用可以是通过对至少一个第一系统调用进行修改后,获得的SGX 支持的系统调用。
步骤13,根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库。
可以理解,根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到的所述SGX支持的动态链接库中的所有系统调用均是SGX支持的系统调用。
如此便可以不修改应用程序(软件)的源码,就能满足应用程序在SGX的安全内存上运行的需求,降低了软件的开发成本。
步骤14,根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行。
需要指出的是,所述SGX的安全内存是基于SGX创建的。
通过所述SGX的安全内存,构建应用程序的隔离运行环境,以保护软件的机密性和完整性,增强软件的运行安全。
上述实施例中,通过将预设编程语言的标准库的源码中的SGX不支持的至少一个第一系统调用重定向为修改后的SGX支持的至少一个第三系统调用,获得SGX支持的动态链接库。
并根据所述动态链接库,在不修改应用程序源码,不增加软件开发成本的情况下,实现了应用程序能够在SGX的安全内存上运行,保护了应用程序(软件)的机密性和完整性,增强软件的运行安全。
在本技术一可选实施例中,步骤12,可以包括:
将所述SGX不支持的至少一个第一系统调用进行分类,得到多种类型的系统调用;
将所述多种类型的系统调用按照SGX的软件开发工具包SDK重新实现,得到所述SGX支持的至少一个第三系统调用。
该实施例中,通过抽象SGX不支持的系统调用,将至少一个第一系统调用进行分类,实现多种类型的基础的系统调用,比如内存分配、读、写、多线程、多进程等,并基于SGXSDK重新实现。
避免全部重写所述第一系统调用,导致的修改工作量较大的问题。
在本技术一可选实施例中,步骤13,可以包括:
将所述预设编程语言的标准库的源码中的至少一个所述第一系统调用重定向为至少一个所述第三系统调用,根据至少一个所述第二系统调用以及至少一个所述第三系统调用,获得SGX 支持的动态链接库的源码;
对SGX支持的动态链接库的源码进行编译,得到所述SGX支持的动态链接库。
该实施例中,保持所述预设编程语言的标准库的源码中的至少一个所述二系统调用的默认指向不变的同时,也就是不改变所述预设编程语言的标准库的源码中的至少一个所述二系统调用,仅将所述预设编程语言的标准库的源码中的至少一个所述第一系统调用重定向为经过修改后的至少一个所述第三系统调用,获得SGX支持的动态链接库的源码。
如图2所示,在本技术一可选实施例中,步骤14,可以包括:
步骤141,根据所述SGX支持的动态链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境。
步骤142,控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行。
如图3所示,在本技术一可选实施例中,步骤141,可以包括:
步骤1411,根据所述SGX支持的动态链接库以及配置文件,生成所述应用程序的依赖文件列表;
步骤1412,对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表。
该基准度量值是后续对所述依赖文件和所述应用程序进行校验的基准值。
其中,步骤1412可以包括:
对所述依赖文件进行哈希运算,生成第一哈希值;
将所述第一哈希值作为完整性度量的所述基准度量值,并将所述第一哈希值写入所述依赖文件列表。
步骤1413,创建所述SGX的安全内存;加载所述SGX支持的动态链接库至所述SGX的安全内存,得到所述应用程序运行的隔离环境。
如图4所示,作为一种实现方式,步骤1413,可以包括:
步骤14131,加载所述应用程序和所述依赖文件列表。
步骤14132,对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验。
通过对所述依赖文件和所述应用程序进行校验,可以保证应用程序的机密性和完整性,增强应用程序的运行安全。
具体的,步骤14132可以包括:
对所述应用程序和所述依赖文件进行哈希运算,生成第二哈希值;
将所述第二哈希值与所述依赖文件列表中的所述基准度量值进行比较,若所述第二哈希值与基准哈希值匹配,则校验通过。
通过校验,保证了软件(应用程序)及软件运行所依赖的所述依赖文件的完整性。
步骤14133,校验通过后,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间。
具体的,步骤14133可以包括:
通过解析所述应用程序的文件,获取所述应用程序的文件格式;
根据所述应用程序的文件格式,识别所述应用程序的数据段和代码段;
在所述SGX的安全内存中,为所述应用程序的数据和代码分配运行所需的内存空间。
根据所述应用程序的数据和代码的运行时的内存需要,在所述SGX的安全内存中,为所述应用程序的数据和代码分配运行所需的内存空间。
通过上述实施例,在应用时可以避免在开发软件时对软件源代码的大量重复修改,便能够使软件可以运行在SGX的安全内存上,保护软件的机密性和完整性,增强了软件的运行安全,降低了软件的开发成本。
下面结合图5至图7,对所述预设编程语言的标准库包括C语言标准库glibc库,作为具体的示例性实施例,对实现应用程序的运行控制方法的主要接收如下:
一、修改系统调用,获取glibc动态链接库
修改C语言标准库glibc库中SGX不支持的系统调用(至少一个所述第一系统调用),例如部分I/O读写、多线程、多进程等,重新编译glibc库的源码,得到支持SGX的C标准动态链接库(glibc库)。
如图5所示,glibc库源码修改过程和获取glibc动态链接库主要包括如下步骤:
步骤51,基于SGX实现部分SGX不支持的系统调用。
通过抽象(可以理解为归类)SGX不支持的系统调用,比如内存分配、读、写、多线程、多进程等,实现对SGX中不支持的系统调用的重写,并基于SGX SDK重新实现。
步骤52,修改glibc库源码。
通过重定向glibc库中SGX不支持的系系统调用(至少一个所述第一系统调用)为修改后的系统调用(至少一个所述第三系统调用),完成glibc源码的修改。
步骤53,重新编译修改后的glibc源码,生成glibc动态链接库(所述SGX支持的动态链接库)。
如包括:libc.so.6、ld-linux-x86-64.so.23、libpthread.so.0等。
二、建立隔离运行环境
基于SGX技术实现软件的隔离运行,隔离运行环境包含应用程序运行依赖的动态链接库、配置文件等。
在隔离环境中重定向软件运行所依赖的动态链接库,比如libc.so.6、ld-linux-x86-64.so.23、libpthread.so.0等,不影响系统中运行的其他软件,同时也提升软件的安全性。
如图6所示,建立隔离运行环境的步骤包括:
步骤61,生成软件依赖文件列表,依赖文件包含配置文件、动态连接库等,其中libc.so.6、ld-linux-x86-64.so.23、libpthread.so.0为修改后支持SGX的glibc动态库。
步骤62,对软件和列表中的文件进行哈希hash运算,并将文件的hash值写入列表,保证软件和依赖文件的完整性,在该依赖文件列表中保存依赖文件的基准hash值。
步骤63,软件加载工具创建基于SGX的安全内存区,即隔离运行环境。
步骤64,在隔离运行环境中加载经过修改的glibc库以及Linux系统调用库,从而建立目标软件运行的基础环境。
可以理解为,基于SGX创建安全内存区,通过软件加载工具在SGX的安全内存区中加载经过。