中国人民解放军63637部队 刘曜硕 张晓楠 夏文君
智能手机的使用给人们学习、生活提供了便利的同时,Android平台恶意代码会对系统正常运行产生不利影响。目前使用的Android恶意代码分析方法应用范围有限,实际效果并不是很好。为了改善这种情况,本文通过分析Android平台的特点,提出了基于恶意软件基因的检测框架和分类框架,从而改善检测效果,为Android平台安全提供可靠保障。
Android系统操作性比较强,目前普遍应用在移动终端上,用户可以获得更好的体验。由于系统具有开放性,在网络环境下容易受到恶意软件的侵入,导致用户隐私泄露,造成巨大经济损失。为了有效预防侵害,要注重Android恶意软件检测和分类的研究,并将其有效应用到实际中去,不断提升手机应用安全性。
所谓软件基因,是指软件中携带功能信息的二进制片段,其接近于生物体基因,可以将软件体信息表达出来,研究软件基因的重点要放在软件的同源性和相似性分析上。恶意软件中的二进制片段具有功能信息,也就是恶意软件基因,Android恶意软件中的恶意基因非常多,对系统运行构成了严重威胁。
目前提取代码段基因最常用的方式是对数据流进行分析,为了便于更好的研究,需要转化数据流的形式,使其变为use-def链,将软件中的数据从使用到定义的流向准确表现出来。研究中用Soot工具来分析代码段,可以获取usedef链。采用Jimple语言,这是一种三地扯语句,非常的方便,运用下列算法可以获取use-def链。
算法1
输入:Android apk文件
1 遍历 一个apk的所有基本块的控制流图:
2 遍历 一个基本块中的每一条语句:
3 获取语句中的定义值和使用值:
......
......
......
在算法1中,我们进行分析时采用Soot工具,之后会产生一种控制流图,从基本块控制流图中将所有数据的定义值和使用值提取出来。对一个值定义时就产生了相应的use-def链。为了深入的研究,要用形式化方式将use-def链表示出来,转变为新的形式。Jimple语句调用语句会产生方法的调用,可以获取代码段的软件基因。
获取Android软件资源文件可以采用多种方法,运用apktool工具进行反编译会产生文件夹,资源文件被有效保存。资源文件有多种形式,其中比较常见的是图片文件和配置文件,要进行提取基因的操作。采用图像指纹方法处理图片文件;同其他技术相比较,图像指纹具有适用性强的特点。在实际处理过程中,为了获得图像指纹,在整个过程中要进行有效处理,严格按照流程执行,可以达到预期效果。
预备基因库是指获取软件代码段和资源段基因,恶意软件的预备基因库和其他预备基因库不同,其最显著特征是数据量大。语句序列的类型和调用方法为代码段基因组成形式,而且没有方法调用的语句序列存在重复率高的情况,这时会发现多种语句序列提取出的基因是相同的。有的基因没有普遍性,存在于少数恶意样本中,检测、分类恶意代码面临更大难度。
区分恶意性样本和非恶意性样本,软件基因库构建之前需要进行相应处理,这是关键的一个环节。预处理恶意代码基因和非恶意代码基因,结束之后再进行综合和去重,恶意软件检测基因库就可以获得。
提取出所有训练集样本的基因,检测模型分类器选择支持向量机,用恶意样本训练集和非恶意样本训练集训练支持向量集的参数,在样本测试集样本中采用分类器。
处理训练集样本时,将每个测试集样本中的软件基因提取出来,进而量化恶意软件检测基因库。测试集样本中包含恶意性标签,对本检测模型的准确性进行验证,将检测结果标签和参考标签相比较,检验模型准确性的指标采用机器学习中常用的准确率和召回率。准确率和召回率分别是指恶意样本中被正确判断为恶意的比例和所有非恶意样本中被正确检测为非恶意样本的比例。
研究软件基因恶意代码的目的是分析恶意代码的同源性,对于家族特性将恶意软件分类模型构建出来,有效分类恶意代码,并起到验证作用。
无法对恶意性与非恶意性样本的基因进行区分就称之为恶意性特征的基因,需将这类基因删除。非恶意性样本在本次实验中总共有2000个,恶意与非恶意软件基因有重合部分,在删除重合部分之前要先提取出恶意软件基因,确保删除的可靠性。各家族恶意软件特性的反映仅靠恶意软件基因库的构建是不行的。对恶意软件研究之前要进行分类处理,各家族恶意软件分类的前提条件是筛选,删除掉出现频率较低的基因,就可以获得各家族的基因库。最后要综合各家族基因库,就形成了恶意代码分类基因库。
构建恶意代码分类基因库时要分类已知恶意代码的家族,但从实际情况来看,通常使用的恶意代码没有家族标签。在本文研究中对标签恶意代码样本有两种方法。一种方法是在获取家族标签时要采用AVClass,运用反病毒引擎来命名恶意代码,通过分析将各命名中表示家族名称的关键字段提取出,再命名恶意代码。另一种方法是以基因为中心聚类恶意代码,根据恶意代码基础基因库,从恶意代码样本中提取向量。
确定基于SVM的分类器为分类框架,以往SVM是一个二分分类器,应用范围有限,对一个集合的样本进行划分,变为正负两类。传统模式存在一些问题,为了改善效果要采用“单对多”的方法,构造出功能强大的SVM多分类器,对多个家族进行区分。多分类支持向量机的训练和二分分类器的训练几乎相同,对所有训练集恶意代码要进行抽象处理,样本集合用于训练支持向量机,可以获得多分类器的所有参数,为后期研究做好准备。
基于恶意软件分类基因库,提出测试集样本基因后转变为高维向量。准确率数组、召回率数组等是分析分类结果的重要依据,要将每个家族看作是正样本,可以保证计算的正确性,其余的是负样本,将每个家族的分类准确率和召回率计算出来。
数据集准备,本文中样本集中的恶意样本和非恶意样本分别是19998个和2000个,要进行处理才可有效。基于样本集获取恶意样本基因有4411条,非恶意样本基因2082条,为了提升实验的准确性,对恶意样本和非恶意样本采用随意抽取方法;并对其进行测试,发现准确率要高于召回率。对检测结果进行分析,可以发现召回率高和对恶意代码的恶意性检测准确性较高有着直接关系。这样可以得到重要结论,基于恶意代码基因的分析框架的关键是恶意代码间的同源性,正常代码处理时非常接近于原始代码基因,非恶意代码检测错误的情况容易出现。为了提升系统安全性,目前采用的防病毒引擎存在不足之处,会引发一系列问题。
在恶意代码分类实验中,对样本集中的恶意代码进行划分,使其变为多个家族。由于很难实现全面研究,对所有恶意代码家族进行了选择,排序依据为样本容量。基于长尾效应,这20个家族只保留了13567个恶意样本。为了确保实验统一性,要控制变量,在实验中采用同样数量的恶意样本。在赋予标签中对样本进行分类。在两个分类实验中要选择不同家族。分析不同分类器的测试结果性能度量值,基于基因对恶意代码的家族进行研究具有重要意义。AVClass为参考标签,不适用于少数家族的恶意代码分类。对反病毒引擎检测结果进行整理、分析,发现本实验中Android恶意代码检测率较高。基于基因的研究方法和以往的反病毒引擎有着明显差别,从分类结果上来看,较高重合率对基因对恶意软件分类分析可以起到促进作用。基于聚类结果的参考标签和分类结果基本相同,对基于基因的分类可以基本契合聚类结果进行验证。
结语:综上所述,恶意软件对Android系统会产生不利影响,造成一系列问题,为了有效应对,要加强恶意检测软件的开发,为系统安全性提供可靠保障。本文从基因的角度出发,对Android恶意软件检测与分类进行分析,可以及时发现并处理恶意软件,保证系统处于正常运行状态中,让用户获得更佳使用体验。