CN112527307B - 程序控制流隐藏方法、系统及应用 - Google Patents
程序控制流隐藏方法、系统及应用 Download PDFInfo
- Publication number
- CN112527307B CN112527307B CN202011295175.1A CN202011295175A CN112527307B CN 112527307 B CN112527307 B CN 112527307B CN 202011295175 A CN202011295175 A CN 202011295175A CN 112527307 B CN112527307 B CN 112527307B
- Authority
- CN
- China
- Prior art keywords
- program
- control flow
- function
- sensitive
- variables
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明属于控制流混淆技术领域,公开了一种程序控制流隐藏方法、系统及应用,将出现在原程序分支语句中的变量标记为敏感变量;对包括所述敏感变量的语句进行转换以隐藏所述敏感变量,获得转换后的程序和控制流矩阵;将转换后的程序和控制流矩阵发送至远程计算单元,所述转换后的程序存储在所述远程计算单元的不可信环境中,控制流矩阵经本地AES加密后存储在所述远程计算单元的可信执行环境(TEE,Trusted Execution Environment)中;基于控制流矩阵和可信环境中对于敏感变量的内存管理模型,在所述远程计算单元中执行所述转换后的程序。本发明将程序中所有拥有敏感变量的语句经过转换程序转换,并执行移动到不透明且可信的硬件执行环境中,保证程序的高机密性。
Description
技术领域
本发明属于控制流混淆技术领域,尤其涉及一种程序控制流隐藏方法、系 统及应用。
背景技术
可信执行环境(TEE)作为一种新的处理器安全架构被云提供商和开发者广 泛应用。TEE在硬件上划分了一块可信区域,保证了可信区域外部的代码(包 括操作系统和hypervisor)不会侵犯可信区域内部运行的程序的数据完整性和执 行机密性。基于TEE提供的远程协议,使可信区域中的程序不会被攻击者恶意 篡改,从而保证了完整性。目前支持TEE的硬件实现有AMD的PSP(Platform Security Processor)处理器,ARM TrustZone技术,Intel SGX Software Guard Extensions(Intel SGX)等。
当前的云服务要求用户在云供应商提供的服务器上执行他们的程序。由于 程序不再处于用户控制的环境中,软件可能会受到各种攻击,因此需要保护。 对于云用户,保护控制流机密性与保护数据机密性同等重要。原因是一个程序 的控制流可能反映了一种属于用户知识产权的独特算法。此外,它还可能包含 执行逻辑,这些逻辑一旦被攻击者发现,就可能间接地危害正在处理的数据的 安全性。因此,需要一种有效的方法来保护这种设置下的控制流机密性。
现有的控制流混淆方法存在安全性低、通用性差或开销大的问题。例如, Xu等人提出了一种构造符号不透明谓词的技术,但这种方法无法针对攻击者对 程序的动态分析;Sharif等人将分支语句中的条件表达式转换为加密形式,但却 只能保护相等谓词和不相等谓词,从而失去了通用性和一般性;Lan等人提出用 lambda演算模拟来转换条件指令,它可以抵抗基于符号执行的逆向工程攻击, 然而,他们的实验结果显示,保护了30%的条件语句就会导致68到248倍的时 间开销;CFHider提出了一种使用Intel Software GuardExtensions(SGX)的控制流 混淆解决方案,它将分支语句的求值表达式隐藏到一个SGXEnclave中,并且 只返回来自SGX Enclave的求值结果,他们的工作证明,通过创建模糊不变量, 攻击者无法推导出隐藏表达式。但是CFHider中引入的混淆不变量具有唯一的 代码模式,攻击者可以很容易地识别它,他们的工作没有讨论如何创建无模式 模糊不变量,所以安全性存在一定的问题。Glamdring和Ryoan专注于保护远程 程序中的数据机密性,但没有解决程序控制流的机密性问题。许多解决方案关 注于保护特定系统的安全性,如可堆叠文件系统(NeXUS)、Python版本的Spark (SGX-PySpark)、数据库系统(EnclaveDB)、ApacheZooKeeper、C++版本的 MapReduce(VC3)和C程序(Glamdring)等,但他们又缺乏通用性。
通过上述分析,现有技术存在的问题及缺陷为:现有的控制流混淆方法存 在安全性低、通用性差或开销大。
解决以上问题及缺陷的难度为:1)更安全通用的控制流隐藏算法。2)可 支持大多数编程语言。3)可证明的安全算法。
解决以上问题及缺陷的意义为:1)解决了CFHider混淆不变量的问题,又 进一步扩大了隐藏范围,保证了安全性。2)不止应用于c/c++语言,能通过JNI 的方式应用于更多语言的程序,为方案带来通用性。3)证实此发明方案的安全 性。
发明内容
针对现有技术存在的问题,本发明提供了一种程序控制流隐藏方法、系统 及应用。
本发明是这样实现的,一种程序控制流隐藏方法,所述程序控制流隐藏方 法包括:
变量内存模型隐藏,为TEE的可信区域中被调用的每个函数维护一个堆栈 框架;
变量隐藏,对包括敏感变量的所有程序语句进行转换以隐藏敏感变量,获 得转换程序和控制流矩阵;控制流矩阵包括转换的程序语句在原程序中的唯一 标识、左右操作数的标识、计算的操作符、目标操作数在TEE的可信区域中的 标识。
进一步,所述变量内存模型隐藏具体包括:系统在每个转换后的程序函数 的开头插入一个第一自定义接口函数,并在当前函数的末尾,再插入一个第二 自定义接口函数,所述第二自定义接口函数的参数指向该函数在TEE的可信区 域中对应的堆栈帧。
进一步,所述变量隐藏中,进行转换的程序语句包括敏感变量作为目标操 作数的语句、敏感变量作为源操作数的语句、分支语句和敏感变量作为形式参 数的函数调用语句。
进一步,对敏感变量作为目标操作数的语句进行转换具体包括:将原程序 中敏感变量作为目标操作数的语句转换成第三自定义接口函数,并生成对应的 指令及随机列表;所述第三自定义接口函数的第一参数表示当前转换的语句的 唯一标识;所述第三自定义接口函数的第二参数表示非敏感变量的列表,所述 第三自定义接口函数的第三参数表示当前函数的通用唯一标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表; 所述随机列表中的变量包括源操作数;所述指令中源操作数的标识指向所述随 机列表中的源操作数;所述通用唯一标识符即为TEE的可信区域中创建的堆栈 框架的唯一标志符;
对敏感变量作为目标操作数的语句进行转换具体包括:将敏感变量转换成 第四自定义接口函数,并生成对应的指令及随机列表;所述第四自定义接口函 数的第一参数表示当前转换的语句在原程序中的唯一标识;所述第四自定义接 口函数的第二参数表示当前转换的语句的随机列表;所述第四自定义接口函数 的第三参数表示当前函数的通用唯一标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表; 所述指令中源操作数的标识用源操作数中的敏感变量表示;所述通用唯一标识 符即为TEE的可信区域中创建的堆栈框架的唯一标志符;
将原程序中分支语句条件转换成第五自定义函数,并生成对应的控制流矩 阵;将原程序中分支语句条件转换成第五自定义接口函数,并生成对应的指令 及随机列表;所述第五自定义接口函数的第一参数表示当前转换的分支语句在 原程序中的唯一标识;所述第五自定义接口函数的第二参数表示当前转换的语 句的随机列表;所述第五自定义接口函数的第三参数表示当前函数的通用唯一 标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表; 所述指令中分支语句的标识用对应的敏感变量表示;所述通用唯一标识符即为 TEE的可信区域中创建的堆栈框架的唯一标志符;
对敏感变量作为函数调用中的形式参数的语句进行转换具体包括:
调用函数,在此函数调用之前,插入一个第三自定义接口函数;如果该函 数调用存在返回值为敏感变量的情况,那么在此函数调用之后,也会插入一个 第三自定义接口函数;
被调用函数,将参数列表的敏感变量删除,并在参数列表末尾添加一个唯 一标识符;在函数开头,插入一个第三自定义接口函数;如果该函数调用存在返 回值为敏感变量的情况,那么被调用函数的返回值定义将修改为void,并将被 调用函数的返回语句替换成一个第三自定义接口函数;
转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行 号表示。
进一步,所述程序控制流隐藏方法还包括:将所述转换程序和控制流矩阵 发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中, 所述控制流矩阵存储在所述远程计算单元的TEE的可信区域中;
基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序;
发送至远程计算单元的控制流矩阵为加密控制流矩阵;所述加密控制流矩 阵存储在所述远程计算单元的不可信环境中;在TEE证明执行环境正确后,对 所述加密控制流矩阵进行解密,然后存储在所述远程计算单元的TEE的可信区 域中。
本发明的另一目的在于提供一种实施所述的程序控制流隐藏方法,所述程 序控制流隐藏系统,包括:
变量隐藏模块,用于对包括所述敏感变量的所有程序语句进行转换以隐藏 所述敏感变量,获得转换后程序和控制流矩阵;所述控制流矩阵包括转换的程 序语句在原程序中的唯一标识、源操作数的标识、计算的操作符、目标敏感变 量标识;
变量内存管理模块,用于为原程序中每一个含有敏感变量的函数或线程分 配一个独立的堆栈帧,使程序上下文能按逻辑正确地访问或修改敏感变量,从 而使程序运行正确;
程序发送和验证模块,将所述转换后程序和加密后控制流矩阵发送至远程 计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制 流矩阵经远程验证后存储在所述远程计算单元的可信环境TEE中;
程序执行模块,基于所述控制流矩阵,通过可信环境TEE与不可信环境的 交互,在所述远程计算单元中执行所述转换程序。
本发明的另一目的在于提供一种控制流混淆方法,所述控制流混淆方法执 行所述的程序控制流隐藏方法。
结合上述的所有技术方案,本发明所具备的优点及积极效果为:本发明结 合程序变换技术和可信执行环境(TEE)技术,通过分析每个分支语句来提取出敏 感变量,并将程序中所有拥有敏感变量的语句经过转换程序转换成不可识别的 自定义函数(VariableQuery),同时生成一条指令(Cloak Instruction),并将其执行 移动到不透明且可信的硬件执行环境(称为Cloak Enclave)中,从而保证程序的高 机密性。能够隐藏每个分支语句及其变量出现的所有语句,保护了远程执行环 境场景下应用程序逻辑的机密性,避免了应用程序逻辑被外部攻击者恶意获取 和利用。
本发明采用程序控制流隐藏方法能够从每个分支语句条件的变量出发,隐 藏其在程序中出现的所有语句;包括函数调用语句,同样隐藏了调用函数和被 调用函数中该变量出现的所有语句。避免了应用程序逻辑被外部攻击者恶意获 取和分析利用。
本发明采用程序控制流隐藏方法,结合程序转换技术和可信执行环境(TEE) 技术,通过分析每个分支语句来提取出敏感变量,并将程序中所有拥有敏感变 量的语句经过转换程序转换并将其移动到不透明且可信的硬件执行环境(称为 Cloak Enclave)中执行,从而保证程序的高机密性。
本发明以Intel SGX为可信执行环境实例,实现了一个针对Java程序的控制 流保密系统,并在一组基准应用程序上测量了性能开销。所述基准应用程序包 括CPU密集型应用程序,如快速排序和二分搜索,以及大数据应用程序,如 Hadoop MapReduce作业。本发明具有可证明的安全性。所实现的系统具有可接 受的时间开销。本发明实现的系统在保护CPU密集型应用程序上产生了58.53% 到220%的性能开销,在保护Hadoop应用程序上产生了22.95%到114.58%的性 能开销。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所 需要使用的附图做简单的介绍,显而易见地,下面所描述的附图仅仅是本申请 的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下 还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的程序控制流隐藏方法流程图。
图2是本发明实施例提供的程序控制流隐藏系统的结构示意图;
图2中:1、变量隐藏模块;2、变量内存管理模块;3、程序发送和验证模 块;4、程序执行模块。
图3是本发明实施例的程序过程内的原程序和转换后的程序和控制流矩阵 的变换示例;
图4是本发明实施例的程序过程间的原程序和转换后的程序和控制流矩阵 的变换示例。
图5为本发明实施例的程序控制流隐藏方法流程图。
图6为本发明实施例的程序控制流隐藏系统结构图。
图7是本发明实施例的敏感变量的内存模型(CMM)设计图。
图8是本发明实施例的Hadoop实验结果的对比数据图。
图9是本发明实施例的Hadoop实验运行时间根据数据量的变化折线图。
图10是本发明实施例的CPU密集型应用程序的实验结果图。
图11是本发明实施例的Hadoop实验运行时所调用的VQ函数数量图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例, 对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以 解释本发明,并不用于限定本发明。
针对现有技术存在的问题,本发明提供了一种程序控制流隐藏方法、系统 及应用,下面结合附图对本发明作详细的描述。
如图1所示,本发明提供的程序控制流隐藏方法包括以下步骤:
S101:变量内存模型隐藏,为了保证不同函数调用对同一TEE的可信区域 中的敏感变量的访问不会冲突,本系统为TEE的可信区域中被调用的每个函数 维护了一个堆栈框架。
S102:变量隐藏,对包括所述敏感变量的所有程序语句进行转换以隐藏所 述敏感变量,获得转换程序和控制流矩阵;所述控制流矩阵包括转换的程序语 句在原程序中的唯一标识、左右操作数的标识、计算的操作符、目标操作数在 TEE的可信区域中的标识。
本发明提供的程序控制流隐藏方法业内的普通技术人员还可以采用其他的 步骤实施,图1的本发明提供的程序控制流隐藏方法仅仅是一个具体实施例而 已。
如图2所示,本发明提供的程序控制流隐藏系统包括:
变量隐藏模块1,用于对包括所述敏感变量的所有程序语句进行转换以隐藏 所述敏感变量,获得转换后程序和控制流矩阵;所述控制流矩阵包括转换的程 序语句在原程序中的唯一标识、源操作数的标识、计算的操作符、目标敏感变 量标识。
变量内存管理模块2,用于为原程序中每一个含有敏感变量的函数或线程分 配一个独立的堆栈帧,使程序上下文能按逻辑正确地访问或修改敏感变量,从 而使程序运行正确。
程序发送和验证模块3,将所述转换后程序和加密后控制流矩阵发送至远程 计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制 流矩阵经远程验证后存储在所述远程计算单元的可信环境TEE中。
程序执行模块4,基于所述控制流矩阵,通过可信环境与不可信环境的交互, 在所述远程计算单元中执行所述转换程序。
下面结合附图对本发明的技术方案作进一步的描述。
本发明的程序控制流隐藏方法可以在用户主机上离线实现,所述的原程序 可以是基于三地址码的程序。
本发明的控制流矩阵M可以由指令(Cloak Instruction)组成,指令表示如下:
Cloak Instruction={i(s),left,right,op,dest}
其中,i(s)表示转换的程序语句在原程序中的唯一标识,left和right表示转 换的程序语句在原程序中的源操作数的标识,op表示转换的程序语句在原程序 中的计算的操作符,dest表示转换的程序语句在原程序中的作为目标操作数的敏 感变量。本实施例中,转换的程序语句在原程序中的唯一标识用转换的程序语 句在原程序中的行号表示。
本实施例中,所述变量内存模型隐藏,如图7所示,具体包括:
在原程序所有函数的起始位置插入第一自定义接口函数,具体的,所述第 一自定义接口函数可以表示如下:
string getUUID();
其中,所述第一自定义接口函数返回值为一个通用唯一标识符(UUID),它 与创建的堆栈框架以及当前函数内的敏感变量相关联。
相应的,在原程序所有函数的返回语句之前插入第二自定义接口函数,具 体的,所述第二自定义接口函数可以表示如下:
void delete(UUID);
其中,UUID表示当前函数或者线程从第一接口函数得到的通用唯一标识符。 该接口函数在函数返回之前将删除该函数在TEE的可信区域中对应的堆栈帧。 这样做,可以防止Enclave中的内存被耗尽。
本实施例中,所述变量隐藏中,进行转换的程序语句包括敏感变量作为目 标操作数的语句、敏感变量作为源操作数的语句,所有分支语句和函数调用语 句。普遍地,定义x和y表示分支语句条件中变量,即敏感变量。
如图3和图4所示,如下以原程序中包括分支语句if(x op y)then{goto L}进 行具体说明。其中,x和y表示分支语句条件中变量,即敏感变量。
对敏感变量作为目标操作数的语句(x:=left op right)进行转换,具体包括:
将原程序中敏感变量作为目标操作数的语句转换成第三自定义函数,并生 成对应的控制流矩阵及随机列表;所述第三自定义函数的第一参数表示当前转 换的语句在原程序中的唯一标识;所述第三自定义函数的第二参数表示当前转 换的语句的随机列表;所述第三自定义函数的第三参数表示当前方法通过第一 接口函数得到的通用唯一标识符,它指向TEE的可信区域中该方法所在敏感变 量的内存地址;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表; 所述随机列表中的变量包括源操作数;所述控制流矩阵中源操作数的标识指向 所述随机列表中的源操作数或者TEE的可信区域中的敏感变量的源操作数。
具体的,所述第三自定义函数可以表示如下:
void update(i(s),L(s),UUID);
其中,i(s)表示当前转换的语句在原程序中的唯一标识,L(s)表示当前函数 中除了敏感变量之外的所有变量形成的随机列表,UUID表示当前函数通过第一 接口函数得到的通用唯一标识符。
相应的,其指令(Cloak Instruction)可以表示如下:
<i(s),left,right,op,x>;
其中,left和right为源操作数在L(s)中的索引。基于指令中的left和right, 可以从L(s)中找出相应的源操作数,如果源操作数为敏感变量,left或right将为 相应的敏感变量名。
对敏感变量作为源操作数的语句(re:=x op right)进行转换,具体包括:
将敏感变量转换成第四自定义函数,并生成对应的控制流矩阵及随机列表; 所述第四自定义函数的第一参数表示当前转换的语句在原程序中的唯一标识; 所述第四自定义函数的第二参数表示当前转换的语句的随机列表;所述第四自 定义函数的第三参数表示当前方法通过第一接口函数得到的通用唯一标识符, 它指向TEE的可信区域中该方法所在敏感变量的内存地址。
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表; 所述控制流矩阵中源操作数的标识指向所述随机列表中的源操作数或者TEE的 可信区域中的敏感变量的源操作数。
具体的,所述第四自定义函数可以表示如下:
type get(i(s),L(s),UUID);
转换后的程序语句可以表示如下:
re:=get(i(s),L(s),UUID);
其中,i(s)表示当前转换的语句在原程序中的唯一标识,L(s)表示当前函数 中除了敏感变量之外的所有变量形成的随机列表,UUID表示当前函数通过第一 接口函数得到的通用唯一标识符。需要说明的是所述返回值的类型可以是任意 基本类型,具体实现时可以是不同的类型。
相应的,其指令(Cloak Instruction)可以表示如下:
<i(s),x,right,op,null>;
其中,right为源操作数在L(s)中的索引,基于指令中的right,可以从L(s)中 找出相应的源操作数,如果源操作数为敏感变量,right将为相应的敏感变量名; 当字段dest为null时,表示该指令需要向不可信环境返回值。
将原程序中分支语句(if(x op y)then{goto L})条件转换成第五自定义函数,并生成对应的控制流矩阵;所述第五自定义函数的第一参数表示当前转换的分 支语句在原程序中的唯一标识;所述第五自定义函数的第二参数表示当前转换 的语句的随机列表,作为混淆使用;所述第五自定义函数的第三参数表示当前 方法通过第一接口函数得到的通用唯一标识符,它指向TEE的可信区域中该方 法所在敏感变量的内存地址。
具体的,所述第五自定义函数可以表示如下:
boolean evaluate(i(s),L(s),UUID);
分支语句可以转换如下:
if(evaluate(i(s),L(s),UUID))then{goto L};
其中,i(s)表示当前转换的语句在原程序中的唯一标识,L(s)表示当前函数 中除了敏感变量之外的所有变量形成的随机列表,UUID表示当前函数通过第一 接口函数得到的通用唯一标识符。
相应的,其指令(Cleak Instruction)可以表示如下:
<i(s),x,y,op,null>;
其中,当字段dest为null时,表示该指令需要向不可信环境返回值。
如图4所示,对敏感变量作为函数调用中的形式参数的语句(re:=callee(x,a))进行转换,(假设a为非敏感变量)具体包括:
调用函数,将原程序中函数调用的敏感变量删除,并在参数列表末尾添加 一个当前函数唯一标识符(UUID)。
转换后的程序语句可以表示如下:
re:=callee(a,caller.UUID);
为了保证程序正确运行,在此函数调用之前,会插入一个第三自定义接口 函数(Update),目的是将函数调用的敏感变量更新到TEE的可信区域中;如果该 函数调用存在返回值为敏感变量的情况,那么在此函数调用之后,也会插入一 个第三自定义接口函数(Update),目的是将调用函数返回的值更新到该敏感变量 所指向的内存中。
具体可以表示如下:
void update(i(s),L(s),UUID);
void callee(a,UUID);
void update(i(s),L(s),UUID);
被调用函数,将参数列表的敏感变量删除,并在参数列表末尾添加一个唯 一标识符(caller.UUID);函数开头,插入一个第三自定义接口函数(Update),目 的是将调用函数的敏感变量更新到当前被调用函数的TEE的可信区域中;如果 该函数调用存在返回值为敏感变量的情况,那么被调用函数的返回值定义将修 改为void,并将被调用函数的返回语句替换成一个第三自定义接口函数(Update), 目的是将被调用函数的敏感变量对应的返回值更新到调用函数的返回值所指向 的内存中。
具体可以表示如下:
void callee(type a,String caller.UUID){
void update(i(s),L(s),caller.UUID)
…
void update(i(s),L(s),caller.UUID)
}
如图5所示,第二方面,一种程序控制流隐藏方法,包括:
步骤401,程序转换阶段,首先将出现在原程序分支语句中的变量标记为敏 感变量。然后,将原程序中包含敏感变量的所有语句转换为自定义的接口函数 (VariableQuery),每个函数对应一条自定义的指令(Cloak Instruction)。
步骤402,远程发送和认证阶段,系统将所有自定义指令组成为控制流矩阵 M,将矩阵在本地进行AES加密后和转换后的程序一起发送到公有云端等待被 执行:其中转换后的程序将被发送到不可信的云环境;加密后的矩阵通过验证 后会在公有云端和TEE之间建立一个受保护的秘密共享通道,从而被发送到可 信的执行环境(TEE)中。
步骤403,执行阶段,在程序执行期间,敏感变量存储和计算在受信任区域。 不受信任区域与受信任区域交互以完成计算。具体来说,当转换后的程序需要 一个从受保护变量派生的值时,它调用VQ函数来接收来自可信执行环境(TEE) 的脱敏值;在TEE中,通过接收来自不可信区域的VQ函数调用,可以基于一 些非敏感变量来更新一些敏感变量的值。
上述的步骤401至402可以在用户主机上实现,所述的步骤403在远程计算单 元(公有云)上实现,所述的原程序可以是基于三地址码的程序。
所述自定义接口函数(Variable Query)分别为getUUID,Delete,Update,Get,Evaluate五种函数;所述指令(Cloak Instruction)格式表示如下:
Cloak Instruction={i(s),left,right,op,dest};
其中,i(s)表示转换的程序语句在原程序中的唯一标识,left和right表示转 换的程序语句在原程序中的源操作数的标识,op表示转换的程序语句在原程序 中的计算的操作符,dest表示转换的程序语句在原程序中的作为目标操作数的敏 感变量。本实施例中,转换的程序语句在原程序中的唯一标识用转换的程序语 句在原程序中的行号表示。程序中的所有指令组成了控制流矩阵M。
如图6所示,该系统将云环境分成受信任区域和不受信任区域,受信任的区 域位于TEE内,称为“Cloak Enclave”,然后将与控制流相关的变量(即敏感变量) 及其计算移动到受信任区域内并将程序的其余部分移动到不受信任区域来转换 整个原始程序。在程序执行期间,不受信任区域中的程序调用自定义接口函数(VQ),以从受信任区域接收不敏感的值,受信任区域还通过接收VQ函数从不 受信任区域接收值,通过这两个区域相互作用达到使程序正常运行的目的。为 了在不受信任的远程环境中安全地执行一个原始程序P,该系统首先将P转换为 一个转换后的程序P’和一个控制流矩阵M。在转换过程中,该系统首先识别所 有的敏感变量。然后,它将包含敏感变量的每条语句转换为自定义接口函数(VQ)和对应的指令(CI)。最后,该系统将所有指令保存到一个控制流矩阵M中。经 过转换后,P’和M的密文(标记为E(M))将被发送到公共云上,其中P’将被发送 到云主机并在一个不受信任的区域执行,E(M)将被发送到Cloak Enclave中,这 是一个存储和计算敏感变量的区域,也被称为可信区域。在程序执行之前,Cloak Enclave首先需要通过远程认证协议进行验证,一旦经过验证,Cloak Enclave将 接收E(M)的解密密钥以恢复出控制流矩阵M。在程序执行期间,敏感变量被存 储并计算在受信任区域,不受信任区域与受信任区域交互以完成计算。具体来 说,当P’需要一个从敏感变量派生的值时,它调用VQ函数来接收来自CloakEnclave的脱敏值;在Cloak Enclave中,通过接收来自不可信区域的VQ函数调 用,可以基于一些非敏感变量来更新一些敏感变量的值。
进一步的,如图7所示,本发明将介绍Cloak Enclave的设计细节。为了使 CloakEnclave高效运行并支持递归和多线程,设计了一个名为CFCloak Memory Model(CMM)的内存模型。CMM的主要目标是为Cloak Enclave中被调用的每个 函数都维护一个堆栈框架,这可以避免不同函数中的自定义函数调用冲突。为 了实现这一目标,该系统在每个转换后的程序函数(称为Caller_i)的开头插入 一个新的VQ函数调用getUUID,如图7中不可信区域的第二行所示。一旦Cloak Enclave接收到这个函数调用,它将为当前函数创建一个堆栈框架(即Caller_i) 并返回一个通用唯一标识符(UUID),它与创建的堆栈框架相关联。本发明还通 过插入参数UUID来扩展现有的VQ函数(get、update、evaluate),UUID表示指 令中涉及的变量的堆栈框架。当enclave接收到VQ函数时,它首先标识与UUID 关联的堆栈帧。在该堆栈帧中,它定位指令中指定的受保护变量。在每个函数 的末尾,CFCloak插入一个新的VQ函数delete,该函数在函数返回时删除堆栈 帧。这样做,TEE中的内存就不会耗尽。根据图7所示,CMM使用散列映射 (HashMap)管理存储区域(堆栈帧),其中键为UUID i(i∈1,2,3),每个键为UUID, 其指向一个专用的堆栈帧结构SF i,它存储该堆栈帧下的所有变量。通过CMM 的设计,每个函数执行都有一个唯一的UUID,它指向一个专用的堆栈框架结构, 因此可以支持递归和多线程程序。
其中,所述VQ函数getUUID()为第一自定义接口函数,所述delete(UUID) 为第二自定义接口函数。具体的,所述第一自定义接口函数可以表示如下:
string getUUID();
其中,所述第一自定义接口函数返回值为一个通用唯一标识符(UUID),它 与创建的堆栈框架以及当前函数内的敏感变量相关联。
相应的,在原程序所有函数的返回语句之前插入第二自定义接口函数,具 体的,所述第二自定义接口函数可以表示如下:
void delete(UUID);
其中,UUID表示当前函数或者线程从第一接口函数得到的通用唯一标识符。 该接口函数在函数返回之前将删除该函数在TEE的可信区域中对应的堆栈帧。 这样做,可以防止TEE中的内存被耗尽。
根据图8所示,在运行Word Count、PI、Tera Sort和Page Rank时,性能开 销较原程序分别为114.58%、48.71%、22.95%和48.62%。WordCount有较高开 销的原因是它有更多的VQ函数调用。根据图11的统计,Word Count中VQ函 数的调用次数分别是PI、TeraSort和Page Rank的10.31倍、6.15倍、5.11倍。 图5还显示,与CFHider相比,本发明带来了35.12%的性能开销。然而,本发 明必须指出CFHider只保护分支语句,但不保护其他涉及受保护变量的语句。 因此,本发明拥有更高的安全性。根据图9所示,本发明选择了三个Hadoop应 用程序来执行可扩展性的测试,以观察随着输入数据大小的增加,执行时间的增加趋势。对于WordCount和TeraSort,本发明将输入数据大小从1G增加到6G。在Page Rank应用程序中,本发明逐步将需要处理的页面数量从50,000增 加到300,000。为了进行比较,本发明选择基线作为原始应用程序在相同输入大 小下的执行时间。从图中可以看出,执行时间几乎是随着输入大小的增加而线 性增加的,与基线走势相似。
根据图10所示,与原始Java应用程序相比,CPU密集型应用程序的开销 在60%到220%之间。本发明还在CFHider上运行相同的应用程序,发现CFHider 带来了30%到160%的开销。本发明进一步研究了执行细节,发现开销主要与 ecalls的数量有关(即CFCloak的VQ和CFHider的CFQ)。本发明通过统计发 现,CFCloak中的ecalls数量是CFHider的1.6~4.0倍。如上所述,增加的ecall 用于保护涉及受保护变量的其他语句,而不仅仅是保护分支语句,从而提高了 安全性保证。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于 此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明 的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的 保护范围之内。
Claims (5)
1.一种程序控制流隐藏方法,其特征在于,所述程序控制流隐藏方法包括:
变量内存模型隐藏,为TEE的可信区域中被调用的每个函数维护一个堆栈框架;
变量隐藏,对包括敏感变量的所有程序语句进行转换以隐藏敏感变量,获得转换程序和控制流矩阵;控制流矩阵包括转换的程序语句在原程序中的唯一标识、左右源操作数的标识、计算的操作符、目标操作数在TEE的可信区域中的标识;
所述变量隐藏中,进行转换的程序语句包括敏感变量作为目标操作数的语句、敏感变量作为源操作数的语句、分支语句和敏感变量作为形式参数的函数调用语句;
对敏感变量作为目标操作数的语句进行转换具体包括:将原程序中敏感变量作为目标操作数的语句转换成第三自定义接口函数,并生成对应的指令及随机列表;所述第三自定义接口函数的第一参数表示当前转换的语句的唯一标识;所述第三自定义接口函数的第二参数表示非敏感变量的列表,所述第三自定义接口函数的第三参数表示当前函数的通用唯一标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表;所述随机列表中的变量包括源操作数;所述指令中源操作数的标识指向所述随机列表中的变量;所述通用唯一标识符即为TEE的可信区域中创建的堆栈框架的唯一标志符;
对敏感变量作为目标操作数的语句进行转换具体包括:将敏感变量转换成第四自定义接口函数,并生成对应的指令及随机列表;所述第四自定义接口函数的第一参数表示当前转换的语句在原程序中的唯一标识;所述第四自定义接口函数的第二参数表示当前转换的语句的随机列表;所述第四自定义接口函数的第三参数表示当前函数的通用唯一标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表;所述指令中源操作数的标识用源操作数中的敏感变量表示;所述通用唯一标识符即为TEE的可信区域中创建的堆栈框架的唯一标志符;
将原程序中分支语句条件转换成第五自定义函数,并生成对应的控制流矩阵;将原程序中分支语句条件转换成第五自定义接口函数,并生成对应的指令及随机列表;所述第五自定义接口函数的第一参数表示当前转换的分支语句在原程序中的唯一标识;所述第五自定义接口函数的第二参数表示当前转换的语句的随机列表;所述第五自定义接口函数的第三参数表示当前函数的通用唯一标识符;
所述随机列表表示原程序中除敏感变量之外的所有变量形成的随机列表;所述指令中分支语句的标识用对应的敏感变量表示;所述通用唯一标识符即为TEE的可信区域中创建的堆栈框架的唯一标志符;
对敏感变量作为函数调用中的形式参数的语句进行转换具体包括:
调用函数,在此函数调用之前,插入一个第三自定义接口函数;如果该函数调用存在返回值为敏感变量的情况,那么在此函数调用之后,也会插入一个第三自定义接口函数;
被调用函数,将参数列表的敏感变量删除,并在参数列表末尾添加一个唯一标识符;在函数开头,插入一个第三自定义接口函数;如果该函数调用存在返回值为敏感变量的情况,那么被调用函数的返回值定义将修改为void,并将被调用函数的返回语句替换成一个第三自定义接口函数;
转换的程序语句在原程序中的唯一标识用转换的程序语句在原程序中的行号表示。
2.如权利要求1所述的程序控制流隐藏方法,其特征在于,所述变量内存模型隐藏具体包括:系统在每个转换后的程序函数的开头插入一个第一自定义接口函数,并在当前函数的末尾,再插入一个第二自定义接口函数,所述第一、二自定义接口函数的参数指向该函数在TEE的可信区域中对应的堆栈帧。
3.如权利要求1~2任意一项所述的程序控制流隐藏方法,其特征在于,所述程序控制流隐藏方法还包括:将所述转换后的程序和控制流矩阵发送至远程计算单元;所述转换后的程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵存储在所述远程计算单元的TEE的可信区域中;
基于所述控制流矩阵,在所述远程计算单元中执行所述转换程序;
发送至远程计算单元的控制流矩阵为加密控制流矩阵;所述加密控制流矩阵存储在所述远程计算单元的不可信环境中;在TEE证明执行环境正确后,对所述加密控制流矩阵进行解密,然后存储在所述远程计算单元的TEE的可信区域中。
4.一种实施权利要求1~2任意一项所述的程序控制流隐藏方法的程序控制流隐藏系统,其特征在于,所述程序控制流隐藏系统,包括:
变量隐藏模块,用于对包括所述敏感变量的所有程序语句进行转换以隐藏所述敏感变量,获得转换后程序和控制流矩阵;所述控制流矩阵包括转换的程序语句在原程序中的唯一标识、源操作数的标识、计算的操作符、目标敏感变量标识;
变量内存管理模块,用于为原程序中每一个含有敏感变量的函数或线程分配一个独立的堆栈帧,使程序上下文能按逻辑正确地访问或修改敏感变量,从而使程序运行正确;
程序发送和验证模块,将所述转换后程序和加密后控制流矩阵发送至远程计算单元;所述转换程序存储在所述远程计算单元的不可信环境中,所述控制流矩阵经远程验证后存储在所述远程计算单元的TEE中;
程序执行模块,基于所述控制流矩阵,通过TEE与不可信环境的交互,在所述远程计算单元中执行所述转换程序。
5.一种控制流混淆方法,其特征在于,所述控制流混淆方法运行权利要求1~2任意一项所述的程序控制流隐藏方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011295175.1A CN112527307B (zh) | 2020-11-18 | 2020-11-18 | 程序控制流隐藏方法、系统及应用 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011295175.1A CN112527307B (zh) | 2020-11-18 | 2020-11-18 | 程序控制流隐藏方法、系统及应用 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527307A CN112527307A (zh) | 2021-03-19 |
CN112527307B true CN112527307B (zh) | 2023-06-20 |
Family
ID=74981256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011295175.1A Active CN112527307B (zh) | 2020-11-18 | 2020-11-18 | 程序控制流隐藏方法、系统及应用 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527307B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106845168A (zh) * | 2016-12-20 | 2017-06-13 | 西安电子科技大学 | 一种面向远程计算的控制流隐藏方法 |
CN109614774A (zh) * | 2018-11-23 | 2019-04-12 | 西安电子科技大学 | 一种基于sgx的程序控制流混淆方法及系统 |
CN111506313A (zh) * | 2020-03-04 | 2020-08-07 | 西安电子科技大学 | 一种基于神经网络的程序控制流混淆方法及系统 |
CN111538962A (zh) * | 2020-03-18 | 2020-08-14 | 西安电子科技大学 | 程序控制流混淆方法、系统、存储介质、云服务器及应用 |
CN111723345A (zh) * | 2020-05-09 | 2020-09-29 | 中国人民解放军战略支援部队信息工程大学 | 基于回调函数的控制流混淆方法及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10691793B2 (en) * | 2017-02-20 | 2020-06-23 | AlphaPoint | Performance of distributed system functions using a trusted execution environment |
US10902121B2 (en) * | 2017-10-19 | 2021-01-26 | International Business Machines Corporation | Policy-based detection of anomalous control and data flow paths in an application program |
US11403372B2 (en) * | 2019-01-29 | 2022-08-02 | Irdeto Canada Corporation | Systems, methods, and storage media for obfuscating a computer program by representing the control flow of the computer program as data |
-
2020
- 2020-11-18 CN CN202011295175.1A patent/CN112527307B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106845168A (zh) * | 2016-12-20 | 2017-06-13 | 西安电子科技大学 | 一种面向远程计算的控制流隐藏方法 |
WO2018113642A1 (zh) * | 2016-12-20 | 2018-06-28 | 西安电子科技大学 | 一种面向远程计算的控制流隐藏方法及系统 |
CN109614774A (zh) * | 2018-11-23 | 2019-04-12 | 西安电子科技大学 | 一种基于sgx的程序控制流混淆方法及系统 |
CN111506313A (zh) * | 2020-03-04 | 2020-08-07 | 西安电子科技大学 | 一种基于神经网络的程序控制流混淆方法及系统 |
CN111538962A (zh) * | 2020-03-18 | 2020-08-14 | 西安电子科技大学 | 程序控制流混淆方法、系统、存储介质、云服务器及应用 |
CN111723345A (zh) * | 2020-05-09 | 2020-09-29 | 中国人民解放军战略支援部队信息工程大学 | 基于回调函数的控制流混淆方法及系统 |
Non-Patent Citations (3)
Title |
---|
"Enforcing Control Flow Confidentiality with SGX";Yu Zou等;《IEEE INFOCOM 2020 - IEEE Conference on Computer Communications Workshops (INFOCOM WKSHPS)》;20200810;第1352-1353页 * |
"Static Analysis to Enforce Safe Value Flow in Embedded Control Systems";S. Kowshik等;《International Conference on Dependable Systems and Networks (DSN"06)》;20060710;第1-10页 * |
"基于代码移动的二进制程序控制流混淆方法";陈喆等;《计算机研究与发展》;20150831;第52卷(第8期);第1902-1909页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112527307A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3201822B1 (en) | End-to-end security for hardware running verified software | |
EP3201819B1 (en) | Automated verification of a software system | |
WO2018113642A1 (zh) | 一种面向远程计算的控制流隐藏方法及系统 | |
Schreckling et al. | Kynoid: real-time enforcement of fine-grained, user-defined, and data-centric security policies for android | |
US8452981B1 (en) | Method for author verification and software authorization | |
Xu et al. | Layered obfuscation: a taxonomy of software obfuscation techniques for layered security | |
KR20030082484A (ko) | 공개 키 암호화에 기초한 데이터의 저장 및 검색 | |
KR20030082485A (ko) | 대칭 키 암호화에 기초한 데이터의 저장 및 검색 | |
CN109614774B (zh) | 一种基于sgx的程序控制流混淆方法及系统 | |
US20180082057A1 (en) | Access control | |
CN111475782B (zh) | 基于sgx软件扩展指令的api密钥保护方法及系统 | |
Averbuch et al. | Truly-protect: An efficient VM-based software protection | |
CN115580413A (zh) | 一种零信任的多方数据融合计算方法和装置 | |
Cui et al. | SPEED: Accelerating enclave applications via secure deduplication | |
CN111538962A (zh) | 程序控制流混淆方法、系统、存储介质、云服务器及应用 | |
Brenna et al. | TFHE-rs: A library for safe and secure remote computing using fully homomorphic encryption and trusted execution environments | |
CN112527307B (zh) | 程序控制流隐藏方法、系统及应用 | |
CN107735790B (zh) | 用于在安全区域和不太安全区域之间转换的装置和方法 | |
Ahila et al. | Overview of mobile agent security issues—Solutions | |
Lee et al. | Classification and analysis of security techniques for the user terminal area in the internet banking service | |
Gaddamadugu | Formally verifying trusted execution environments with uclid5 | |
Chielle et al. | E3X: Encrypt-Everything-Everywhere ISA eXtensions for Private Computation | |
Thakkar | Heartbleed: A formal methods perspective | |
Buchner et al. | Survey on Trusted Execution Environments | |
CN111737725A (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 |