首页> 中国专利> 基于混合特征的Android恶意代码检测方法

基于混合特征的Android恶意代码检测方法

摘要

一种基于混合特征的Android恶意代码检测方法,所述方法包括混合特征提取过程、特征建模与检测两部分。所述混合特征提取过程包括语法特征提取和语义特征提取;所述特征建模与检测包括特征值规范化、特征聚类和相似度计算、特征检测;本发明提取恶意代码的语法和语义特征,对特征值规范化后进行聚类和相似度计算,能够有效区分正常代码和恶意代码。本发明的设计方案可以实时检测各种Android恶意代码。

著录项

  • 公开/公告号CN106228068A

    专利类型发明专利

  • 公开/公告日2016-12-14

    原文格式PDF

  • 申请/专利权人 江西师范大学;

    申请/专利号CN201610575848.6

  • 发明设计人 郭帆;徐林溪;

    申请日2016-07-21

  • 分类号G06F21/56(20130101);

  • 代理机构36122 南昌市平凡知识产权代理事务所;

  • 代理人夏材祥

  • 地址 330100 江西省南昌市紫阳大道99号

  • 入库时间 2023-06-19 01:08:44

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-05

    授权

    授权

  • 2017-01-11

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20160721

    实质审查的生效

  • 2016-12-14

    公开

    公开

说明书

技术领域

本发明涉及一种Android恶意代码的检测方法,尤其涉及一种基于混合特征的静态检测恶意代码方案,属于移动应用和计算机安全领域。

背景技术

由于安卓(Android)操作系统开放源代码,它已成为目前最流行的手机操作系统,全球智能手机市场占有率的调查报告指出Android设备占据超过50%的市场份额,在已发现的恶意手机应用中,绝大部分基于Android平台。

现有恶意代码检测方法主要分为动态和静态两种方式。动态方法指通过代码插桩,在程序运行时动态收集行为特征,对行为特征建模并与已有特征向量进行匹配实现检测。静态方法分析程序的源代码或二进制代码,提取代码的特征值,对特征建模后与已有特征向量进行匹配,判定是否是恶意代码。

程序特征分为语法特征和语义特征两类。Android程序的程序签名、程序权限、所接受的Intent类型、所接受的组件信息等属于语法特征。Android程序的数据流图、控制流图、系统依赖图、系统调用序列、污点传播路径等属于语义特征。混合特征指同时使用了几种语法和语义特征作为恶意代码的特征。

提取出程序的各种特征值后,特征向量的建立和匹配可以使用聚类方法、分类方法和相似度计算来实现。常用的聚类算法有K均值算法和最大期望算法,常用分类算法有K最近邻居算法、朴素贝叶斯算法和支持向量机算法,常用相似度计算包括欧式距离和Jaccard距离方法。使用聚类算法可识别恶意代码具体属于哪一类,分类算法和相似度计算只判定代码是否是恶意代码。

本发明提出一种基于混合特征的Android恶意代码检测方法,包含特征提取过程和特征建模与检测两部分。特征提取过程分析Android程序的APK文件,首先应用反编译工具把APK文件转化为Jimple中间代码,然后基于开源FlowDroid框架的语法分析模块和污点分析模块分别提取程序的语法和语义特征,语法特征包括程序声明的权限集合和所接受的Intent类型,语义特征为基于类抽象的污点传播路径集合,最后根据开源WEKA框架的ARFF格式对特征值规范化并生成特征向量。特征建模针对已知恶意代码的特征向量,使用K均值算法对它们进行聚类,生成各类已知恶意代码的代表特征向量。特征检测应用欧式距离法检测目标Android程序与各类已知恶意代码的代表特征向量的距离是否小于预定的阈值,小于阈值则为相应类别的恶意代码。

发明内容

本发明的目的是,提出一种静态检测恶意Android代码的方法,提高Android手机抵御外部攻击的能力,为达到此目的,本发明采用以下技术方案。

本发明的方法总体架构分为两部分:一是混合特征提取过程,包括语法特征提取和语义特征提取;二是特征建模与检测,包括特征规范化、特征聚类和相似度计算、特征检测;

1)混合特征提取过程

1.1)语法特征提取包括提取程序声明的权限集合和所接受的Intent类型;本发明分别对已知恶意代码和已知正常代码提取它们声明的所有权限,并按每种权限的声明次数进行排序,分别生成已知恶意代码和已知正常代码的声明权限排序表,提取在两张表中排名显著不同的权限作为语法特征;本发明不仅从程序的Manifest.xml配置文件中提取声明的权限列表以及所接受的Intent类型,而且分析代码中所有监听系统事件的有关语句,使用常量传播分析获取方法调用语句中声明的Intent类型,综合两部分结果得到代码的语法特征;

1.2)语义特征提取包括污点传播路径集合的提取和污点传播路径集合的类抽象;本发明将污点传播路径定义为从一个参数为外部输入(污点)的方法调用(Source方法)起始,到一个输出数据的方法调用(Sink方法)结束,路径的中间为数据流传播节点;每个Source和Sink之间如果存在一条路径,本发明使用(Source, Sink)对表示起点和终点相同的污点传播路径集合,并以程序中出现的所有(Source, Sink)对作为程序的语义特征,能够准确的区分正常代码和恶意代码;但是Android系统中的Source和Sink方法较多,有超过2万种成对可能性,使得提取污点传播路径的计算量很大;本发明为了降低提取污点传播路径集合的计算量,把属于同一类的不同Source和Sink方法进一步合并;如果两个不同的(Source, Sink)对,两个Source 属于同一类而且两个Sink也属于同一类,那么把这两对合并为Source所在类到Sink所在类的污点传播路径集合,将基于方法的污点传播路径集合抽象为基于类的污点传播路径集合。

2)特征建模与检测

本发明的特征规范化把语法和语义特征值组织为多维度特征向量,对语法特征赋值true或false来表示对应特征是否存在,将语义特征赋值为每一对类下存在的(Source,Sink)对的总数量,其中每对(Source,Sink)表示程序中至少存在一条从Source方法到Sink方法的传播路径;

本发明的特征聚类采用K均值算法进行聚类,首先需要指定K个已知不同类别的恶意代码的特征向量为初始簇心,然后在已知的恶意代码集合中随机选择一个作为第K+1个簇心,聚类过程在簇心收敛或达到预设的迭代次数后停止,获得的K+1个簇心的特征向量作为不同恶意程序类别的代表特征向量;

本发明的特征聚类同时统计各个簇中所有恶意代码到簇心距离的数量分布,并以加权平均数方式计算每一个簇对应的阈值,精确到小数点后一位;

本发明的相似度计算针对Numeric和Nominal数据类型做不同处理,Nominal类型表示某特征是否存在,该类型的两个特征值相等则距离为0否则为1,对于Numeric类型,先将其标准化后再计算距离值;标准化过程计算该特征在所有已知恶意代码集合中的最大值Max、最小值Min以及差值Max-Min,标准化后的特征值X’与原始特征值X的关系如下:

对于Numeric类型的特征值X和Y,两个特征向量在该维度的距离值为标准化值X’和Y’之差;

本发明的特征检测首先对提取的混合特征值计算规范化特征向量,然后分别计算该特征向量与与各簇的代表特征向量之间的距离,最后取所有距离的最小值与对应簇的阈值做比较;特征向量的距离值直接反映代码的相似度,本发明将距离最小即最相似的簇作为结果的预估计,并比较最小距离与对应阈值来验证预估计,若该距离小于阈值则将目标代码归为相应簇,否则该代码为正常代码。

本发明的有益效果是设计一种基于混合特征的Android恶意代码检测方法,不仅选择程序声明的权限集合和所接受的Intent类型作为语法特征,而且选择基于类抽象的污点传播路径集合作为语义特征,将混合特征规范化为可进行数值计算的特征值,应用欧式距离计算目标代码的特征向量与已知不同恶意代码类的代表特征向量的相似度,可有效区分恶意代码和正常代码。

本发明的设计方案可以实时防御各种Android恶意代码对Android手机的攻击。

附图说明

图1 为本发明所述方法的体系结构图,图中描述整个检测方法的流程;

图2 本发明所述为对已知正常代码和恶意代码集合的分析得出的各种权限在代码中声明的频率大小排序,排在前面的表示出现的频率更高;

图3 为本发明一个程序片段和Manifest.xml文件的示例,用于辅助说明语法特征提取过程;

图4 为本发明一个程序片段,用于辅助说明语义特征提取过程;

图5 为本发明提取的原始特征值和相应的用ARFF格式规范化后的特征向量;

图6 为本发明设置K均值算法需要的K个初始簇心的算法伪码;

图7 为本发明方案实施时提供的命令行选项截图。

具体实施方式

本发明的设计方案的实施需要完成以下几项工作,一是根据已知代码集合选择合适的权限特征并编码实现具体的语法特征提取过程,二是编码实现污点传播路径集合的提取,三是采用合适的标准对特征值进行规范化,四是实现K均值算法和欧式距离法完成特征建模和检测。

本发明的权限特征选择可分别从已知恶意代码集合和已知正常代码集合提取一定数量的样本进行分析,得到每种权限在不同集合中出现的频率。图2给出了不同权限在两个集合中出现频率的排序表,排在前面表示出现的频率高,方案实现时挑选在两个集合中的序号差别比较大的权限。

图3给出一个程序片段和一个Manifest.xml配置文件样本,说明如何实现语法特征的提取。程序片段的第8行指明了Intent类型,语法特征提取过程必须实现常量传播分析并发现第2行的“android.intent.action.BOOT_COMPLETED”Intent类型会作为第8行方法调用语句的参数,确定该Intent类型为程序的语法特征。从Manifest.xml文件中发现“user-permission android:name=”关键字符串,提取相应行的权限声明,发现“action android:name=”关键字符串,提取相应行的所接受Intent类型。

本发明的污点传播路径集合的提取依赖于污点分析的实现。方案实现基于开源FlowDroid框架提供的污点分析模块,从其生成的污点传播路径中提取相应的(Source,Sink)对。FlowDroid数据流分析包括向前和向后两个过程。向前分析跟踪污点数据跟随程序执行的传播路径,向后分析根据别名分析找到污点变量对应的别名集合,然后分别从这些别名开始再次执行向前分析,从而找到新的污点传播路径。

图4给出一个程序示例,向前分析过程如下:1)Source方法getIntent的返回值污染了对象intent;2)字符串pwd由intent的”password”键值赋值,由于intent是污点对象,因此pwd也被污染;3)字符串pwd赋值给user成员变量,导致整个user也归为污染对象;4)字符串pwdString由污染对象user变量的属性赋值,因此pwdString也被污染;5)Sink方法sendTextMessage调用的参数包含污染字符串pwdString;从而生成一条污点传播路径“5-7-9-13-15”,产生特征值(Source, Sink)对(Activity.getIntent(), SmsManager.sendTextMessage()),对其进行类抽象后,得到基于类的特征值(Activity, SmsManager)。

向前分析到第9行代码时,类成员user被污染,此时进行向后分析:1)类成员user被污染,向后寻找包含user所在内存的其他别名;2)类成员user赋值给userInfo成员变量,userInfo判为污染变量;3)以userInfo为污染源,执行向前分析;以userInfo为污染源的向前分析得到一条污点传播路径“5-7-9-6-17”,产生(Source, Sink)对(Activity.getIntent(),FileWriter.write()),得到基于类的特征值(Activity,FileWriter)。

图4的代码示例中存在两条语义特征(Activity, SmsManager)和(Activity,FileWriter),特征值表示每个基于类的路径集合包含了多少个基于类中方法的(Source, Sink)对,图4代码中两个特征值分别为1。

本发明的实现采用开源框架WEKA提供的ARFF格式标准对特征值进行规范化。图5给出了原始的特征值示例和对应的规范化后的特征向量。图5左边是原始特征值,包括三部分:1)@SourceSink表示基于方法的污点传播路径集合,按照Sink方法进行分组2)@ActionName表示所接受的Intent类型;3)@Permission表示程序声明的权限集合。

ARFF格式的一行代表向量的一维,以@attribute开始,使用哈希码表示不同维度,规范化后的特征值类型包括Numeric和Nominal,Numeric类型初始化为0,Nominal 类型则初始化为false。特征规范化过程使用段式管理方法,将三部分特征分为三段并分别给出起始位置和段大小,每段根据哈希码的大小递增排序,在段内使用二分查找定位对应维度,如果维度为Numeric类型,则该维的特征值加一,如果是Nominal类型则将特征值设置true。

图5左边的原始特征值包含(Context.startService(), Cursor.getString())和(Context.startActivity(), Cursor.getString())两条污点传播路径,抽象成基于类的语义特征(Context, Cursor)。特征值规范化后,”Context-Cursor”字符串的哈希码为106630516,因为有两条传播路径,该维度赋值为2。相应地,Intent类型“android.intent.action.BOOT_COMPLETED”和声明的权限“android.permission.SEND_SMS”字符串哈希码为798292259和490967842,对应维度赋值为true。

本发明的实施由于需要指定聚类的初始中心为已知不同类别的恶意代码的特征向量,所以需要对经典K均值算法做适当修改,图6给出具体伪码。首先将已知恶意代码的特征向量放在整个训练集的最后面,第一个for循环用来从训练集底部向上遍历读取指定的K个样本特征向量。第二个for循环用于从剩下的样本集中随机选取一个样本特征向量作为“其他”类别恶意代码的初始中心点。将这K+1个特征向量加入到m_ClusterCentroids中,这个变量保存聚类开始的初始中心点。最后以此K+1个初始中心点开始标准的K均值算法进行迭代聚类。

本发明的实施最终以Java的JAR包方式实现,图7给出了软件的命令行选项。软件提供模型训练和模型检测两部分功能。模型训练一共涉及4个选项,-cp指明android.jar的路径,-k指把训练集分为k+1个簇,-seed指聚类时作为初始簇中心的APK代码的路径;-ts指所有已知APK代码集合的路径。其中-seed路径下必须为-k指明的APK数量,训练结束后会在当前目录下产生三个文件,分别指明即k个簇中心,聚类结果和每个APK的特征向量。模型检测的命令行格式为“java -jar HFDroid.jar [android.jar路径] [待测apk路径]”返回结果表明是否是恶意代码。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号