一种基于Dalvik指令抽象的Android恶意代码检测方法

文档序号:10725509阅读:259来源:国知局
一种基于Dalvik指令抽象的Android恶意代码检测方法【专利摘要】一种基于Dalvik指令抽象的Android恶意代码检测方法,包括如下步骤:1)恶意代码的检测与分类模型训练,从smali文件中提取出Dalvik操作码并进行抽象简化为指令符号,再针对抽象的Dalvik指令符号的N?Gram序列特征进行统计与归一化处理,最后采用机器学习的分类算法建立恶意代码检测模型和恶意家族分类模型;2)将待测APK文件先进行预处理,提取出Dalvik指令特征并作抽象简化与N?Gram序列化处理,再通过恶意代码检测模型的检测,初步判断出是否为恶意代码;如果不是就直接给出检测结果,如果是则进一步通过恶意家族分类模型来获得该恶意代码家族类型。本发明快速性良好、有效性较高。【专利说明】一种基于DaIvik指令抽象的Android恶意代码检测方法
技术领域
[0001]本发明涉及恶意代码检测
技术领域
,尤其是一种Android恶意代码检测方法。【
背景技术
】[0002]随着移动互联网的发展,移动智能终端越来越普及,移动应用的种类与数量都呈现高速增长,智能手机已经成为网民最常用的上网工具。来自Gartner统计数据显示,2015年第4季度全球智能手机的销售量为4亿多台,其中Android系统占据了80.7%。截止2016年2月1日,仅Android官方应用市场GooglePlay上的应用数量就接近200万。同时,移动恶意应用的种类与数量也呈现高速增长,根据阿里聚安全发布的2015移动安全病毒年报,18%的Android设备感染过病毒,95%的热门移动应用存在仿冒应用,恶意应用类型越来越多。常见手机病毒的恶意行为包括恶意扣费、信息窃取、短信劫持等,可严重损害手机用户的利益,危害不容忽视。[0003]Android恶意代码检测方法主要有基于特征代码和基于行为的检测。基于特征代码的检测方法通过检测文件是否拥有已知恶意软件的特征代码来判断其是否为恶意软件,具有快速、准确率高等特点,但无法检测未知的恶意代码,且通常需要维护病毒特征数据库。国外著名的Android恶意代码检测工具Androguard就是基于特征代码实现的。[0004]基于行为的检测方法则通过程序的行为与已知恶意行为模式进行匹配,判断目标文件是否包含恶意代码。误报率虽然并不理想,但可实现对未知恶意代码或病毒的检测,弥补基于特征代码的检测。基于行为的分析又可进一步分为动态和静态两种分析方法。动态分析方法是指利用"沙盒或虚拟机"来模拟运行程序,通过拦截或监控的方式分析程序运行时的行为特征,一定程度上可绕过代码混淆等代码保护机制,但是计算资源和时间消耗较大,且代码覆盖率低。相对于重量级的动态分析,静态分析则相对属于轻量级的方法,通常是通过逆向工程抽取程序的特征,分析函数调用、程序指令等序列,具有快速高效、代码覆盖率高等特点。[0005]目前,大部分的静态分析方法主要从4]1(11'〇丨(11&111丨€68.11111文件、1;[13库文件(.80文件)、Java源文件(通过反编译APK文件获得)等进行特征的提取与分析,而针对Dalvik指令序列的特征研究相对较少。【
发明内容】[0006]为了克服已有Android恶意代码检测方法的快速性较差、有效性较低的不足,本发明提供一种快速性良好、有效性较高的基于Dalvik指令抽象的Android恶意代码检测方法。[0007]本发明解决其技术问题所采用的技术方案是:[0008]一种基于Dalvik指令抽象的Android恶意代码检测方法所述检测方法包括如下步骤:[0009]1)恶意代码的检测与分类模型训练,过程如下:[0010]1.1)确定训练恶意代码检测模型训练集,训练集分为两个子集,一个是恶意APK样本集合,另一个是非恶意样本APK集合;APK文件格式通常都包含一个classes.dex文件,该Dex文件封装可被Dalvik虚拟机执行的Dalvik字节码,利用工具Apktool反汇编APK文件,就能得到一个包含smali源码的文件目录,smali目录结构对应着Java源码的src目录,smali是对Dalvik字节码的一种解释,所有语句都遵循一套标准的语法规范,从smali文件中提取出Dalvik操作码并进行抽象简化为指令符号,再针对抽象的Dalvik指令符号的N-Gram序列特征进行统计与归一化处理,最后采用机器学习的分类算法建立恶意代码检测模型;[0011]1.2)确定恶意家族分类模型的训练集,训练集按照恶意家族类型数量分为子集,按照步骤1.1)的方式建立恶意家族分类模型;[0012]2)将待测APK文件先进行预处理,提取出Dalvik指令特征并作抽象简化与N-Gram序列化处理,再通过恶意代码检测模型的检测,初步判断出是否为恶意代码;如果不是就直接给出检测结果,如果是则进一步通过恶意家族分类模型来获得该恶意代码家族类型。[0013]进一步,所述抽象简化的过程为:在指令集中提取出能够正确反映程序语义的指令和操作码,对功能相近的指令进行归类,并将该类的指令集合抽象为指令符号。[0014]再进一步,在Dalvik指令集中提取出的107种代表性指令并分成10大功能相近的类,并且每类指令抽象为一个特定的指令符号,N-Gram编码直接使用这种指令符号代替完整的Dalvik指令。[00?5]更进一步,所述N-Gram序列化处理处理采用3-Gram序列的随机森林算法。[0016]本发明的技术构思为:基于Dalvik指令序列的抽象模型再结合机器学习的Android恶意代码检测方法。首先研究AndroidDalvik指令的抽象与简化,提取Dalvik指令的操作码,再借鉴OpCodeN-Gram方法提取抽象指令符的序列特征,最后实现针对Android的一种快速有效的恶意代码检测方法。[0017]本发明的有益效果主要表现在:(1)简化Dalvik指令集,用指令符号抽象一类指令的操作码,并提出了一种基于N-Gram序列的特征模型,提高了特征提取的效率。[00?8](2)针对抽象的Da1vik指令符号的N-Gram序列特征,采用随机森林学习算法,有效实现了一种Android恶意代码的检测方法,与常见反病毒软件相比较,获得较高的检测率。[0019](3)随着Android恶意代码训练样本数量的增加,检测方法可不断提高检测精度,具有良好的扩展性。【附图说明】[0020]图1是恶意代码的检测与分类模型训练过程的示意图。[0021]图2是恶意代码的检测与分类过程的示意图。【具体实施方式】[0022]下面结合附图对本发明作进一步描述。[0023]参照图1和图2,一种基于Dalvik指令抽象的Android恶意代码检测方法所述检测方法包括如下步骤:[0024]1)恶意代码的检测与分类模型训练,过程如下:[0025]1.1)确定训练恶意代码检测模型的训练集,训练集分为两个子集,一个是恶意APK样本集合,另一个是非恶意样本APK集合;APK文件格式通常都包含一个classes.dex文件,该Dex文件封装可被Dalvik虚拟机执行的Dalvik字节码,利用工具Apktool反汇编APK文件,就能得到一个包含smali源码的文件目录,smali目录结构对应着Java源码的src目录,smali是对Dalvik字节码的一种解释,所有语句都遵循一套标准的语法规范,从smali文件中提取出Dalvik操作码并进行抽象简化为指令符号,再针对抽象的Dalvik指令符号的N-Gram序列特征进行统计与归一化处理,最后采用机器学习的分类算法建立恶意代码检测模型;[0026]1.2)确定恶意家族分类模型的训练集,训练集按照恶意家族类型数量分为子集,按照步骤1.1)的方式建立恶意家族分类模型;[0027]2)将待测APK文件先进行预处理,提取出Dalvik指令特征并作抽象简化与N-Gram序列化处理,再通过恶意代码检测模型的检测,初步判断出是否为恶意代码;如果不是就直接给出检测结果,如果是则进一步通过恶意家族分类模型来获得该恶意代码家族类型。[0028]本实施例的Android恶意代码检测系统。该系统可以快速有效地检测Android应用程序,识别恶意应用且能够给出恶意家族的类别信息。[0029]整个系统分为两部分,第一部分是恶意代码检测模型和恶意家族分类模型的训练,如图1所示;第二部分是恶意代码检测模型和恶意家族分类模型的测试,如图2所示。[0030]首先,需要确定训练恶意代码检测模型的训练集。训练集分为两个子集,一个是恶意APK样本集合,另一个是非恶意样本APK集合。APK文件格式通常都包含一个classes.dex文件,该Dex(Dalvikexecutableformat)文件封装了可被Dalvik虚拟机执行的Dalvik字节码。利用工具Apktool反汇编APK文件,就能得到一个包含smali源码的文件目录,smali目录结构对应着Java源码的src目录。sma1i是对Da1vik字节码的一种解释,所有语句都遵循一套标准的语法规范。从smali文件中提取出Dalvik操作码并进行抽象简化为指令符号,再针对抽象的Dalvik指令符号的N-Gram序列特征进行统计与归一化处理,最后采用机器学习的分类算法建立恶意代码检测模型。同理,按照恶意家族的类型划分多个训练子集,按照上述类似的处理过程,可建立一个恶意家族分类模型。[0031]利用模型检测与分类时,将待测APK文件先进行预处理步骤,提取出Dalvik指令特征并作同样的抽象简化与N-Gram序列化处理,再通过恶意代码检测模型的检测,就可判断出是否为恶意代码,如果不是就直接给出检测结果,如果是则需要进一步通过恶意家族分类模型来获得该恶意代码家族类型。[0032]官方Dalvik指令有230条,分别包括方法调用指令、数据操作指令、返回指令等十几种类型。设计了一种利用指令符号的简化方案:在指令集中提取出能够正确反映程序语义的指令和操作码,对功能相近的指令进行归类,并将该类的指令集合抽象为指令符号。与原有的Dalvik的指令集相比,更加简化精要,且便于后续的分析与特征提取。表1中给出了最终的设计方案,在Dalvik指令集中提取出的107种代表性指令并分成10大功能相近的类,并且每类指令抽象为一个特定的指令符号,后续N-Gram编码将直接使用这种指令符号代替完整的Dalvik指令。表1为Dalvik指令与指令符号表:[0035]表1[0036]N-Gram算法经常用于自然语言处理领域,但是它也经常用来处理恶意代码的分析。对Dalvik指令符号进行N-Gram编码,同样可以用于分析Android的恶意代码。N-Gram算法假设第m个词的出现只是于前面的m-1个词相关,现假设有Dalvik指令符号序列为MRGITPV,3-Gram编码后提取的特征为[{MRG},{RGI},{GIT},{ITP},{TPV}]。表2中给出了当3-Gram编码时,一个对应的APK应用中包含的1000种不同N-Gram特征的频率统计。[0038]表2[0039]米用270个恶意样本和330正常样本作为实验样本集,根据2-Gram、3-Gram、4-Gram编码分别提取了不同长度的Dalvik指令符号序列,然后再分别使用4种分类算法包括随机森林算法(RandomForest)、支持向量机算法(SVM)、K-最近邻算法(KNN)、朴素贝叶斯算法(NaiveBayes)对3种编码的序列采用10折交叉验证进行测试,结果如表3~表5所示。表3为基于2-Gram序列的测试结果表,表4为基于3-Gram序列的测试结果表,表5为基于4-Gram序列的测试结果表:。[0045]表5[0046]选用AUC、TPR、FPR、Precision、Recall、F_Measure等通用性指标作为实验的评估标准,其中AUC是最重要的标准,它可以正确地反映TPR和FPR之间的关系,AUC值越高代表检测的综合表现越优。FPR也是一项重要的指标,FPR值越低代表误报率越低。在表3中,随机森林算法的AUC值最高,FPR值最低,而TPR值略不如KNN算法。在表4中,随机森林算法的各项指标都表项最优。在表5中,随机森林算法的AUC值最高,KNN算法的FPR值最理想,但是随机森林算法的FPR值与KNN算法的FPR值差距很小。因此,在2-Gram、3-Gram、4-Gram指令符号序列中,随机森林算法的效果最佳。[0047]以随机森林算法为基础进一步寻找最优的N-Gram序列。综合比较表3~表5,不难发现,随机森林算法AUC值按从优到劣的顺序为:4-Gram、3-Gram、2-Gram;随机森林算法FPR值按从优到劣的顺序为:3-6抑111、4-6瓜111、2-6抑111;2-6瓜1]1序列表现都是最劣的,可以不再考虑。4-Gram序列的随机森林算法AUC值比3-Gram序列的随机森林算法AUC值只高出了2%,而4-Gram序列的随机森林算法FPR值比3-Gram序列的随机森林算法FPR值却足足高出了30%。综合分析,3-Gram序列的随机森林算法是一种优选的方法。[0048]选用3-Gram序列的随机森林算法,实现了本发明提出的Android恶意代码检测系统。通过与专业的反病毒软件进行对比实验,检验对恶意代码的检测效果。选用了1000个恶意样本,然后随机划分了2个独立的样本库,60%数据作为训练样本库,40%数据作为所有被测系统的测试样本库。将测试样本发送到VirusBook多引擎文件检测服务,然后得到了8种常见的反病毒软件(Dr·Web、AVG、TrendMicro、⑶ATA、Rising、ESET、MSE、Avast)的检测结果,并统计出各系统的检测率与误报率,如表6所示。[0049][0050]表6[0051]根据表6显示的本次实验结果,本发明申请提出的检测方法在所有的反病毒软件中,以92%的检测率排名第三,超过6个世界著名杀毒软件,说明了本方法的优势。只要训练样本不断扩充且不断优化,检测效果可以不断提高。[0052]本发明的技术构思为:提出了一种Android恶意代码检测方法,用逆向工程将Dex文件转化为Dalvik指令并对指令进行简化抽象,再将抽象后的指令序列进行N-Gram编码作为样本训练,利用3-Gram序列和随机森林学习算法创建优化的分类检测模型,可实现精准高效的Andriod恶意代码检测。【主权项】1.一种基于Dalvik指令抽象的Android恶意代码检测方法,其特征在于:所述检测方法包括如下步骤:1)恶意代码的检测与分类模型训练,过程如下:1.1)确定训练恶意代码检测模型的训练集,训练集分为两个子集,一个是恶意APK样本集合,另一个是非恶意样本APK集合;APK文件格式通常都包含一个classes.dex文件,该Dex文件封装可被Dalvik虚拟机执行的Dalvik字节码,利用工具Apktool反汇编APK文件,就能得到一个包含smali源码的文件目录,smali目录结构对应着Java源码的src目录,smali是对Dalvik字节码的一种解释,所有语句都遵循一套标准的语法规范,从smali文件中提取出Dalvik操作码并进行抽象简化为指令符号,再针对抽象的Dalvik指令符号的N-Gram序列特征进行统计与归一化处理,最后采用机器学习的分类算法建立恶意代码检测模型;1.2)确定恶意家族分类模型的训练集,训练集按照恶意家族类型数量分为子集,按照步骤1.1)的方式建立恶意家族分类模型;2)将待测APK文件先进行预处理,提取出Dalvik指令特征并作抽象简化与N-Gram序列化处理,再通过恶意代码检测模型的检测,初步判断出是否为恶意代码;如果不是就直接给出检测结果,如果是则进一步通过恶意家族分类模型来获得该恶意代码家族类型。2.如权利要求1所述的基于Dalvik指令抽象的Android恶意代码检测方法,其特征在于:所述抽象简化的过程为:在指令集中提取出能够正确反映程序语义的指令和操作码,对功能相近的指令进行归类,并将该类的指令集合抽象为指令符号。3.如权利要求2所述的基于Dalvik指令抽象的Android恶意代码检测方法,其特征在于:在Dalvik指令集中提取出的107种代表性指令并分成10大功能相近的类,并且每类指令抽象为一个特定的指令符号,N-Gram编码直接使用这种指令符号代替完整的Dalvik指令。4.如权利要求1~3之一所述的基于Dalvik指令抽象的Android恶意代码检测方法,其特征在于:所述N-Gram序列化处理处理采用3-Gram序列的随机森林算法。【文档编号】G06F21/56GK106096405SQ201610266436【公开日】2016年11月9日【申请日】2016年4月26日公开号201610266436.4,CN106096405A,CN106096405A,CN201610266436,CN-A-106096405,CN106096405A,CN106096405A,CN201610266436,CN201610266436.4【发明人】陈铁明,杨益敏【申请人】浙江工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1