一种面向远程计算的控制流隐藏方法.pdf

上传人:r7 文档编号:1301366 上传时间:2018-04-14 格式:PDF 页数:12 大小:605.06KB
返回 下载 相关 举报
摘要
申请专利号:

CN201611184867.2

申请日:

2016.12.20

公开号:

CN106845168A

公开日:

2017.06.13

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 21/14申请日:20161220|||公开

IPC分类号:

G06F21/14(2013.01)I; G06F9/44; H04L29/06

主分类号:

G06F21/14

申请人:

西安电子科技大学

发明人:

王永智

地址:

710071 陕西省西安市太白南路2号

优先权:

专利代理机构:

西安恒泰知识产权代理事务所 61216

代理人:

王芳

PDF下载: PDF下载
内容摘要

本发明公开了一种面向远程计算的控制流隐藏方法,该方法通过将原始程序分解为公开程序、可信程序和条件列表组集合文件,利用Intel第六代处理器的安全执行环境的SGX功能,将程序分枝语句的条件判定放在具有硬件保护功能的可信区域进行,从而实现了程序分枝语句条件的真正隐藏。

权利要求书

1.一种面向远程计算的控制流隐藏方法,其特征在于,包括以下步骤:
步骤1,获取用户程序,并将用户程序转换为三地址码程序;
所述三地址码程序包括I个语句,其中任意一个语句为si,i=1,2,…I,I为大于等于1的
自然数,语句si由J个分支语句xj和M个非分支语句ym组成,j=1,2,…J,m=1,2,…M,J<I,M
<I;其中,分支语句xj为:if(a OP b)goto L;a、b为分支语句xj的变量,OP为比较操作;L为
如果(a OP b)结果为真则跳转到的语句,L∈{si|i=1,2,...I};
分支语句xj的编号为lj;非分支语句ym的编号为lm
步骤2,获取三地址码程序中语句si可访问的变量和语句si使用到的变量,将语句si
访问的变量组成变量集合Vi,将语句si使用到的变量组成变量集合Ui
所述语句si可访问的变量为,在语句si之前的语句及语句si中使用并属于语句si作用域
的变量;
所述语句si使用到的变量为,在语句si中出现的变量;
步骤3,构建公开程序,包括:每个语句si均经过步骤31和步骤32的处理;
步骤31,将分支语句xj替换为:if(QuerySGX(Lj,lj))goto L,构造分支语句条件列表组
Tj={ja,jb,OP};
Lj为将分支语句xj的参数集合Pj中的元素随机排列形成的参数列表;
参数集合Pj为:Pj=Uj∪SUBSET(Vj-Uj);
其中,Vj为语句分支语句xj可访问的变量组成的变量集合;Uj为分支语句xj使用到的变
量组成的变量集合;SUBSET(Vj-Uj)为Vj-Uj的任意子集;
ja为a在Lj中的位置,jb为b在Lj中的位置;ja为大于等于0的整数,jb为大于等于0的整
数;
步骤32,在非分支语句ym前插入if(QuerySGX(Lm,lm))goto构造非分支语句条件列
表组Tm={false};
其中,Lm为将非分支语句ym的参数集合Pm中的元素随机排列形成的参数列表;为非ym
的语句;
参数集合Pm为:Pm=Um∪SUBSET(Vm-Um);
其中,Vm为语句非分支语句ym可访问的变量组成的变量集合;Um为分支语句xm使用到的
变量组成的变量集合;SUBSET(Vm-Um)为Vm-Um的任意子集;
步骤4,构建条件列表组集合文件,包括:
将所有分支语句的条件列表组和非分支语句的条件列表组组成条件列表组集合文件,
所述条件列表组集合文件中包括Tj和lj的映射列表,以及Tm和lm的映射列表,即lj与Tj、lm
Tm相互唯一映射;
将该条件列表组集合文件用对称加密方法进行加密,加密密钥由用户管理;
步骤5,构建可信程序,包括:
读入所述的条件列表组集合文件,接着对条件列表组集合文件解密后,获得映射列表;
构建QuerySGX函数,所述QuerySGX函数的功能包括:调用QuerySGX(Lk,lk),k∈j∪m;
通过lk在获得的映射列表中查找对应的Tk,当Tk={False}时,则返回false;
通过lk在获得的映射列表中查找对应的Tk,当Tk={ja,jb,OP}时,则以ja,jb为索引找
到Lk中对应的变量a和b,结合OP,得到三地址码程序中分支语句条件(a OP b),并返回(a
OP b)的布尔值;
步骤6,拷贝可信程序、条件列表组集合文件及公开程序至公有云,再将可信程序加载
至SGX的enclave中;
步骤7,在公有云中运行程序,包括:
执行公开程序,当遇到QuerySGX函数则调用可信程序中的QuerySGX函数。
2.如权利要求1所述的控制流隐藏方法,其特征在于,步骤5中所述的对条件列表组集
合文件解密是指:
通过SGX远程验证协议检查可信程序是否完整,若可信程序完整则将用户管理的密钥
发送至可信程序;使用密钥对条件列表组集合文件进行解密。

说明书

一种面向远程计算的控制流隐藏方法

技术领域

本发明属于计算机技术技术领域,涉及一种程序控制流隐藏的方法。

背景技术

目前,公有云服务得到了广泛应用,用户可将程序上传至公有云上,由公有云完成
计算。然而,由于公有云的不透明性,程序运行的安全难以得到保障。外包程序的算法保密
性是云安全中一个重要问题。当用户将程序上传至公有云上,攻击者可通过静态分析和动
态分析逆向分析出程序的源代码,从而还原程序算法。如果用户程序具有创新性,这一攻击
将侵犯用户的程序版权。即使用户程序不具有创新性,逆向分析程序将泄漏程序逻辑,黑客
将通过泄漏的程序逻辑寻找程序弱点(vulnerability),为进一步攻击程序做好准备。因此
需要一种程序运行时保护机制,以保证程序远程计算时的程序逻辑保密性。程序控制流是
程序逻辑的重要部分,保护程序控制流保密性将大大提高程序逻辑机密性。本发明针对程
序控制流,提出一种保密方法。

目前主流的程序的算法保护技术称为程序混淆技术。大多数程序混淆技术假设程
序在一个完全不可信的环境下运行。在这种环境下对程序进行变换并隐藏程序是非常困难
的。Barak[1]等人在论文中已证明不存在一种通用的混淆方法可以混淆所有的程序。因此
目前研究者的方法主要集中于对程序的部分混淆,其中一部分人研究对程序的控制流进行
混淆。很多方案都是将程序分枝语句的条件进行数学转换,包括将条件的左右两端进行加
密(Sharif[2]等人),对密文进行匹配,该方法仅适用于相等条件;将条件语句转变成未知
数学难题(Wang[3]等人),等。无论如何变换,此类方法均将分枝语句条件展现在攻击者面
前,理论上攻击者仍可通过静态分析分析出程序逻辑。另一方面,攻击者也可通过动态分析
跟踪条件与分支,进一步解析出程序逻辑。

与本发明类似的思路包括将程序分解成两个或多个程序,通过多个程序协同工作
完成程序计算。例如,Ge[4]的文章将程序控制跳转分离到另一个进程中,程序指令的跳转
地址通过查询另一进程的跳转表获取。该方法只能满足静态跳转,无法满足动态分支判定。
同时,另一个进程的跳转表跟主程序在同一个主机上,事实上也暴露给了黑客。Wang[5]的
文章将公有云上的程序分支判定部分分离到另一个私有云上,程序跳转通过跨云的远程程
序调用实现。由于跨云函数调用的存在,该方法具有较高的开销。

[1]Barak Boaz,Goldreich Oded,Impagliazzo Russell,Rudich Steven,Sahai
Amit,Vadhan Salil,et al.On the(im)possibility of obfuscating programs.J ACM
May 2012;59(2).Article 6.

[2]Sharif Monirul,Lanzi Andrea,Giffin Jonathon,Lee Wenke.Impeding
malware analysis using conditional code obfuscation.In:Proceedings of the
15th annual network and Distributed System Security Symposium.NDSS;2008.

[3]Wang Zhi,Ming Jiang,Jia Chunfu,Gao Debin.Linear obfuscation to
combat symbolic execution.In:Proceedings of the 16th European Symposium on
Research in Computer Security(ESORICS 2011).Berlin Heidelberg:Springer;
2011.p.210e26.

[4]Ge Jun,Chaudhuri Soma,Tyagi Akhilesh.Control flow based
obfuscation.In:Proceedings of the 5th ACM workshop on Digital Rights
Management.ACM;2005.p.83e92.

[5]Yongzhi Wang,Jinpeng Wei,Toward protecting control flow
confidentiality in cloud-based computation,Computers&Security,Volume 52,July
2015,Pages 106-127,ISSN 0167-4048

发明内容

本发明的目的是提供一种程序分枝语句条件的机密性保护方法,解决了现有技术
中存在的问题。

一种面向远程计算的控制流隐藏方法,包括以下步骤:

步骤1,获取用户程序,并将用户程序转换为三地址码程序;

所述三地址码程序包括I个语句,其中任意一个语句为si,i=1,2,…I,I为大于等
于1的自然数,语句si由J个分支语句xj和M个非分支语句ym组成,j=1,2,…J,m=1,2,…M,J
<I,M<I;其中,分支语句xj为:if(a OP b)goto L;a、b为分支语句xj的变量,OP为比较操
作;L为如果(a OP b)结果为真则跳转到的语句,L∈{si|i=1,2,...I};

分支语句xj的编号为lj;非分支语句ym的编号为lm

步骤2,获取三地址码程序中语句si可访问的变量和语句si使用到的变量,将语句
si可访问的变量组成变量集合Vi,将语句si使用到的变量组成变量集合Ui

所述语句si可访问的变量为,在语句si之前的语句及语句si中使用并属于语句si
作用域的变量;

所述语句si使用到的变量为,在语句si中出现的变量;

步骤3,构建公开程序,包括:每个语句si均经过步骤31和步骤32的处理;

步骤31,将分支语句xj替换为:if(QuerySGX(Lj,lj))goto L,构造分支语句条件列
表组Tj={ja,jb,OP};

Lj为将分支语句xj的参数集合Pj中的元素随机排列形成的参数列表;

参数集合Pj为:Pj=Uj∪SUBSET(Vj-Uj);

其中,Vj为语句分支语句xj可访问的变量组成的变量集合;Uj为分支语句xj使用到
的变量组成的变量集合;SUBSET(Vj-Uj)为Vj-Uj的任意子集;

ja为a在Lj中的位置,jb为b在Lj中的位置;ja为大于等于0的整数,jb为大于等于0
的整数;

步骤32,在非分支语句ym前插入if(QuerySGX(Lm,lm))goto构造非分支语句条
件列表组Tm={false};

其中,Lm为将非分支语句ym的参数集合Pm中的元素随机排列形成的参数列表;
非ym的语句;

参数集合Pm为:Pm=Um∪SUBSET(Vm-Um);

其中,Vm为语句非分支语句ym可访问的变量组成的变量集合;Um为分支语句xm使用
到的变量组成的变量集合;SUBSET(Vm-Um)为Vm-Um的任意子集;

步骤4,构建条件列表组集合文件,包括:

将所有分支语句的条件列表组和非分支语句的条件列表组组成条件列表组集合
文件,所述条件列表组集合文件中包括Tj和lj的映射列表,以及Tm和lm的映射列表,即lj
Tj、lm与Tm相互唯一映射;

将该条件列表组集合文件用对称加密方法进行加密,加密密钥由用户管理;

步骤5,构建可信程序,包括:

读入所述的条件列表组集合文件,接着对条件列表组集合文件解密后,获得映射
列表;

构建QuerySGX函数,所述QuerySGX函数的功能包括:调用QuerySGX(Lk,lk),k∈j∪
m;

通过lk在获得的映射列表中查找对应的Tk,当Tk={False}时,则返回false;

通过lk在获得的映射列表中查找对应的Tk,当Tk={ja,jb,OP}时,则以ja,jb为索
引找到Lk中对应的变量a和b,结合OP,得到三地址码程序中分支语句条件(a OP b),并返回
(a OP b)的布尔值;

步骤6,拷贝可信程序、条件列表组集合文件及公开程序至公有云,再将可信程序
加载至SGX的enclave中;

步骤7,在公有云中运行程序,包括:

执行公开程序,当遇到QuerySGX函数则调用可信程序中的QuerySGX函数。

进一步地,步骤5中所述的对条件列表组集合文件解密是指:

通过SGX远程验证协议检查可信程序是否完整,若可信程序完整则将用户管理的
密钥发送至可信程序;使用密钥对条件列表组集合文件进行解密。

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

(1)本发明通过利用Intel第六代处理器的安全执行环境的SGX功能,将程序分枝
语句的条件判定放在具有硬件保护功能的可信区域进行,从而实现了程序分枝语句条件的
真正隐藏,同时引起较小的程序运行开销;

(2)本发明可有效抵御在公有云上的基于静态分析和动态分析的逆向工程攻击。
对于每个分支语句,攻击者通过动态分析可观测出传入参数和返回结果,然而,传入参数众
多,攻击者很难判定具体哪个参数参与了分枝条件的判定,从而很难还原出原始判定逻辑。
对于伪分支语句,虽然该分支语句只返回相同的值,然而由于传入的参数众多,黑客很难区
分该情况属于条件未触发还是属于伪分支语句。因此,本发明可以有效实现程序控制流的
隐藏。

(3)从效率角度来说,本发明使得控制流隐藏在公有云内部,从而避免了频繁的跨
云或跨主机函数调用,从而降低了运行开销。

附图说明

图1为本发明的总体部署图;

图2(a)为实施例中未实施本方法前的程序;图2(b)为实施例中实施本方法后的程
序。

具体实施方式

下面通过附图和实施例对本发明作进一步的说明。

步骤1,获取用户程序,并将用户程序转换为三地址码程序;

所述三地址码程序包括I个语句,其中任意一个语句为si,i=1,2,…I,I为大于等
于1的自然数,语句si由J个分支语句xj和M个非分支语句ym组成,j=1,2,…J,m=1,2,…M,J
<I,M<I;其中,分支语句xj为:if(a OP b)goto L;a、b为分支语句xj的变量,OP为比较操
作,为六种操作(>,<,>=,<=,==,!=)中的一种;L为如果(a OP b)结果为真则跳转到的
语句,L∈{si|i=1,2,...I};

分支语句xj的唯一编号为lj;非分支语句ym的编号为lj

本实施例中的语句si是指:程序中的任意一条语句,例如图2(a)中的int size;
int low=0。

本实施例中的分支语句xj是指:程序中的选择语句,例如图2中用户程序的if
(data[middle]==key){return true;};其中,分支语句xj的变量a和b分别为:data
[middle]和key;OP为==操作;L为return true语句;该分支语句的编号lj为11。

步骤2,对三地址码程序进行静态分析,获取三地址码程序中语句si可访问的变量
和语句si使用到的变量,将语句si可访问的变量组成变量集合Vi,将语句si使用到的变量组
成变量集合Ui;显然语句si可访问但未使用的变量集合为Vi-Ui

所述语句si可访问的变量为,在语句si之前的语句及语句si中使用并属于语句si
作用域的变量;

所述语句si使用到的变量为,在语句si中出现的变量;

如图2(a)所示,例如语句si为:int low=0;则该语句可访问的变量为data、size
和low;该语句使用到的变量为:low。

若语句si为分支语句if(data[middle]==key){return true;};则该语句可访
问的变量为data、size、low、high、middle、data[middle]、data[low]、data[high]、key;该
语句使用到的变量为data[middle]、key;

步骤3,构建公共程序,包括:每个语句si均经过步骤31和步骤32的处理;

1)对于分支语句xj,即if(a OP b)goto L,根据步骤2的定义,可知Uj={a,b}。将分
支语句xj替换为:if(QuerySGX(Lj,lj))goto L,构造分支语句条件列表组Tj={ja,jb,OP};
Lj为将分支语句xj的参数集合Pj中的元素随机排列形成的参数列表;

参数集合Pj为:Pj=Uj∪SUBSET(Vj-Uj);

其中,Vj为语句分支语句xj可访问的变量组成的变量集合;Uj为分支语句xj使用到
的变量组成的变量集合;SUBSET(Vj-Uj)为Vj-Uj的任意子集;

ja为a在Lj中的位置,jb为b在Lj中的位置;ja为大于等于1的自然数,jb为大于等于
1的自然数;

QuerySGX函数将在SGX的enclave中执行。

图2(b)显示了对二分查找代码的转换结果。如图2(b)所示,转换后的程序中,原有
分支语句都被替换成QuerySGX函数调用(见行9,11,14,17),同行注释中显示了对应的Tj
支语句条件列表组的内容。

例如,图2(a)中的行11的分支语句为:if(data[middle]==key){return
true;};该分支语句的Vj为(data、size、low、high、middle、data[middle]、data[low]、data
[high]、key),Uj为(data[middle]、key),则Vj-Uj为(data、size、low、high、middle),Pj
(key,high,low,middle,data[low],data[high],data[middle]),Lj为(key,high,low,
middle,data[low],data[high],data[middle]);如图2(b)替换该分支语句为:if
(QuerySGX(key,high,low,middle,data[low],data[high],data[middle]));由于分支语
句变量data[middle]和key的编号分别为6和0,OP为==,所以Tj为{6,0,==}。

2)在非分支语句ym前插入if(QuerySGX(Lm,lm))goto构造条件列表组Tm
{false};

其中,Lm为将非分支语句ym的参数集合Pm中的元素随机排列形成的参数列表;
非ym的语句;

参数集合Pm为:Pm=Um∪SUBSET(Vm-Um);

其中,Vm为语句非分支语句ym可访问的变量组成的变量集合;Um为分支语句xm使用
到的变量组成的变量集合;SUBSET(Vm-Um)为Vm-Um的任意子集;

如图2(b)所示,行9.1为插入在行10前面的非分支语句;行14.1和14.2为插入在行
15前面的非分支语句。每行后面的注释显示了Tm的内容。需要说明的是,对于一条非分支语
句,可随机插入若干伪分支语句,(如行14.1,14.2所示)。

例如,对于图2(a)中的行10的非分支语句:int middle=(low+high)/2;该非分支
语句的Vm为(low,size,high,middle,key),Um为(middle,low,high),则Pm为(key,high,
low,size),Lm为(key,high,low,size);如图2(b)在行10的非分支语句前插入的语句为:if
(QuerySGX(key,high,low,size))goto line 14;Tm={false}。

步骤4,构建条件列表组集合文件,包括:

将所有分支语句的条件列表组和非分支语句的条件列表组组成条件列表组集合
文件SETTs,所述条件列表组集合文件中包括Tj和lj的映射列表,以及Tm和lm的映射列表,即
lj与Tj、lm与Tm相互唯一映射;

将该条件列表组集合文件用对称密钥sk进行对称加密,生成文件Esk(SETTs),加密
密钥sk由用户管理;

步骤5,构建可信程序,包括:

读入所述的条件列表组集合文件,接着对条件列表组集合文件解密后,获得映射
列表;

所述的对条件列表组集合文件解密是指:

通过SGX远程验证协议检查可信程序是否完整,若可信程序完整则将用户管理的
密钥发送至可信程序;使用密钥对条件列表组集合文件进行解密。

检查可信程序是否完整的过程为SGX标准过程,详情参见SGX开发手册。

构建QuerySGX函数,所述QuerySGX函数的功能包括:对于函数调用QuerySGX(Lk
lk),k∈j∪m;

通过lk在获得的映射列表中查找对应的Tk,当Tk={False}时,则返回false;即执
行当前语句;

通过lk在获得的映射列表中查找对应的Tk,当Tk={ja,jb,OP}时,则以ja,jb为索
引找到Lk中对应的变量a和b,结合OP,得到三地址码程序中分支语句条件(a OP b),并返回
(a OP b)的布尔值;布尔值为true或false,当布尔值为true时,跳转到语句L;当布尔值为
false时,执行当前语句;

步骤6,拷贝可信程序、条件列表组集合文件及公开程序至公有云,创建SGX的
enclave,再将可信程序加载至该enclave中;

步骤7,在公有云中运行程序,包括:

执行公开程序时,当遇到QuerySGX函数则调用可信程序中的QuerySGX函数。

本实施例选用的是Intel第六代处理器的安全执行环境的SGX功能,将程序分枝语
句的条件判定放在具有硬件保护功能的可信区域进行,从而实现了程序分枝语句条件的真
正隐藏。

Intel第六代处理器的安全执行环境的SGX功能详细技术细节参见:

[6]Intel software guard extensions developer guide.https://
download.01.org/intel-sgx/linux-1.6/docs/Intel_SGX_Devel oper_Guide.pdf

[7]Intel software guard extensions SDK for Linux OS Developer
reference.https://01.org/intel-software-guard-extensions/documentation/int
el-sgx-sdk-developer-reference

[8]Costan,Victor,and Srinivas Devadas.Intel sgx explained.Cryptology
ePrint Archive,Report 2016/086,2016.https://eprint.iacr.org/2016/086.

一种面向远程计算的控制流隐藏方法.pdf_第1页
第1页 / 共12页
一种面向远程计算的控制流隐藏方法.pdf_第2页
第2页 / 共12页
一种面向远程计算的控制流隐藏方法.pdf_第3页
第3页 / 共12页
点击查看更多>>
资源描述

《一种面向远程计算的控制流隐藏方法.pdf》由会员分享,可在线阅读,更多相关《一种面向远程计算的控制流隐藏方法.pdf(12页珍藏版)》请在专利查询网上搜索。

本发明公开了一种面向远程计算的控制流隐藏方法,该方法通过将原始程序分解为公开程序、可信程序和条件列表组集合文件,利用Intel第六代处理器的安全执行环境的SGX功能,将程序分枝语句的条件判定放在具有硬件保护功能的可信区域进行,从而实现了程序分枝语句条件的真正隐藏。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1