CN110674474A - 一种应用程序的运行控制方法及装置 - Google Patents
一种应用程序的运行控制方法及装置 Download PDFInfo
- Publication number
- CN110674474A CN110674474A CN201910886640.XA CN201910886640A CN110674474A CN 110674474 A CN110674474 A CN 110674474A CN 201910886640 A CN201910886640 A CN 201910886640A CN 110674474 A CN110674474 A CN 110674474A
- Authority
- CN
- China
- Prior art keywords
- sgx
- application program
- system call
- supported
- dynamic link
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000001419 dependent effect Effects 0.000 claims description 62
- 238000002955 isolation Methods 0.000 claims description 24
- 238000005259 measurement Methods 0.000 claims description 9
- 238000012795 verification Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 5
- 238000011161 development Methods 0.000 abstract description 6
- 238000012986 modification Methods 0.000 abstract description 6
- 230000004048 modification Effects 0.000 abstract description 6
- 238000000354 decomposition reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000005215 recombination Methods 0.000 description 2
- 230000006798 recombination Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种应用程序的运行控制方法及装置。方法包括获得基于至少一个第一系统调用以及至少一个第二系统调用编写的预设编程语言的标准库的源码,第一系统调用为SGX不支持的系统调用,第二系统调用为SGX支持的系统调用;根据至少一个第一系统调用,获得至少一个第三系统调用,所述第三系统调用是第一系统调用经过修改后得到的SGX支持的系统调用;根据至少一个第二系统调用以及至少一个第三系统调用,得到SGX支持的动态链接库;根据SGX支持的动态链接库,控制应用程序在SGX的安全内存上运行。本发明避免了对软件源码的大量重复修改,实现不增加开发成本的同时,软件可以运行在SGX的安全内存上,保护了软件的机密性和完整性,增强了软件的运行安全。
Description
技术领域
本发明涉及信息安全技术领域,尤其涉及一种应用程序的运行控制方法及装置。
背景技术
软件安全是信息安全领域的重要内容,也是软件开发者面临的严峻挑战。传统的安全手段很难保障软件运行过程中的内存安全。软件防护扩展(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的安全内存区中加载经过修改的SGX支持的glibc库以及Linux系统调用库,从而建立目标软件(应用程序)的隔离运行环境。
三、解析软件并启动软件
解析软件的ELF文件,在隔离环境中为软件分配内存,启动软件,使得软件运行在安全内存中。如图7所示,解析软件并启动软件的步骤包括:
步骤71,加载软件和依赖文件。
使用软件加载工具,加载软件(应用程序)及依赖文件列表。
步骤72,校验软件和依赖文件。
加载过程中对软件及其依赖文件重新计算哈希hash值,并与保持在依赖文件列表中的基准hash值进行比较,保证软件及软件依赖文件的完整性。
步骤73,解析软件的ELF文件,分配SGX的安全内存。
解析目标软件文件(如目标软件应用程序为ELF格式的文件),根据ELF文件格式识别目标软件的数据段代码段,然后在上述隔离环境中的所述SGX的安全内存中为目标软件的数据和代码分配空间。
步骤74,启动软件。实现目标软件在所述SGX的安全内存中运行。
通过上述方案,在未增加软件的开发成本的同时,使得软件运行在SGX的安全内存中,保护了软件的代码及数据安全。
下面对本发明提供的一种用于实现上述方法的装置进行介绍。
如图8,其示出的是本发明提供一种应用程序的运行控制装置,所述装置800包括:
第一获取模块801,用于获得预设编程语言的标准库的源码,所述预设编程语言的标准库的源码中包括软件防护扩展SGX不支持的至少一个第一系统调用以及所述SGX支持的至少一个第二系统调用;
第二获取模块802,用于根据所述SGX不支持的至少一个第一系统调用,获得所述SGX支持的至少一个第三系统调用;
第三获取模块803,用于根据所述至少一个第二系统调用以及所述至少一个第三系统调用,得到所述SGX支持的动态链接库;
控制模块804,用于根据所述SGX支持的动态链接库,控制应用程序在所述SGX的安全内存上运行。
可选的,第二获取模块802,包括:
将所述SGX不支持的至少一个第一系统调用进行分类,得到多种类型的系统调用;
将所述多种类型的系统调用按照SGX的软件开发工具包SDK重新实现,得到所述SGX支持的至少一个第三系统调用。
可选的,第三获取模块803,包括:
将所述预设编程语言的标准库的源码中的至少一个所述第一系统调用重定向为至少一个所述第三系统调用,根据至少一个所述第二系统调用以及至少一个所述第三系统调用,获得SGX支持的动态链接库的源码;
对SGX支持的动态链接库的源码进行编译,得到所述SGX支持的动态链接库。
可选的,控制模块804,包括:
第一控制子模块,用于根据所述SGX支持的动态链接库和所述SGX的安全内存,建立所述应用程序运行的隔离环境;
第二控制子模块,用于控制所述应用程序在所述隔离环境中的所述SGX的安全内存中运行。
可选的,第一控制子模块,包括:
第一控制单元,用于根据所述SGX支持的动态链接库以及配置文件,生成所述应用程序的依赖文件列表;
第二控制单元,用于对所述依赖文件和所述应用程序进行完整性度量,并将生成的基准度量值写入所述依赖文件列表;
第三控制单元,用于创建所述SGX的安全内存;
第四控制单元,用于加载所述SGX支持的动态链接库至所述SGX的安全内存,得到所述应用程序运行的隔离环境。
可选的,第二控制单元,可以具体用于:
对所述依赖文件进行哈希运算,生成第一哈希值;
将所述第一哈希值作为完整性度量的所述基准度量值,并将所述第一哈希值写入所述依赖文件列表。
可选的,第二控制子模块,包括:
第五控制单元,用于加载所述应用程序和所述依赖文件列表;
第六控制单元,用于对所述应用程序和所述依赖文件列表中的所述依赖文件进行校验;
第七控制单元,用于校验通过后,在所述隔离环境中的所述SGX的安全内存中,为所述应用程序分配运行所需的内存空间;
第八控制单元,用于控制所述应用程序在分配的所述内存空间中运行。
可选的,第六控制单元,可以具体用于:
对所述应用程序和所述依赖文件进行哈希运算,生成第二哈希值;
将所述第二哈希值与所述依赖文件列表中的所述基准度量值进行比较,若所述第二哈希值与基准哈希值匹配,则校验通过。
可选的,第七控制单元,可以具体用于:
通过解析所述应用程序的文件,获取所述应用程序的文件格式;
根据所述应用程序的文件格式,识别所述应用程序的数据段和代码段;
在所述SGX的安全内存中,为所述应用程序的数据和代码分配运行所需的内存空间。
该装置是与上述方法实施例对应的装置,上述方法实施例中的所有实现方式均适用于该装置的实施例中,也能达到与方法实施例相同的技术效果。
本领域技术人员可以理解,实现上述实施例的全部或者部分步骤可以通过硬件来完成,也可以通过计算机程序来指示相关的硬件来完成,所述计算机程序包括执行上述方法的部分或者全部步骤的指令;且该计算机程序可以存储于一可读存储介质中,存储介质可以是任何形式的存储介质。
此外,需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行,某些步骤可以并行或彼此独立地执行。对本领域的普通技术人员而言,能够理解本发明的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
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中任一项所述的应用程序的运行控制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910886640.XA CN110674474B (zh) | 2019-09-19 | 2019-09-19 | 一种应用程序的运行控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910886640.XA CN110674474B (zh) | 2019-09-19 | 2019-09-19 | 一种应用程序的运行控制方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110674474A true CN110674474A (zh) | 2020-01-10 |
CN110674474B CN110674474B (zh) | 2021-07-20 |
Family
ID=69076892
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910886640.XA Active CN110674474B (zh) | 2019-09-19 | 2019-09-19 | 一种应用程序的运行控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110674474B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553071A (zh) * | 2021-07-16 | 2021-10-26 | 北京比特大陆科技有限公司 | 软件安装方法、计算机设备和存储介质 |
CN113703880A (zh) * | 2021-10-22 | 2021-11-26 | 北京百度网讯科技有限公司 | 应用程序的启动方法、装置、电子设备及可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104134034A (zh) * | 2013-06-13 | 2014-11-05 | 腾讯科技(深圳)有限公司 | 控制应用运行的方法和装置 |
CN104216743A (zh) * | 2014-08-27 | 2014-12-17 | 中国船舶重工集团公司第七0九研究所 | 可配置的虚拟机启动完整性维护的方法及系统 |
CN105573734A (zh) * | 2014-10-17 | 2016-05-11 | 阿里巴巴集团控股有限公司 | 一种用于提供sdk文件的方法与设备 |
CN107203410A (zh) * | 2017-04-14 | 2017-09-26 | 华中科技大学 | 一种基于系统调用重定向的vmi方法及系统 |
CN107305495A (zh) * | 2016-04-19 | 2017-10-31 | 华为技术有限公司 | 实现软件安装包功能修改的方法及终端 |
CN109063471A (zh) * | 2018-07-17 | 2018-12-21 | 广州大学 | 一种sgx运行的保护方法 |
CN109933350A (zh) * | 2019-03-07 | 2019-06-25 | 江苏通付盾信息安全技术有限公司 | 在应用中嵌入代码的方法、装置及电子设备 |
-
2019
- 2019-09-19 CN CN201910886640.XA patent/CN110674474B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104134034A (zh) * | 2013-06-13 | 2014-11-05 | 腾讯科技(深圳)有限公司 | 控制应用运行的方法和装置 |
CN104216743A (zh) * | 2014-08-27 | 2014-12-17 | 中国船舶重工集团公司第七0九研究所 | 可配置的虚拟机启动完整性维护的方法及系统 |
CN105573734A (zh) * | 2014-10-17 | 2016-05-11 | 阿里巴巴集团控股有限公司 | 一种用于提供sdk文件的方法与设备 |
CN107305495A (zh) * | 2016-04-19 | 2017-10-31 | 华为技术有限公司 | 实现软件安装包功能修改的方法及终端 |
CN107203410A (zh) * | 2017-04-14 | 2017-09-26 | 华中科技大学 | 一种基于系统调用重定向的vmi方法及系统 |
CN109063471A (zh) * | 2018-07-17 | 2018-12-21 | 广州大学 | 一种sgx运行的保护方法 |
CN109933350A (zh) * | 2019-03-07 | 2019-06-25 | 江苏通付盾信息安全技术有限公司 | 在应用中嵌入代码的方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
王鹃等: "SGX技术的分析和研究", 《软件学报》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553071A (zh) * | 2021-07-16 | 2021-10-26 | 北京比特大陆科技有限公司 | 软件安装方法、计算机设备和存储介质 |
CN113553071B (zh) * | 2021-07-16 | 2024-03-12 | 北京比特大陆科技有限公司 | 软件安装方法、计算机设备和存储介质 |
CN113703880A (zh) * | 2021-10-22 | 2021-11-26 | 北京百度网讯科技有限公司 | 应用程序的启动方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110674474B (zh) | 2021-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107291480B (zh) | 一种函数调用方法及装置 | |
US9027075B2 (en) | Enforcing security rules at runtime | |
US10223528B2 (en) | Technologies for deterministic code flow integrity protection | |
JP5333232B2 (ja) | プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びにデバッグ用プログラム | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
US20180101370A1 (en) | Selective generation of multiple versions of machine code for source code functions for execution on different processor versions and/or architectures | |
US20110314459A1 (en) | Compiler with user-defined type inference rules | |
JP2019502197A (ja) | ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法 | |
US20160224793A1 (en) | Static program analysis method for detecting security bugs in programs that rely on code access control | |
CN104798075A (zh) | 应用随机化 | |
CN110674474B (zh) | 一种应用程序的运行控制方法及装置 | |
CN109388946B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN105849698B (zh) | 动态编程中的执行防护 | |
CN109491664B (zh) | iOS应用程序的生成方法、装置、设备及存储介质 | |
US9129137B2 (en) | Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine | |
US20190205528A1 (en) | Automated software application verification system | |
US20020032901A1 (en) | Unitary data structure systems, methods, and computer program products, for global conflict determination | |
JP2018152061A (ja) | 安全なジャストインタイム(jit)コード生成 | |
KR102173151B1 (ko) | 원본코드 자동추출장치 및 원본코드 자동추출방법 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
KR102209151B1 (ko) | 바이너리 취약점 패치 방법 및 장치 | |
WO2014162250A4 (en) | Method for enabling independent compilation of program and a system therefor | |
US20110167415A1 (en) | Language processing apparatus, language processing method, and computer program product | |
US9417871B2 (en) | Automatic generation of certificate of origin (COO) for software systems | |
CN115904384A (zh) | 应用程序发布的配置方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |