技术领域
本发明涉及特征提取领域,尤其是一种用于Android恶意软件检测的动静混合特征提取方法。
背景技术
针对Android恶意软件的检测工作,既依赖于分类器的优劣程度,更依赖于用于分类的特征向量能否最大程度地反映出恶意软件的全部特征信息。目前,研究者们对于Android恶意软件的特征提取工作,并未做深入研究。如董庆宽等人的发明方法中只通过获取应用程序运行时trace文件来获取特征,未考虑静态特征对于恶意软件检测结果的影响;谢丽霞等人只通过静态数据集筛选出静态特征子集,再得到分类器对应的最优子集,未考虑动态特征对于恶意软件检测结果的影响。
发明内容
为了克服现有技术的不足,本发明提供一种Android系统恶意软件检测中动静混合特征提取方法。在静态数据集的基础上,基于CHI统计方法筛选并搭建高危权限和敏感API库;根据高危权限和敏感API,利用反编译手段分析、筛选得到基于静态数据集的静态特征;将APK文件运行在搭建了开源框架Xposed的Android模拟器上,通过Hook系统敏感API和监控系统运行状态信息,得到基于敏感API调用和系统运行状态的动态特征;组合静态特征和动态特征为最终的动静混合特征。
本发明解决其技术问题所采用的技术方案是:
步骤一:基于CHI统计方法筛选高危权限;
基于CHI统计方法筛选高危权限,具体流程如下:
(1)选取N个样本,包含恶意样本N
(2)选取Android系统的所有权限作为权限集P={p
(3)对于权限p
表1权限样本分组
计算权限p
其中,N=A+B+C+D,A表示属于类别K且含有权限p
(4)由于CHI值越高,表示权限p
表2高危权限列表
步骤二:基于凝聚层次和K-Means结合方法去除权限之间相关性
Android部分权限之间存在较强的相关性,若同时选取具有明显相关性的权限作为特征,则对分类结果产生显著影响;
K-Means聚类算法快速处理大量数据,但是不能自动寻找最优聚类的类别数量,从而导致结果质量的不稳定性;
通过使用凝聚层次聚类算法优化K-Means聚类算法中的初始聚类中心,对步骤一中的高危权限进行聚类处理;即,先使用凝聚层次聚类算法对高危权限进行初始聚类获得初始聚类中心,再使用K-Means聚类算法基于初始聚类中心对高危权限进行重定位聚类。其中,权限之间的相关程度使用“皮尔逊相关系数”进行衡量;
设恶意样本集为
聚类后的权限共分成14组,设为P
表3聚类后的权限组
步骤三:筛选敏感API;
通常情况下,恶意软件功能的实现都需要调用特定API来完成,权限和API之间存在多对多的映射关系,往往一个权限组下面对应多个API。同时,每一组高危权限对应的API函数集合中包含多个重载的函数,这些重载函数本身实现的功能基本一致,所以只需要监控其中一个即可。
针对每一组高位权限对应的API函数集合进行筛选,对于重载的函数或者功能一致的多个API函数,只保留其中一个,最后共筛选出40个敏感API,部分敏感API如表4所示:
表4部分敏感API
步骤四:基于反编译技术提取静态特征
静态特征由高危权限特征和敏感API特征组成;
依据步骤二中筛选出来的14组高危权限P
依据步骤三筛选出来的敏感API集合API
由于只需要在APK文件中得到静态API名称,先将APK文件中的dex文件反编译成smali文件,再对smali文件进行分析会更为方便。
步骤五:基于开源框架Xposed提取动态特征
基于Xposed框架动态Hook敏感API,以提取动态特征;
依据步骤三筛选出来的敏感API集合API
单纯依靠系统敏感API调用频次信息无法全面反映APP的动态特征,本发明在提取敏感API调用频次特征的同时,记录当前系统状态特征作为辅助分析参数;
结合步骤四中静态特征向量F
F={F
其中,F
所述权限p
其中,
所述凝聚层次聚类算法的步骤如下:
输入:聚类前的权限集合F
输出:聚类后的权限集合P
1)设定皮尔逊相关系数η为0.95;
2)定义聚类后的权限集合P
3)将P
4)计算权限元素两两之间的皮尔逊相关系数
5)选取皮尔逊相关系数
6)返回经过聚类后的权限特征向量簇集合P
所述基于K-Means聚类算法对权限集合进行重定位聚类,步骤如下:
输入:聚类前的权限集合F
输出:最终聚类集合P
1)定义最终聚类好的权限组集合P
2)从初始聚类集合中的每个类簇中随机选出一个权限作为初始聚类中心;
3)计算所有权限元素p
4)聚类中心集合P
5)对每一类权限元素
6)返回最终聚类结果集合P
所述静态权限特征提取流程如下:
(1)使用ApkParser解析APK文件,得到配置文件AndroidManifest.xml;
(2)基于“字符串匹配”方法提取配置文件中的所有权限信息,放在列表P
(3)对权限p
所述静态敏感API特征提取流程如下:
(1)解压APK文件,得到其中所有dex文件;
(2)使用baksmali反编译dex文件为smali文件;
(2)解析每一个smali文件,匹配smali格式的API字符串,得到API列表API
(3)对api
由此,综合高危权限特征和敏感API特征,得到静态特征F
所述提取动态敏感API调用频次特征的具体流程如下:
(1)获取root权限和安装Xposed框架,实现敏感APIHook;
(2)监控Android系统,若有系统api
(3)每隔7天将该APP对应的动态敏感API调用频次特征向量值归零,重新记录下一周期的动态敏感API调用频次特征数据;由此得到系统敏感API调用频次特征向量,设为F
所述提取动态敏感API调用时系统状态特征的具体流程如下:
(1)对于敏感API集合中的每一个敏感API,设用于辅助分析的特征向量对象为F
表5辅助分析特征向量说明
(2)系统敏感API调用产生的同时,记录当前APP产生的系统状态特征向量,是则赋值特征值为1,否则赋值特征值为0;
由此得到动态敏感API调用时的系统状态特征向量,设为F
本发明的有益效果在于在Android恶意软件的检测过程中,关键步骤在于对恶意特征尽可能全面的提取,以及在分类模型中的输入数据尽可能低维且包含全部特征信息。现有技术对于Android恶意软件特征的提取在静态和动态两个方面上不能完全兼顾,提取的信息对于恶意特征描述有或多或少涵盖不全面的问题。本发明通过CHI统计方法、凝聚层次聚类算法和K-Means聚类算法结合使用以建立高危权限和敏感API库模型;在此基础上分别从静态分析和动态分析两个角度出发,来获取Andorid恶意软件的混合特征。本发明所提方法兼顾静态和动态特征,利用低维特征数据尽可能多的描述恶意软件的综合恶意特征。实验表明,本发明对Android恶意软件具有良好的检测准确率。
附图说明
图1是本发明十折交叉验证对比图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
本发明解决其技术问题所采用的技术方案是:
步骤一:基于CHI统计方法筛选高危权限
基于CHI统计方法筛选高危权限,具体流程如下:
(1)选取N个样本,包含恶意样本N
(2)选取Android系统的所有权限作为权限集P={p
(3)对于权限p
表1权限样本分组
计算权限p
其中,N=A+B+C+D,A表示属于类别K且含有权限p
(4)由于CHI值越高,表示权限p
表2高危权限列表
步骤二:基于凝聚层次和K-Means结合方法去除权限之间相关性
Android部分权限之间存在较强的相关性,若同时选取具有明显相关性的权限作为特征,则对分类结果产生显著影响;
K-Means聚类算法快速处理大量数据,但是不能自动寻找最优聚类的类别数量,从而导致结果质量的不稳定性;
通过使用凝聚层次聚类算法优化K-Means聚类算法中的初始聚类中心,对步骤一中的高危权限进行聚类处理;即,先使用凝聚层次聚类算法对高危权限进行初始聚类获得初始聚类中心,再使用K-Means聚类算法基于初始聚类中心对高危权限进行重定位聚类。其中,权限之间的相关程度使用“皮尔逊相关系数”进行衡量;
设恶意样本集为
权限p
其中,
本发明对高危权限进行聚类的操作主要包括如下两个步骤:
(1)基于凝聚层次聚类算法对权限集合进行初始聚类,找到初始聚类中心。算法描述如下:
算法1.凝聚层次聚类算法
输入:聚类前的权限集合F
输出:聚类后的权限集合P
1)设定皮尔逊相关系数η为0.95;
2)定义聚类后的权限集合P
3)将P
4)计算权限元素两两之间的皮尔逊相关系数
5)选取皮尔逊相关系数
返回经过聚类后的权限特征向量簇集合P
(2)基于K-Means聚类算法对权限集合进行重定位聚类。算法描述如下:
算法2.K-Means聚类算法
输入:聚类前的权限集合F
输出:最终聚类集合P
1)定义最终聚类好的权限组集合P
2)从初始聚类集合中的每个类簇中随机选出一个权限作为初始聚类中心;
3)计算所有权限元素p
4)聚类中心集合P
5)对每一类权限元素
6)返回最终聚类结果集合P
聚类后的权限共分成14组,设为P
表3聚类后的权限组
步骤三:筛选敏感API
通常情况下,恶意软件功能的实现都需要调用特定API来完成,权限和API之间存在多对多的映射关系,往往一个权限组下面对应多个API。同时,每一组高危权限对应的API函数集合中包含多个重载的函数,这些重载函数本身实现的功能基本一致,所以只需要监控其中一个即可。
本发明针对每一组高位权限对应的API函数集合进行筛选,对于重载的函数或者功能一致的多个API函数,只保留其中一个,最后共筛选出40个敏感API,部分敏感API如表4所示:
表4部分敏感API
步骤四:基于反编译技术提取静态特征
静态特征由高危权限特征和敏感API特征组成;
依据步骤二中筛选出来的14组高危权限P
静态权限特征提取流程如下:
(1)使用ApkParser解析APK文件,得到配置文件AndroidManifest.xml;
(2)基于“字符串匹配”方法提取配置文件中的所有权限信息,放在列表P
(3)对权限p
否则,f
依据步骤三筛选出来的敏感API集合API
由于只需要在APK文件中得到静态API名称,先将APK文件中的dex文件反编译成smali文件,再对smali文件进行分析会更为方便。因此,静态敏感API特征提取流程如下:
(3)解压APK文件,得到其中所有dex文件;
(4)使用baksmali反编译dex文件为smali文件;
(2)解析每一个smali文件,匹配smali格式的API字符串,得到API列表API
(3)对api
由此,综合高危权限特征和敏感API特征,得到静态特征如下:
F
步骤五:基于开源框架Xposed提取动态特征
本发明基于Xposed框架动态Hook敏感API,以提取动态特征;
依据步骤三筛选出来的敏感API集合API
提取动态敏感API调用频次特征的具体流程如下:
(1)使用业内公知的方法获取root权限和安装Xposed框架,实现敏感APIHook的关键代码如图1所示;
(2)监控Android系统,若有系统api
(3)为了能够更加明显的反映一段时间内动态敏感API调用频次特征的最新数据,本发明通过实验对比,最终确立7天为一个周期。即,每隔一周将该APP对应的动态敏感API调用频次特征向量值归零,重新记录下一周期的动态敏感API调用频次特征数据;由此得到系统敏感API调用频次特征向量,设为F
单纯依靠系统敏感API调用频次信息无法全面反映APP的动态特征,本发明在提取敏感API调用频次特征的同时,记录当前系统状态特征作为辅助分析参数;
提取动态敏感API调用时系统状态特征的具体流程如下:
(1)对于敏感API集合中的每一个敏感API,设用于辅助分析的特征向量对象为F
表5辅助分析特征向量说明
(2)系统敏感API调用产生的同时,记录当前APP产生的系统状态特征向量,是则赋值特征值为1,否则赋值特征值为0;
由此得到动态敏感API调用时的系统状态特征向量,设为F
结合步骤四中静态特征向量F
F={F
其中,F
综上,本发明所提出的恶意软件检测过程中动静混合特征提取过程叙述完毕。在步骤六中,本发明依据上述动静混合特征提取方法获得的数据集与依据其他特征提取方法获取的数据集进行对比实验,以验证本发明所提方法的有效性。
步骤六:对比实验
本发明在其他实验条件保持不变的前提下,分别通过对比缺少步骤二(不取出权限之间的相关性)、缺少步骤四(只提取动态特征)、缺少步骤五(只提取静态特征)和不提去步骤五中动态敏感API调用时的系统状态特征,来进行对比实验和分析,以此验证本发明的有益效果。
本发明实验所用数据集分为良性APK样本数据(不含恶意软件攻击行为)和恶意APK样本数据(含恶意软件攻击行为)。其中,良性APK数据从国内外Android应用市场(豌豆荚和GooglePlay)下载,恶意APK数据从VirusShare和Drebin下载,去除数据不完整和内容重复的APK样本,用于实验部分的样本数据控制在1500个,足以满足本发明的实验验证要求。
表6实验环境
为确保在同一实验环境下进行同等条件的对比,实验分类器均采用J48决策树和随机森林算法来构造,对于不同特征提取方法采样的特征向量,均采用同一方法进行数据预处理,均采用10折交叉验证方法进行对比分析。
本发明通过从不同方面对比提取方法来验证本发明所提方法的效果,具体实验结果如下:
去除权限相关性前后的实验对比分析:
表7去除权限相关性前后对比分析
可以看出,去除权限相关性后,TPR、FPR和ACC都有所改善。同时,降低了特征维数,更加有利于分类器分类。
本发明在传统动态特征提取的基础之上,新增对辅助特征的提取。即,在监控敏感API调用特征的同时,获取Android系统的当前状态。
表8获取Android系统状态特征前后对比分析
可以看出,对系统状态进行监控,能够有效提高检测的准确率。
(3)只进行静态或动态特征提取和进行动静混合特征提取对比分析:
表9静态特征提取和动静混合特征提取对比
本发明对上述对比实验采用5次、10次、15次和20次十折交叉验证法,对检测准确率ACC分别取平均值,生成图1所示的对比图。
可以看出,仅仅依靠单一特征提取进行Android恶意软件检测,准确率都不是很高。本发明在传统动静特征提取的基础之上,针对权限相关性的去除进行优化,并且在提取动态特征的同时监控了系统状态信息作为辅助参考特征,大大提高了检测准确率。
机译: 一种彩色图像特征向量的提取方法及利用特征向量的检索方法
机译: 图像特征提取装置和图像特征提取方法以及使用该图像提取方法的图像处理系统
机译: 用于从图像中提取尺度不变特征的图像信号滤波方法和装置,以及使用图像信号提取方法,装置和记录介质的图像特征提取方法,装置和记录介质