基于敏感子图的安卓恶意重打包软件检测方法与流程

文档序号:11951608阅读:220来源:国知局
基于敏感子图的安卓恶意重打包软件检测方法与流程

本发明涉及安卓平台软件安全技术领域,特别涉及一种基于敏感子图的安卓恶意重打包软件检测方法。



背景技术:

安卓手机近些年得到了越来越多的关注,许多手机用户们选择安卓系统的手机并从手机APP下载市场(如Google Play)获取优秀的应用软件,然而这也导致安卓平台成为恶意软件的一大目标。互联网安全技术全球领导厂商360,在最新公布的《互联网安全播报》中指出2015年第二季度,360互联网安全中心共截获安卓移动平台新增恶意程序样本550万个,平均每天截获新增手机恶意程序样本近6.04万个。累计监测到移动端恶意程序感染用户达6573万人次,平均每天恶意程序感染量达到了72.2万人次。在新增的恶意程序样本中,恶意重打包程序占据了80%以上,恶意开发者们利用成熟的反编译技术得到程序源码,然后通过植入恶意代码的方式快速生成恶意软件并上传到安卓平台上引诱手机用户进行下载,从而非法获取利益。恶意重打包软件的快速增长直接危害到手机用户们的信息以及财产安全。

为了解决这一难题,全球相关领域的研究者们提出了不同的软件恶意性检测方法。目前已知的恶意软件检测方法大致分为动态与静态检测两种。现有的大部分静态分析方法需要依靠系统建立的模式库,例如权限申请情况或者API的调用情况。但是由于恶意重打包软件其载体多为良性,这种检测方式经常会出现误报、漏报。动态分析方法通过插桩技术对程序的运行时状态进行监控以获取相关信息,进而提取特征来描述其恶意行为。然而该检测方式耗时量大,对资源的占用率高,并且无法保证对目标软件所有执行路径的覆盖。

针对以上问题,我们亟需找到一种快速、有效的安卓恶意重打包软件检测方法,以达到保护用户信息以及财产安全的目的。



技术实现要素:

为了克服上述现有技术的缺陷,本发明的目的在于提供一种基于敏感子图的安卓恶意重打包软件检测方法,可以弥补上述静态检测方法的误报漏报缺点并保持了其高效率、资源占用率低的优点,实现了对安卓平台恶意软件的高准确度检测,有效的保护了手机用户的信息财产安全。

为了实现上述目的,本发明采用的技术方案是:

一种基于敏感子图的安卓恶意重打包程序检测方法,包括如下步骤:

步骤S1):基于开源工具Pscout构建敏感函数集合SA={si|1≤i≤680},其中si表示一个敏感函数,然后获取待检测安卓程序的所属类别c,基于TF-IDF-like计算敏感函数si相对于类别为c的良性数据集Bc以及恶意数据集M的敏感系数scs(si,c);

步骤S2):利用反编译技术对待检测安卓程序的安装文件进行反编译生成相应的Smali代码,进一步对Smali代码进行分析并抽取函数调用关系,从而构建成函数调用图SFCG(V,E),其中V表示程序中所有的函数节点集合,而表示程序中所有的函数调用的集合;

步骤S3):基于步骤S2)构建的SFCG(V,E),根据程序调用的敏感函数集合SS={sk|1≤k≤n|n=|V|}中每一个节点元素sk在SFCG中的拓扑结构位置,将SFCG划分成为若干个包含敏感函数节点的子图,该子图集合表示为SGS={SGj|1≤j≤m},其中m为子图个数;然后基于步骤S1)中计算所得的敏感系数计算每一个子图的敏感系数scg(SGj,c),选择敏感系数最大的子图作为该目标程序的敏感子图SSG;

步骤S4):基于步骤S3)得到的敏感子图SSG,抽取其三种结构特征:敏感系数特征scg(SSG,c)、敏感距离特征tsd(SSG,c)以及三种敏感Motif数量特征tnsm1(SSG,c),tnsm2(SSG,c)tnsm3(SSG,c);

步骤S5):基于步骤S4)针对每一个样本构建一个五维特征向量,利用随机森林算法对训练样本的特征空间进行评估并构建分类器,从而对待检测的重打包恶意软件进行快速、有效的检测。

进一步的,所述步骤S1)中敏感系数计算方法为TF-IDF-like:针对敏感函数si,统计其在恶意数据集M中出现的次数m(si)以及在良性数据集Bc中出现的次数b(si,c),其中c表示待检测样本的类别标签;敏感函数si的敏感系数计算公式为其中p表示恶意数据集M的样本总数,q(c)表示良性数据集Bc的样本总数。

进一步的,所述步骤S3)中将SFCG划分成为若干个子图方法为:对于程序调用的函数节点集合V={vi|1≤i≤n},依次判断其每一个节点元素vi是否存在于敏感API集合SA中,若存在,将其添加至该程序的敏感函数节点集合SS中;对于SS中每一个敏感函数节点vk,构建子图SGk={vk},并将该节点附近步长为α的节点也添加至子图中;对于子图集合SGS={SGj|1≤j≤m},对其中任意两个子图SGi,SGj作合并操作,合并条件为其中SNG(SGi)表示子图SGi中的敏感函数集合。

进一步的,所述步骤S3)中敏感子图选择方法为:对于子图SGj,首先计算其子图敏感系数其中SNG(SGi)表示子图SGi中的敏感函数集合,scs(si,c)表示敏感函数si相对于类别c的敏感系数;在敏感子图集合SGS={SGj|1≤j≤m}中,选择子图敏感系数最大的子图作为其目标程序的敏感子图SSG,其计算公式为

进一步的,所述步骤S4)中基于敏感子图SSG,抽取三种结构特征方法为:敏感系数特征scg(SSG,c)计算公式为其中SNG(SGi)表示敏感子图SSG中的敏感函数集合,scs(si,c)表示敏感函数si相对于类别c的敏感系数;

敏感距离特征tsd(SSG,c)计算公式为:其中dis(si,sj)表示在SSG敏感子图中节点si到节点sj的最短距离;

三种不同敏感Motif数量计算方法为:首先使用开源工具gtrieScanner分解敏感子图SSG,得到三种正常Motif的数量,然后统计带有敏感函数节点的Motif数量,即为敏感Motif数量,分别记为tnsm1(SSG,c),tnsm2(SSG,c)和tnsm3(SSG,c)。

进一步的,步骤S2)中抽取调用函数关系的方法具体包括以下步骤:

步骤S201:抽取待分析的Smali文件中的下一条语句;

步骤S202:判断该语句是否是一条函数调用语句,如果是则跳至步骤S203,否则转入步骤S201;

步骤S203:抽取该函数调用语句的函数节点以及调用关系,并存储;

步骤S204:判断Smali文件是否还存在待分析的语句,如果有,转入步骤S201,否则转入步骤S205;

步骤S205:输出函数调用关系集合。

进一步的,步骤S3中子图集合SGS通过以下步骤获取:

步骤S301:取出集合SS中的节点元素s;

步骤S302:新建一个子图SG,添加节点元素s以及其附近距离为2的节点至SG;

步骤S303:添加相应的边至子图SG;

步骤S304:添加子图SG至子图集合SGS中;

步骤S305:判断集合SS是否遍历完,如果否,则转至步骤S301;否则,则转入步骤S306;

步骤S306:判断SGS中是否存在可以合并的子图对(SGi,SGj),合并条件为其中SNG(SGi)表示子图SGi中的敏感函数集合,如果存在则转至步骤S307,否则转至步骤S308;

步骤S307:对子图对进行合并并更新SGS,转至步骤S306;

步骤S308:输出子图集合SGS。

与现有技术相比,本发明的有益效果是:

本方法基于文本词汇权重检测TF-IDF提出了一种敏感系数计算方法TF-IDF-like,该方法使对敏感函数系数的计算不再仅仅局限于函数本身在恶意数据集中的使用分布,而是结合了该敏感函数在良性数据集中的使用分布,从而降低了部分敏感函数由于在恶意数据集和良性数据集中同时被大量调用而造成的敏感系数偏高引起的检测误报。

进一步的,本发明提取了敏感子图作为程序特征,降低程序分析的复杂度,并且能够找到恶意软件的相似性,避免了恶意程序载体对检测的干扰,可以在静态分析快速全面的基础上,提高了检测成功率。

进一步的,本发明通过对敏感子图抽取三种不同形式的结构特征作为特征向量,有效地降低了因为代码混淆等策略带来了漏报。

附图说明

图1为本发明基于敏感子图分析的安卓恶意重打包程序检测方法整体流程图。

图2为本发明Smali文件静态函数调用关系抽取流程图。

图3为本发明基于静态函数调用关系图构建敏感子图的算法流程图。

具体实施方式

下面结合附图和实施例详细说明本发明的实施方式。

请参阅图1所示,本发明一种基于敏感子图分析的安卓恶意重打包程序检测方法,包括以下步骤:

步骤S1:基于开源工具Pscout构建敏感函数集合SA={si|1≤i≤680},其中si表示一个敏感函数,然后获取待检测安卓程序的所属类别c,例如天气类。针对敏感函数si,统计其在恶意数据集M中出现的次数m(si)以及在良性数据集Bc中出现的次数b(si,c)。基于TF-IDF-like计算敏感函数si相对于类别为c的良性数据集Bc以及恶意数据集M的敏感系数scs(si,c),计算公式为其中p表示恶意数据集M的样本总数,q(c)表示良性数据集Bc的样本总数。

步骤S2:利用反编译技术对待检测安卓程序的安装文件(APK)进行反编译生成相应的Smali代码,进一步对Smali代码进行分析并抽取函数调用关系,从而构建成函数调用图SFCG(V,E),其中V={vi|1≤i≤n}表示程序中所有的函数节点集合,其中n表示所有的函数节点数量,而表示程序中所有的函数调用的集合。结合图2,其中调用函数关系抽取方法具体包括以下步骤:

步骤S201:抽取待分析的Smali文件中的下一条语句;

步骤S202:判断该语句是否是一条函数调用语句,如果是则跳至步骤S203,否则转入步骤S201;

步骤S203:抽取该函数调用语句的函数节点以及调用关系,并存储;

步骤S204:判断Smali文件是否还存在待分析的语句,如果有,转入步骤S201,否则转入步骤S205;

步骤S205:输出函数调用关系集合。

步骤S3:基于步骤S2)构建的SPCG(V,E),根据程序调用的敏感函数集合SS={sk|1≤k≤n|n=|V|}每一个节点元素s在SFCG中的拓扑结构位置,将SFCG划分成为若干个包含敏感函数节点的子图,该子图集合表示为SGS={SGj|1≤j≤m},其中m为子图个数。然后基于步骤S1)中计算所得的敏感系数计算每一个子图的敏感系数scg(SGj,c),选择敏感系数最大的子图作为该目标程序的敏感子图SSG。结合图3,其具体步骤如下:

步骤S301:取出集合SS中的节点元素s;

步骤S302:新建一个子图SG,添加节点元素s以及其附近距离为2的节点至SG;

步骤S303:添加相应的边至子图SG;

步骤S304:添加子图SG至子图集合SGS中;

步骤S305:判断集合SS是否遍历完,如果否,则转至步骤S301;否则,则转入步骤S306;

步骤S306:判断SGS中是否存在可以合并的子图对(SGi,SGj),合并条件为其中SNG(SGi)表示子图SGi中的敏感函数集合,如果存在则转至步骤S307,否则转至步骤S308;

步骤S307:对子图对进行合并并更新SGS,转至步骤S306;

步骤S308:输出子图集合SGS。

基于输出的子图集合SGS中的子图SGj,首先计算其子图敏感系数其中SNG(SGi)表示子图SGi中的敏感函数集合,scs(si,c)表示敏感函数si相对于类别c的敏感系数。在敏感子图集合SGS={SGj|1≤j≤M}中,选择子图敏感系数最大的子图作为其目标程序的敏感子图SSG,其计算公式为

步骤S4:基于步骤3)得到的敏感子图SSG,抽取其三种结构特征:敏感系数特征(scg(SSG,c))、敏感距离特征(tsd(SSG,c))以及三种敏感Motif数量特征(tnsm1(SSG,c),tnsm2(SSG,c),tnsm3(SSG,c))。其中敏感系数特征scg(SSG,c)计算公式为其中SNG(SGi)表示敏感子图SSG中的敏感函数集合,scs(si,c)表示敏感函数si相对于类别c的敏感系数。

敏感距离特征tsd(SSG,c)计算公式为:其中dis(si,sj)表示在SSG敏感子图中节点si到节点sj的最短距离。

三种不同敏感Motif数量计算方法为:首先使用开源工具gtrieScanner分解敏感子图SSG,得到三种正常Motif的数量,然后统计带有敏感函数节点的Motif结构数量,即为敏感Motif数量,分别记为tnsm1(SSG,c),tnsm2(SSG,c)和tnsm3(SSG,c)。其中普通Motif结构与相应的敏感Motif结构如表1所示,图中黑色节点为敏感API节点。

表1

步骤S5:基于步骤S4)针对每一个样本构建一个五维特征向量,利用随机森林算法对训练样本的特征空间进行评估并构建分类器,从而对待检测的重打包恶意软件进行快速、有效的检测。

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