一种快速定位Android应用软件中恶意代码或漏洞的方法与流程

文档序号:11407982阅读:328来源:国知局
一种快速定位Android应用软件中恶意代码或漏洞的方法与流程

本发明涉及移动终端应用安全技术领域,更具体地涉及一种快速定位android应用软件中恶意代码或漏洞的方法。



背景技术:

随着移动互联网的发展和智能终端设备的普及,针对手机病毒、盗版应用、垃圾短信、骚扰电话、移动支付等安全问题不断出现。随着移动应用数量的爆发式增长,应用漏洞层出不穷,应用的重打包更是降低了恶意代码传播的技术门槛,手机病毒、恶意软件等现象越来越普遍,遭受手机病毒侵害的用户群体也在逐渐扩大,由于手机病毒具备不易被用户察觉的特性,导致大多数用户即便遭受手机病毒侵害也毫不知情,给智能终端用户带来了极大的困扰。

由于安卓应用程序容易逆向,恶意软件呈现爬坡式增长态势。黑客可以通过反编译合法的应用程序,植入自己的恶意代码或广告信息,之后重新打包发布在第三方android应用市场中牟取利益。这些恶意软件既扰乱了android应用市场的正常秩序,又给用户和开发人员带来很大的威胁。

针对android平台的恶意软件和漏洞带来了很多负面影响,包括:

1)大多数恶意软件植入了大量的广告影响了用户的正常使用,有些恶意软件甚至植入了一些隐藏的恶意代码,对用户的隐私和安全造成了威胁;

2)恶意仿冒应用剽窃了原创作者的劳动成果,侵犯了对应合法应用开发单位(开发人员)的知识产权,使其损失了广告收益和用户口碑;

3)恶意使用者利用广泛存在的应用漏洞,编写恶意脚本达到其敛财或隐私窃取目的,对用户的日常生活和财产安全带来威胁。



技术实现要素:

针对上述问题,本发明提供一种快速定位android应用软件中恶意代码或漏洞的方法,能够实现对android平台上软件中存在的恶意代码或漏洞快速定位的高精准性和可扩展性。

根据以上目的,实现本发明的技术方案是:

一种快速定位android应用软件中恶意代码或漏洞的方法,其步骤包括:

1)对已知存在恶意代码或漏洞的android应用软件进行特征抽取,将已知存在恶意代码或漏洞的android应用软件中每个函数生成一个特征向量,利用得到的特征向量构建恶意代码和漏洞特征库;

2)对待检测的目标android应用软件进行特征提取,将得到的特征向量在恶意代码和漏洞特征库中进行相似性比对,当根据设定阈值判定二者相似时,则认为该目标android应用软件存在恶意代码或漏洞;

3)通过将步骤2)检测到存在恶意代码或漏洞的目标android应用软件与恶意代码和漏洞特征库做进一步比对,定位目标android应用软件中恶意代码或漏洞存在的具体位置。

进一步地,步骤1)中,通过对已知存在恶意代码或漏洞的android应用软件的smali代码控制流进行抽取并提取每个函数中指令片段的特征,为下一步函数特征的提取做好准备。

进一步地,步骤1)中,提取各已知存在恶意代码或漏洞的android应用软件的安装包中存在恶意代码或漏洞的具体函数的方法,生成对应的控制流程图,然后计算每个控制流程图对应的特征向量。

进一步地,所述控制流程图中的每一个节点用一个矢量<v1,v2,v3,v4,v5>及w,n来表示,v1是控制流程图中节点的序号,保证每一个节点只计算一次,v2是节点内函数的调用数量,v3是节点内api的调用数量,v4标识节点内是否存在文件读写操作,v5标识节点内是否存在网络请求,w是节点内指令的数量,n为节点个数。

进一步地,矢量<v1,v2,v3,v4,v5>中分别按照以下规则一对一的映射到其控制流程图中:

1)v1的编码按照如下规则:第一个节点的起始值为1。为保证节点编号的唯一性,如果一个节点有多个分支,优先给子节点更多的分支节点编号;如果两个分支有相同数量的子节点,优先给含有更多语句的分支节点编号;依次标注序号后直到cfg的最后一个节点。最后,我们手动添加一个终止节点到cfg的末尾。

2)v2的编码规则如下:计算节点内函数的调用数量(如节点内不存在函数调用,则v2的值置为0)。

3)v3的编码规则如下:计算节点内api的调用数量(如节点内不存在api调用,则值为0)。

4)v4的编码规则如下:判断节点内是否存在文件读写操作,如存在,则v4=1;如不存在,则v4=0。

5)v5的编码规则如下:判断节点内是否存在文件读写操作,如存在,则v5=1,如不存在,则v5=0。

进一步地,用特征向量表示由每个控制流程图计算得到的特征向量,其中:

cv1的计算方式为:将图中所有节点v1的值经过权重运算后求和,最后求其平均值;

cv2的计算方式为:将图中所有节点v2的值经过权重运算后求和,最后求其平均值;

cv3的计算方式为:将图中所有节点v3的值经过权重运算后求和,最后求其平均值;

cv4的计算方式为:将图中所有节点v4的值经过权重运算后求和,最后求其平均值;

cv5的计算方式为:将图中所有节点v5的值经过权重运算后求和,最后求其平均值。

进一步地,cv1计算公式如下:

其中,n为控制流程图中节点的个数,x和y为图中任意两个节点,wx,wy分别为x节点,y节点内指令的数量,v1x和v1y分别为对应节点的值,e(x,y)标识从x节点到y节点存在一条边,cfg表示该控制流程图;cv2,cv3,cv4,cv5通过分别将其对应节点的值代入上述公式中计算。

进一步地,步骤2)中通过计算待检测的目标android应用软件的特征向量与恶意代码和漏洞特征库中的特征向量的欧氏距离进行相似性比对,当计算得到的两个特征向量的差异值小于设定阈值时则判定二者相似。

进一步地,两个特征向量的差异值通过以下公式计算:

其中

n,n’表示节点个数,w,w’表示节点内指令的数量,diff值越大,表示两个特征向量的差异越大,diff值为0是表示两个特征向量完全相同。

进一步地,步骤1)中,所述恶意代码和漏洞特征库中包含恶意代码和漏洞的存在形式。

进一步地,步骤3)中,根据目标android应用软件中与恶意代码和漏洞特征库中相似的代码的位置,定位目标android应用软件中恶意代码或漏洞存在的具体位置。

进一步地,步骤3)中定位到目标软件存在相似恶意代码或漏洞的情况包括:

(a)恶意代码和漏洞库中存在完全一样的恶意代码或漏洞;

(b)功能完全相同的恶意代码,但是目标应用软件中加入了检测躲避技术;

(c)相似的漏洞存在于同一个应用软件的多个不同版本之中;

(d)使用了被已知恶意代码感染的框架或第三方库;

(e)使用了存在相似漏洞的框架或第三方库。

本发明的有益效果如下:

本发明提出了一种自底向上的恶意代码或漏洞的快速定位技术,通过结合android应用程序的控制流程图的特点,设计了一套判定体系来判断某个应用是否存在特定的恶意代码或漏洞,从而实现对android应用程序种恶意代码或漏洞定位的高精准性和可扩展性。

附图说明

图1为本发明中android软件恶意代码或漏洞定位的整体流程图。

图2为本发明中一个.smali代码函数特征提取流程图。

图3为本发明中一个函数cfg生成流程图。

具体实施方式

下面通过具体实施例和附图,对本发明做进一步详细说明。

图1为本发明的android软件恶意代码或漏洞定位的整体流程图,具体包括如下步骤:

一、首先是搜集市场上的已出现的恶意代码应用程序和存在漏洞的应用程序,提取安装包中的存在恶意代码或漏洞部分函数的方法,生成对应的控制流程图,对于每一个图形,采用本发明提出的方法计算其特征向量。

对于android市场上恶意代码应用程序和存在漏洞的应用程序的搜集以及安装包中方法的提取和控制流程图的生成,均可使用现有的工具和技术完成,此处不再赘述,本发明主要提出一种以控制流程图为基础,对程序特征进行提取后抽象为一种可表示的向量的方法,以此为基础构建出恶意代码和漏洞特征库。

控制流程图(controlflowgraph,cfg)表现了程序中各语句之间的控制依赖关系,本发明主要从控制依赖方面来抽取控制流程图的特征。

控制流程图中每一个节点对应程序中的一个语句块,当在节点n1和n2之间存在一条执行路径时,即存在一条从结点n1到n2的有向弧。如图3所示,图中实线部分表示了示例程序内在的控制依赖关系。

对于控制流程图(以下简称cfg)中的每一个节点,本发明定义一个矢量<v1,v2,v3,v4,v5>来表示。其中v1是cfg中的节点的序号,序号可以保证每一个节点只计算1次,v2是节点内函数的调用数量,v3是节点内api的调用数量,v4标识节点内是否存在文件读写操作,v5标识节点内是否存在网络请求。其中:

1)v1的编码按照如下规则:第一个节点的起始值为1。为保证节点编号的唯一性,如果一个节点有多个分支,优先给子节点更多的分支节点编号;如果两个分支有相同数量的子节点,优先给含有更多语句的分支节点编号;依次标注序号后直到cfg的最后一个节点。最后,我们手动添加一个终止节点到cfg的末尾。

2)v2的编码规则如下:计算节点内函数的调用数量(如节点内不存在函数调用,则v2的值置为0)。

3)v3的编码规则如下:计算节点内api的调用数量(如节点内不存在api调用,则值为0)。

4)v4的编码规则如下:判断节点内是否存在文件读写操作,如存在,则v4=1;如不存在,则v4=0。

5)v5的编码规则如下:判断节点内是否存在文件读写操作,如存在,则v5=1,如不存在,则v5=0。

通过以上的定义方法,可以把一个cfg中所有节点一对一的映射到其控制流程图中。

对函数特征的提取基于函数的控制流进行,通过对已知存在恶意代码或漏洞的android应用软件的smali代码控制流进行抽取并提取每个函数中指令片段特征,进而为下一步函数特征的提取做好准备。如图2所示,从.smali文件的入口开始依次按行读取,在遇到“.class”、“.method”等关键词时,进行归类,以函数为单位得到每个函数的代码片段。对于得到的函数代码片段,需要对每一条指令进行扫描,构建其控制流程图。

图3为函数cfg生成流程图,虚线框中为smali代码片段,通过对其分析,将其拆分为2,3,4三个基本块,cfg中的每个节点是一个基本块。下面以图3为例对该方法进行说明,基于本发明提出的算法可以得到应用程序中每个函数的特征向量,将图中2,3,4节点经过编码后的节点坐标为:

节点2:节点2内函数的调用数量为0,api的调用数量为1,存在文件读写操作,不存在网络请求,则其对应的特征向量为<2,0,1,1,0>

节点3:略

节点4:节点4内函数的调用数量为1,api的调用数量为0,不存在文件读写操作,存在网络请求,则其对应的特征向量为<4,1,0,0,1>

cfg中的每个点都是一对一映射,且由上述定义可知其映射方法唯一,故能准确、有效反映出程序cfg的特征,即不同的cfg对应不同的变形图。由于变形图的表示形式比较复杂,故本发明又提出了一种用向量来表示cfg特征的方法:

本发明用一个向量来描述控制流程图的特征,其中:

1)cv1的计算方式为:将图中所有节点v1的值经过权重运算后求和,最后求其平均值,

计算公式如下:

其中,n为控制流程图中节点的个数(下同),x和y为图中任意两个节点,wx,wy分别为x节点,y节点内指令的数量,v1x和v1y分别为对应节点的值,e(x,y)标识从x节点到y节点存在一条边,cfg表示该控制流程图。

用伪代码形式表示如下:

2)cv2的计算方式为:将图中所有的节点v2的值经过权重运算后求和,最后求其平均值,计算公式如下:

x和y为图中任意两个节点,v2x和v2y分别为对应节点的值,e(x,y)标识从x节点到y节点存在一条边,cfg表示该控制流程图。伪代码形式表示与cv1类似,此处就不再进行伪代码描述。

3)cv3的计算方式为:将图中所有的节点v3的值经过权重运算后求和,最后求其平均值,计算公式如下:

x和y为图中任意两个节点,v3x和v3y分别为对应节点的值,e(x,y)标识从x节点到y节点存在一条边,cfg表示该控制流程图。伪代码形式标识形式与cv1类似。

在上述运算过程中,wx表示控制流程图中节点x内指令的数量,图中的所有节点都参与了运算,故而向量可用来描述一个cfg图的特征。

cv4,cv5的计算方式与cv1,cv2,cv3类似,此处就不再赘述

对于所有方法的控制流程图,采用上述方法将其进行特征抽取,再计算其对应的特征向量。又因控制流程图代表一个方法对应的控制依赖关系,故每一个特征向量可以代表一个特定的方法的特征。

二、采用上述方法计算出待检测目标android应用软件的所有方法的特征向量,然后与恶意代码与漏洞特征库中的特征向量进行相似性比对,计算特征之间的差异度,找出差异度低于一定阈值的特征向量,然后即可快速定位出其存在问题的代码片段(所谓存在问题,指代该待检测目标应用程序中存在恶意代码或漏洞)。

本发明利用特征向量来描述一个方法(即一段问题程序)的特征,这些向量有以下特征:

(a)两个相同的方法具有相同的特征向量;

(b)两个不相关的方法,其cfg图之间差异也十分明显,故其特征向量也随之会存在较大的差别;

(c)两个相似的方法,其各自的特征向量是在其对应的cfg图中的每个节点都参与运算的情形下得到的,当一个方法改变很少时,其特征向量的变化也不会太大。

为区分两个方法的相似度,本发明定义对于两个方法产生的控制流程图的特征向量其差异程度(diff)定义为:

其中

n,n’表示节点个数,w,w’表示节点内指令的数量,diff是用两个向量之间的欧式距离来表示其差异,diff值越大,表示两个特征向量的差异越大,即它们所代表的方法差异度越大。diff值为0是表示两个方法基本完全相同。

通过设定一个diff阈值,定义低于这一阈值的两个方法为相似方法,值越小说明两个方法越相似,在实际的测试当中,我们设定diff阈值为10%,当两个方法的差异值小于10%的时候,认为这两个方法是相似的,进而可由上述算法检测到存在恶意代码或漏洞的方法,从而为进一步快速定位恶意代码或漏洞代码片段提供了有效筛选和有力保障。

同时,发明人亦通过实验验证了这种方法的准确率,当两个方法完全一样,算出的两个方法的diff值为0;当修改两个相同方法中的任意一个,在任意位置加入个别语句,算出的两个方法的diff值在10%之内;当选择两个不相同的方法进行测试,算出的两个方法的diff值在30%以上。在大量的测试后发现,当两个方法的diff值在10%以内时,两个方法相似的可能性在99%以上。在方法相似性比较能达到99%准确率的基础上,应用程序的相似性比较理论上也能达到95%以上。

通过以上方法,如目标应用软件存在恶意代码或漏洞,则可实现对恶意代码或漏洞代码片段位置的快速定位。

以上对本发明所提供的快速定位android应用恶意代码或漏洞的方法进行了详细介绍,应用具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1