一种敏感信息跟踪方法及系统本申请要求申请日为2016年11月23日、申请号为201611037051.7、发明名称为“一
种敏感信息跟踪方法及系统”的中国专利申请的优先权,其全部内容通过引用结合在本申
请中。
技术领域
本发明涉及计算机安全领域,更具体地说,涉及一种敏感信息跟踪方法及系统。
背景技术
随着移动互联网的快速发展和移动智能终端的快速普及,人们将自己的社交、娱
乐、商务等各种生活和工作需求都交给了移动互联网和移动智能终端,同时也将更多的敏
感数据存储在这些移动智能终端中。特别是企业、政府和军队等对信息安全有严格要求的
领域,移动智能终端的使用和普及使得敏感数据安全面临严重威胁。
在众多敏感数据的隐私保护技术中,动态污点跟踪技术可有效地、实时地、细粒度
地保护敏感数据,但在应用了动态污点跟踪技术后,系统实时执行效率都将严重下降。
例如,在虚拟机实时运行层引入污点跟踪技术后,对于每一条可能传播污点的虚
拟机指令,都将插入多条本地指令以完成污点跟踪;这些指令不但降低了系统的实时执行
效率,而且通过即时编译后产生的冗余代码占用了更多的系统内存。
发明内容
有鉴于此,本发明实施例提供一种敏感信息跟踪方法及系统,以提高污点跟踪的
效率及降低开销。
为实现上述目的,本发明实施例提供如下技术方案:
一种敏感信息跟踪方法,包括:
在虚拟机指令编译为本地指令的过程中,调取敏感信息跟踪指令;所述敏感信息
跟踪指令标记有敏感信息点和跟踪点;
基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和跟踪点为基础
进行优化,得到优化后的敏感信息跟踪指令;
将所述优化后的敏感信息跟踪指令插入所述虚拟机指令,以所述优化后的敏感信
息跟踪指令进行污点跟踪。
可选的,变量的敏感信息点是MIR所处位置,执行所述敏感信息跟踪指令后,可对
所述变量的污点值产生影响;变量的传播点是语句MIR所处位置,执行该语句后所述变量的
值会影响其它变量的取值。
可选的,所述敏感信息跟踪框架定义有敏感信息跟踪值域;其中,在敏感信息跟踪
指令下,每条敏感信息跟踪语句和一个污点值相关联起来,污点值指在某处观察到的所有
敏感信息状态的集合的抽象表示,所有污点值的集合称为敏感信息跟踪值域。
可选的,所述敏感信息跟踪框架定义有传递函数族,其中敏感信息跟踪指令中每
个语句对应一个传递函数;所述敏感信息跟踪框架定义有框架的单调性。
可选的,所述基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和
跟踪点为基础进行优化,得到优化后的敏感信息跟踪指令包括:
对所述敏感信息跟踪指令进行冗余污点存取消除,和/或,污点重复计算消除,和/
或,循环不变敏感信息跟踪代码外提,得到优化后的敏感信息跟踪指令。
本发明还一种敏感信息跟踪系统,包括:
调取模块,用于在虚拟机指令编译为本地指令的过程中,调取敏感信息跟踪指令;
所述敏感信息跟踪指令标记有敏感信息点和跟踪点;
优化模块,用于基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点
和跟踪点为基础进行优化,得到优化后的敏感信息跟踪指令;
插入模块,用于将所述优化后的敏感信息跟踪指令插入所述虚拟机指令,以所述
优化后的敏感信息跟踪指令进行污点跟踪。
可选的,变量的敏感信息点是MIR所处位置,执行所述敏感信息跟踪指令后,可对
所述变量的污点值产生影响;变量的传播点是语句MIR所处位置,执行该语句后所述变量的
值会影响其它变量的取值。
可选的,所述敏感信息跟踪框架定义有敏感信息跟踪值域;其中,在敏感信息跟踪
指令下,每条敏感信息跟踪语句和一个污点值相关联起来,污点值指在某处观察到的所有
敏感信息状态的集合的抽象表示,所有污点值的集合称为敏感信息跟踪值域。
可选的,所述敏感信息跟踪框架定义有传递函数族,其中敏感信息跟踪指令中每
个语句对应一个传递函数;所述敏感信息跟踪框架定义有框架的单调性。
可选的,所述插入模块具体用于,对所述敏感信息跟踪指令进行冗余污点存取消
除,和/或,污点重复计算消除,和/或,循环不变敏感信息跟踪代码外提,得到优化后的敏感
信息跟踪指令。
基于上述技术方案,本发明实施例提供的敏感信息跟踪方法包括:在虚+拟机指令
编译为本地指令的过程中,调取敏感信息跟踪指令;所述敏感信息跟踪指令标记有敏感信
息点和跟踪点;基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和跟踪点
为基础进行优化,得到优化后的敏感信息跟踪指令;将所述优化后的敏感信息跟踪指令插
入所述虚拟机指令,以所述优化后的敏感信息跟踪指令进行污点跟踪。可以看出,本发明实
施例是对敏感信息跟踪指令进行优化后,再插入虚拟机指令中进行污点跟踪,因此提高了
污点跟踪的效率及降低了开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现
有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
提供的附图获得其他的附图。
图1为本发明实施例提供的一种敏感信息跟踪方法的流程图;
图2为敏感信息跟踪指令的语义示意图;
图3为敏感信息跟踪值域的格的示意图;
图4为敏感信息跟踪优化整体框架示意图;
图5为与敏感信息跟踪方法相应的敏感信息跟踪系统的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种敏感信息跟踪方法的流程图,参照图1,该方法可
以包括:
步骤S100、在虚拟机指令编译为本地指令的过程中,调取敏感信息跟踪指令;所述
敏感信息跟踪指令标记有敏感信息点和跟踪点;
敏感信息跟踪指令对应敏感信息跟踪逻辑,其可以认为是对敏感信息的跟踪逻
辑;敏感信息跟踪逻辑可以从程序逻辑中的敏感信息跟踪语句转化得来;其中,敏感信息跟
踪语句的作用是在程序执行时,将输入污点状态转化为新的输出污点状态,即程序执行时
每一条敏感信息跟踪语句都可将一个输入污点状态转化为一个新的输出污点状态;
因此敏感信息跟踪指令的生成过程可以看作是,对程序内部整个敏感信息状态的
一系列转化过程,其中,程序的敏感信息状态可以由各变量(var)的污点值组成,同时还可
能包括运行时刻栈帧和寄存器所存储的各变量污点值;
即本发明实施例将复杂的数据类型和数值计算逻辑抽象成独立的敏感信息跟踪
逻辑,得到敏感信息跟踪指令;
结合虚拟机(如Dalvik)即时编译时虚拟机指令向SSA(Static Single-
Assignment,静态单赋值)表示的MIR(middle intermediate representation)转化的特
点,本发明实施例可引入以下相关概念:
敏感信息点(T):变量(var)的敏感信息点是MIR所处位置,执行该指令后对变量
var污点值产生影响;
跟踪点(P):变量var的传播点是语句MIR所处位置,执行该语句后变量var值会影
响其它变量取值。
步骤S110、基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和跟
踪点为基础进行优化,得到优化后的敏感信息跟踪指令;
在虚拟机指令编译为本地指令的过程中,调取敏感信息跟踪指令后,若直接简单
地对于每一条虚拟机指令都插入若干条敏感信息跟踪指令以完成污点跟踪,那么会带来相
当大的运行时的开销;
因此本发明实施例需要对所调取的敏感信息跟踪指令进行优化,如在目标指令中
消除不必要的敏感信息跟踪指令,或将敏感信息跟踪指令移动位置或将敏感信息跟踪指令
序列替换为可完成同样敏感信息跟踪功能的更快的指令序列,从而以优化后的敏感信息跟
踪指令插入虚拟机指令,实现低开销、较高效率的污点跟踪;
而敏感信息跟踪框架证明了在该框架下进行敏感信息跟踪分析的正确性和有效
性,因此本发明实施例可基于敏感信息跟踪框架,对敏感信息跟踪指令的敏感信息点和跟
踪点为基础进行优化处理,得到优化后的敏感信息跟踪指令;
可选的,敏感信息跟踪指令的优化过程主要涉及冗余污点存取消除、污点重复计
算消除、循环不变敏感信息跟踪代码外提等。
步骤S120、将所述优化后的敏感信息跟踪指令插入所述虚拟机指令,以所述优化
后的敏感信息跟踪指令进行污点跟踪。
在得到优化后的敏感信息跟踪指令后,本发明实施例可以将优化后的敏感信息跟
踪指令插入所述虚拟机指令,以通过优化后的敏感信息跟踪指令中的敏感信息点和跟踪点
进行污点跟踪。
本发明实施例提供的敏感信息跟踪方法包括:在虚拟机指令编译为本地指令的过
程中,调取敏感信息跟踪指令;所述敏感信息跟踪指令标记有敏感信息点和跟踪点;基于敏
感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和跟踪点为基础进行优化,得到
优化后的敏感信息跟踪指令;将所述优化后的敏感信息跟踪指令插入所述虚拟机指令,以
所述优化后的敏感信息跟踪指令进行污点跟踪。可以看出,本发明实施例是对敏感信息跟
踪指令进行优化后,再插入虚拟机指令中进行污点跟踪,因此提高了污点跟踪的效率及降
低了开销。
可选的,在分析变量的敏感信息点时,变量的敏感信息点的分析需针对不同虚拟
机指令类型。例如,OP_MOVE vA、vB是vA的敏感信息点,同理,该类型指令还包括数值转换指
令如OP_INT_TO_LONG vA、vB,数值计算如OP_ADD_INT vAA、vBB、vCC,逻辑运算如OP_AND_
INT vAA、vBB、vCC等等;特别地,对于OP_MIR_PHI指令,也认为是vA的敏感信息点。
可选的,变量传播点的分析也需针对不同虚拟机指令类型;例如,指令OP_MOVE
vA、vB是vA的敏感信息点,同时是vB的传播点;指令OP_ADD_INT vAA、vBB、vCC是vA的敏感信
息点,同时是vB和vC的传播点;同理,该类型虚拟机指令还包括逻辑运算如OP_AND_INT
vAA、vBB、vCC等等;特别地,对于OP_RETURN指令,认为是vA的传播点。
由以上定义,可以看出,对于指令OP_ADD_INT vAA、vBB、vCC其敏感信息跟踪可表
达为:TaintA=TaintB|TaintC;同理可将所有MIR指令统一抽象为敏感信息跟踪逻辑
(Taint propagation logic,TPL),形成敏感信息跟踪指令,其语义如图2所示。
图2中,Const代表敏感信息的基本颜色种类的集合;clean表示数据未被敏感信
息,color1到color32表示数据已被相应的颜色敏感信息;考虑dalvik虚拟机使用寄存器大
小为32位,以32位无符号整数2n表示某种颜色;例如,红色代表短信类隐私信息,以
0x00000001表示;黄色代表联系人类隐私信息,以0x00000002表示;污点标记变量var记录
当前数据(变量、对象)敏感信息状态,由任意不同种的基本颜色colori组成,数据被何种污
点标记是不确定的;
例如,某数据包含短信类信息和联系人类隐私信息,其污点可用0x00000003
(0x00000001|0x00000002)表示;Binary-op将程序逻辑中发生敏感信息跟踪的指令统一抽
象成二元或操作符“|”,在敏感信息跟踪框架内可理解为集合并操作,在系统实现部分是逻
辑或操作;
例如,加法指令x+y与减法指令x-y在程序数值运算结果虽然不同,但在敏感信息
跟踪逻辑下运算结果都是x|y;同时,对于不会引起敏感信息跟踪指令则直接约减;内存读
写指令load与store表示污点在内存与寄存器间读写操作,写入内存确保污点跟踪正确性;
表达式exp定义是递归的,元表达式由两个污点变量和一个或操作符运算组成;语句stat语
义上完整表达的敏感信息跟踪过程,即表达式运算后污点值由赋值运算符将污点值赋予变
量var。
可选的,敏感信息跟踪指令的优化可基于敏感信息跟踪框架实现,该敏感信息跟
踪框架证明了在该框架下进行敏感信息跟踪分析的正确性和有效性;由敏感信息跟踪框架
实现敏感信息跟踪指令,则敏感信息跟踪框架的定义需要解决以下四个关键问题:
第一、敏感信息跟踪代码与程序代码语义的一致性,也可称为正确性,正确性要求
程序代码执行时发生敏感信息跟踪时要准确跟踪,未发生敏感信息跟踪时不能错误跟踪;
第二、敏感信息跟踪代码优化后的高效性,即要求跟踪代码优化后在运行时间和
空间都能优化于未优化的代码;
第三、优化算法合算性,优化算法代价是能够换取程序执行敏感信息跟踪时所需
的时间和空间的性能开销;
第四、优化算法精确性,即在正确性基础上确保优化后代码是精确的,优化算法精
确性主要依赖于敏感信息跟踪分析算法精确性,可有效防止敏感信息跟踪假阳性和假阴
性。
对此,本发明实施例中,敏感信息跟踪框架可定义有敏感信息跟踪值域;
在敏感信息跟踪指令下,将每条敏感信息跟踪语句和一个污点值关联起来,污点
值指在某处可观察到所有敏感信息状态的集合的抽象表示,从而所有可能的污点值的集合
称为敏感信息跟踪值域;
进而以整体的的方式抽象地研究敏感信息跟踪,污点值域是一个乘积格,每个污
点变量对应的格如图3所示(ci代表colori);
对于任意值x属于值集V,交汇运算∧取集合并集∪,有:(1)x∧x=x,满足等幂性;
(2)x∧y=y∧x,满足可交换性;(3)x∧(y∧z)=(x∧y)∧z,满足可结合性。其顶元素是空
集
表示为T,对于V中的所有x,有T∧x=x;底元素是全集U,表示为⊥,对于V中所有x,有
⊥∧x=⊥;
交汇运算符定义了污点值域上的一个偏序(记为≤),污点值域即各个污点变量到
格中的某个值的映射,记污点变量v在映射m中的值为g(v);
因此,g≤g’当且仅当对于所有污点变量v,都有g(v)≤g’(v)。也可表达为m∧m’=
m”。当且仅当对于所有污点变量v,g(v)∧g’(v)=g”(v)。偏序集(V,≤)上的一个上升链是
一个满足x1<x2<…<xn的序列,定义格的高度是所有上升链中<关系个数最大值,图3的上升
链中元素最大为33,故其高度为32。
进一步,敏感信息跟踪框架定义有传递函数族F;
敏感信息跟踪逻辑中每个语句Stat对应一个传递函数fs,包含多个语句的程序块
的传递函数可通过将各个语句对应的传递函数组合起来而构造得到。函数集合F由一组传
递函数fs组成,其输入是污点变量到格中元素的映射IN[S],输入则是发生敏感信息跟踪后
一个新的映射OUT[S];在前向敏感信息跟踪分析中,传递函数fs以语句之前IN[S]作为输
入,并输出语句之后的OUT[S];传递函数F对于组合运算是封闭的,即对于F中的任意函数f
和g,存在h(x)=g(f(x))的函数h也在F中。传递函数族F中存在一个单元函数I,接受一个映
射作为输入并输出返回的相同的映射,即对于V中的所有x,有I(x)=x;
同时,敏感信息跟踪框架可定义有框架的单调性;
单调性在格中定义为:①对于所有F中的f以及所有V中的x和y,f(x∧y)≤f(x)∧f
(y);
单调性也可等价定义为:②对于所有F中的f以及所有V中的x和y,x≤y蕴含f(x)≤
f(y);
现证明两种定义是等价的:
先证明单调性②可推导出单调性①:由于x∧y是x和y的最大下界,则x∧y≤x且x
∧y≤y,由单调性②可知f(x∧y)≤f(x)且f(x∧y)≤f(y),同时f(x∧y)是f(x)和f(y)的最
大下界,单调性①得证。然后,证明单调性①可推导出单调性②:假设x≤y,由单调性①可知
f(x∧y)≤f(x)∧f(y),根据定义有x∧y=x;因此有f(x)≤f(x)∧f(y),因为f(x∧y)是f
(x)和f(y)的最大下界,得到f(x)∧f(y)≤f(y);从而f(x)≤f(x)∧f(y)≤f(y),即f(x)≤f
(y),单调性②得证;由图3所示格,显然满足单调性②定义,因为对于任意集合X和Y,X属于X
∪Y。
可选的,为便于理解和直观形象地分析敏感信息跟踪,敏感信息跟踪框架下敏感
信息跟踪分析可以如下dalvik指令代码为例进行分析:
![]()
示例代码程序逻辑是将a=a+b与b=b+a计算1000次;现着重分析每条语句在敏感
信息跟踪框架下表达式及其污点操作的实现;对于Dalvik指令const/16v3、0x3e8,在敏感
信息跟踪逻辑下表达为TaintV3=clean;经过即时编译后形成LIR需要额外完成以下三步:
首先通过SET_TAINT_FP(r1)保存变量污点的内存地址存入寄存器,然后通过SET_TAINT_
CLEAR(r2)设置初始污点值,最后通过SET_VREG_TAINT(r2,r3,r1)将该污点值存入内存;
对于Dalvik指令add-int/2addr v0、v1,在敏感信息跟踪逻辑下表达为Taintv0=
Taintv0|Taintv1,其传递函数fs将污点变量v0从输入状态[100…0]转化为[110…0]。
经过即时编译后形成LIR需要额外完成以下四步,首先通过SET_TAINT_FP(r10)保
存变量污点的内存地址存入寄存器,然后通过GET_VREG_TAINT(r3,r3,r10)与GET_VREG_
TAINT(r2,r2,r10)获取变量污点值,然后通过orr r2,r3,r2计算更新后污点值,最后通过
SET_VREG_TAINT(r2,r9,r10)将该污点值存入内存。
对于Dalvik指令add-int/2addr v1,v0,在敏感信息跟踪逻辑下表达为Taintv1=
Taintv1|Taintv0,其传递函数fs将污点变量v1从输入状态[010…0]转化为[110…0],经过即
时编译后形成LIR需要额外完成以下四步:首先通过SET_TAINT_FP(r10)保存变量污点的内
存地址存入寄存器,然后通过GET_VREG_TAINT(r3,r3,r10)与GET_VREG_TAINT(r2,r2,r10)
获取变量污点值,然后通过orr r2,r3,r2计算更新后污点值,最后通过SET_VREG_TAINT
(r2,r9,r10)将该污点值存入内存;
对于Dalivk指令add-int/lit8v2,v2,0x1,在敏感信息跟踪逻辑下表达为Taintv2
=Taintv2|clean;其传递函数fs将污点变量v2从输入状态[001…0]转化为[001…0];对于
由该三条语句组成的循环体,其传递函数fs将污点变量v0从输入状态[100…0]转化为
[110…0],将污点变量v1从输入状态[010…0]转化为[110…0],将污点变量v2从输入状态
[001…0]转化为[001…0]。
由此可知,对于单条虚拟机指令需要耗费更多本地指令的以完成敏感信息跟踪。
但通过对多条虚拟机指令序列的敏感信息跟踪分析,可实现敏感信息跟踪指令的优化。
基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息点和跟踪点为基础
进行优化,得到优化后的敏感信息跟踪指令的过程,主要涉及冗余污点存取消除,和/或,污
点重复计算消除,和/或,循环不变敏感信息跟踪代码外提等;下面将逐一进行介绍:
冗余污点存取消除是指消除冗余的污点在寄存器和内存之间移动。以虚拟机指令
add-int/2addr v0,v1和add-int/2addr v1,v0为例;对于第一条虚拟机指令add-int/
2addr v0,v1:首先,由于污点值交叉保存在内存,将变量v0和v1从偏移位置0和8处读入寄
存器r1和r2,并将其污点值从偏移位置4和12处读入寄存器r0和r3。然后,将操作数及其污
点进行数值运算adds r1,r1,r2和敏感信息跟踪运算orr r0,r0,r3。
最后,将数值和污点值写回内存。同理对于第二条指令完成相同动作。由于即时编
译器仅简单地将虚拟指令翻译为LIR指令,因此产生的代码较为庞大和冗余。通过对虚拟机
指令的敏感信息跟踪分析,可得出第一条指令和第二条指令变量值及其污点值在内存中位
置一致,此时第二条指令不需要再次读取操作数及其污点,且第一条指令不需要立即将数
值运算结果和敏感信息跟踪运算结果保存到内存,可在第二条指令执行完成后再保存相应
数据值及其污点值。下面示出了冗余污点存取消除示例表可参照。
冗余污点存取消除示例表
![]()
![]()
要实现冗余污点存取消除,在区分必然别名和寄存器值不被破坏的情况下,对于
污点存取指令分以下四种情况讨论:
1.读后读(RAR,Read After Read):数据污点值读取后又再次读取。对于此种情
况,如果污点数值在第一次读取内存与第二次读取内存之间不存在对该污点值的写入指
令,则可以删除后一条读取内存指令。
2.写后写(WRW,Write After Write):数据污点值写入内存后又再次写入内存。对
于此种情况,如果污点数值在第一次写入内存与第二次写入内存之间对该污点值的读入指
令,则可以删除前一条写入指令。
3.读后写(RAW,Read After Write):数据污点值在读取后写入内存。对于此种情
况,如果在读取和写入内存之间不存在该数据污点值的传播点和敏感信息点,则可将读取
和写入内存指令删除;如果在读取和写入内存之间存在对该数据污点值的传播点但不存在
敏感信息点,则可将写入内存指令删除。
4.写后读(WRA,Write After Read):数据污点值写入内存后读取。对于此情况,则
可将读取指令删除。其具体算法如算法3.1所示。
![]()
污点重复计算消除
污点重复计算消除是指消除污点值的重复计算。同样以虚拟机指令dd-int/2addr
v0,v1与add-int/2addr v1,v0为例,执行第一条Dalvik指令后v0污点值更新为Taintv1|
Taintv0,执行第二条Dalvik指令后v1污点更新为Taintv1|Taintv0,由敏感信息跟踪分析
可知两条虚拟机指令的污点运算值是相等的。可将表2第二列编号为0x001e的指令orr r0,
r0,r3替换成movs r3,r0以提高指令执行速度。
污点重复计算消除其实现的基本思想是:对于给定形如orr r0,r0,r1和orr r1,
r1,r0表达式,若其间不存在其它对r0与r1的敏感信息点(即不存在形如orr r0,r0,r2或
orr r1,r1,r2),则可将后一表达式替换为执行速度更快的指令mov r1,r0。其具体算法如
算法3.2所示。
![]()
![]()
循环不变敏感信息跟踪代码外提
循环是程序中不可缺少的一种控制结构,因为循环中的代码要重复执行,所以对
循环代码的污点优化效果十分明显。
循环不变敏感信息跟踪代码外提是指将循环体中反复计算但污点值不变的代码
提取到循环体必经后置基本块。
仍然以第二节dalvik代码为例(指令add-int/2addr v1,v0在此约去以节省篇
幅)。即时编译器探测到此循环并选择add-int/2addr v0,v1和add-int/lit8v2,v2,0x1和
if-lt v2,v3,:goto_0为热点路径,并将其编译为7个基本块。
在程序逻辑下,变量a的数值是循环变化的。但敏感信息跟踪逻辑下,变量a的污点
值是循环不变的。同理,对于循环归纳变量,其污点值也是不变的。因此可将ldr r0,[r5,#
4]ldr r3,[r5,#12]ldr r7,[r5,#28]orr r0,r0,r3等污点操作指令提取到循环必经后置
结点。下面示出了循环不变敏感信息跟踪代码外提示例表,可参照。
循环不变敏感信息跟踪代码外提示例表
![]()
![]()
实现循环不变敏感信息跟踪代码外提关键在于找到循环污点不变量,分以下两种
情况讨论:第一是循环归纳变量,循环归纳变量较容易分析,其敏感信息点和传播点都在
PHI节点处且其数值加减某一常数。第二是非归纳不变量,非归纳不变量分析较为复杂,第
一种情况是某变量敏感信息点和传播点都在一处且传播点位于该处的其它变量在循环体
内不存在敏感信息点。在上例a=a+b中满足此类情况,a的敏感信息点和传播点都在该指令
处,且b在循环其它处不存在敏感信息点。第二种情况是某变量敏感信息点和传播点都在一
处且传播点位于该处的其它变量是循环污点不变量。
第二种情况需要使用了迭代算法,由于敏感信息跟踪框架中污点值域格具有有穷
的高度,且框架是单调的,可证明迭代算法是收敛的。其证明过程可参见编译原理中数据流
分析算法敛散性证明。因而循环不变敏感信息跟踪代码外提算法如算法3.3所示。
![]()
基于上述描述,本发明实施例的框架实现主要为:
在Dalvik即时编译器基础上,实现了敏感信息跟踪编译优化技术,其整体框架如
图4所示;
1.在解释器进行热点路径探测,若该路径入口指令执行次数达到指定值,则编译
该路径并进行敏感信息跟踪优化。否则,不进行敏感信息跟踪优化(冷路径优化代价过大);
2.该路径入口指令执行次数再次达到指定值(40),若该路径已完成编译和敏感信
息跟踪优化,则跳转到已经优化后的敏感信息跟踪处执行。否则再次等待一个threshold周
期;
3.创建编译线程,完成MIR到SSA转换和基本的方法内联优化。并填充的MIR相应污
点数据结构;
4.将MIR转换成LIR,首先,通过敏感信息跟踪分析算法完成路径流图分析和敏感
信息-传播集分析,若该路径是循环需完成循环信息分析,并填充LIR相应污点数据结构。然
后,通过敏感信息跟踪优化算法完成对LIR敏感信息跟踪优化。最后,将LIR转化成机器码并
返回路径将入口内存地址。
下面对本发明实施例提供的敏感信息跟踪系统进行介绍,下文描述内容可与上文
描述的敏感信息跟踪方法相互参照。
图5为本发明实施例提供的敏感信息跟踪系统的结构框图,参照图5,该系统可以
包括:
调取模块100,用于在虚拟机指令编译为本地指令的过程中,调取敏感信息跟踪指
令;所述敏感信息跟踪指令标记有敏感信息点和跟踪点;
优化模块200,用于基于敏感信息跟踪框架,以所述敏感信息跟踪指令的敏感信息
点和跟踪点为基础进行优化,得到优化后的敏感信息跟踪指令;
插入模块300,用于将所述优化后的敏感信息跟踪指令插入所述虚拟机指令,以所
述优化后的敏感信息跟踪指令进行污点跟踪。
可选的,变量的敏感信息点是MIR所处位置,执行所述敏感信息跟踪指令后,可对
所述变量的污点值产生影响;变量的传播点是语句MIR所处位置,执行该语句后所述变量的
值会影响其它变量的取值。
可选的,所述敏感信息跟踪框架定义有敏感信息跟踪值域;其中,在敏感信息跟踪
指令下,每条敏感信息跟踪语句和一个污点值相关联起来,污点值指在某处观察到的所有
敏感信息状态的集合的抽象表示,所有污点值的集合称为敏感信息跟踪值域。
可选的,所述敏感信息跟踪框架定义有传递函数族,其中敏感信息跟踪指令中每
个语句对应一个传递函数;所述敏感信息跟踪框架定义有框架的单调性。
可选的,插入模块300具体可用于,对所述敏感信息跟踪指令进行冗余污点存取消
除,和/或,污点重复计算消除,和/或,循环不变敏感信息跟踪代码外提,得到优化后的敏感
信息跟踪指令。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他
实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置
而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说
明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元
及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和
软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些
功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业
技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应
认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执
行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存
储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术
领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。
对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的
一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一
致的最宽的范围。