基于签名与数据流模式挖掘的Android恶意软件检测系统及
方法技术领域
本发明涉及数据流模式挖掘领域,尤其涉及一种基于签名与数据流模式挖掘的
Android恶意软件检测系统及方法。
背景技术
Android是目前应用最广的智能手机操作系统,在2014 年,Android手机的销售量
就已经占到全球手机销售份额的81%,达到10亿部。另一方面,Android系统的开放性在受到
应用开发者青睐的同时也带来了许多的安全问题。当前,Android平台存在大量窃取用户隐
私的恶意软件,严重威胁到用户的使用安全。
主流的Android恶意软件检测方法有两种,动态分析方法以及静态分析方法。动态
分析方法搭建Android的运行环境,能够模拟出待测软件的真实行为特征,这种检测方法精
度高,但是由于需要软件动态运行,因此需要耗费资源。静态分析方法特点是无需待测软件
运行,它通过签名或者控制流、数据流来分析软件是否属于恶意软件,这种方法的不足之处
在于容易产生误报。
现有Android软件的静态分析技术可以分为三类: 基于权限的检测方案、基于传
统静态分析手段的检测方案以及基于机器学习的检测方案。
基于权限的检测方案,这些方案通过抽取Android应用软件中Manifest文件申请
的权限信息进行分析,通过事先建立的权限规则来判断应用是否为恶意应用。Kirin工具通
过预定义的一组规则识别危险的权限组合,但它只提供9条恶意应用族频繁使用的高危权
限规则作为检测标准,检测能力有限。另外一些主流文献采用了数据挖掘的方法挖掘恶意
应用中所申请权限之间的关系,以此作为规则,检测待测应用。但是在实际开发中,开发者
往往会申请过多的权限,以减轻开发和维护的难度,这种普遍存在的“滥权”问题,容易造成
基于权限的检测方案产生误报,即应用虽然申请了使用某系统资源的权限,但是并没有在
代码中执行,而基于权限的检测如果发现应用申请的权限与安全规则一致,则可能导致正
常软件被误报。综上,基于权限的检测方案无法解决“滥权”现象带来的误报问题。
基于传统静态分析手段的检测方案主要有签名检测以及数据流分析技术。经典的
签名检测会对整个恶意程序或部分程序代码进行MD5运算或者SHA运算,将运算后的特征值
作为该文件的签名。如果发现待测软件签名与预先收集的恶意软件签名相匹配就判定为恶
意软件。这种方法的扫描速度快,而且精准度高,缺点是只能查杀特定的恶意软件,该方法
对变种混淆的恶意软件无效。针对这种问题,Zhiyuan Wang等人提出了一种多级签名系统,
用来收集、检测Android恶意软件,系统首先对Android的API进行编号,然后,扫描待测apk
文件中的系统API,用编号表示这些API,之后,生成MD5签名,再逐级产生方法签名、类签名、
apk签名,利用该方法能够有效的检测出一些重打包、代码混淆的恶意软件。但是这种方法
并不是数据流层面的分析,不能够抵御使用基于API的代码混淆。Zhemin Yang、Zhibo
Zhao、C. Fritz、W Klieber等人各自提出了基于数据流的分析工具,虽然数据流分析能够
覆盖整个应用软件代码,分析的准确度比较高,但是一方面这种全代码分析比较耗时,另一
方面,数据流分析的结果并不能给出软件是否是恶意软件,往往还需要人工判断,确认数据
流是否是恶意数据流。综上,主流的签名技术只是一种将软件特征唯一表示的技术,不能对
待测软件进行深度分析,因此检测结果不可避免的受到代码混淆等恶意软件技术的干扰,
数据流分析技术的缺陷在于全代码分析造成的耗时问题以及需要人工进行最终结果确定。
对于已知的恶意软件,数据流分析还存在重复检测的问题。
基于机器学习的检测方案,通过对恶意软件的静态特征进行学习,比如学习权限
特征、API特征等,使机器学习算法得出分类模型,然后进行恶意软件检测。这种方案的缺点
在于对于分类特征的要求比较高,特征的有效直接决定了分类的精度。大多数机器学习方
法仍然使用权限作为特征信息,因此,他们也不能解决“滥权”现象带来的误报。
发明内容
本发明所要解决的技术问题是针对背景技术中所涉及到的缺陷,提供一种基于签
名与数据流模式挖掘的Android恶意软件检测系统及方法。
本发明为解决上述技术问题采用以下技术方案:
基于签名与数据流模式挖掘的Android恶意软件检测系统,包含签名分析组件以及数
据流分析组件;
所述签名分析组件包含签名生成模块、恶意软件签名数据库和签名匹配模块;
所述签名生成模块用于生成Android应用软件的签名;
所述恶意软件签名数据库用于储存所有预设的恶意Android应用软件的签名;
所述签名匹配模块用于将输入的Android应用软件的签名和恶意软件签名数据库中存
储的签名进行匹配;
所述数据流分析组件包含数据流分析模块、数据流模式挖掘模块、数据流模式匹配模
块和数据流模式规则库;
所述数据流分析模块用于分析输入的Android应用软件是否存在数据流模式,如果存
在,提取出输入的Android应用软件中的数据流模式;
所述数据流模式挖掘模块用于将所有预设的恶意Android应用软件中置信度大于预设
的置信度阈值且支持度大于预先设定的支持度阈值的数据流模式筛选出来;
所述数据流模式规则库用于存储经数据流模式挖掘模块筛选出来的数据流模式;
所述数据流模式匹配模块用于将输入的Android应用软件的数据流模式与数据流模式
规则库中的数据流模式进行匹配。
本发明还公开了一种基于签名与数据流模式挖掘的Android恶意软件检测系统的
检测方法,包含以下步骤:
步骤1),对所有预设的恶意Android应用软件进行签名训练与数据流模式训练,生成恶
意软件签名数据库与数据流模式规则库;
步骤2),将待测Android应用软件输入签名分析组件中的签名生成模块,生成待测
Android应用软件的签名,并将其输入至签名匹配模块;
步骤3),签名匹配模块将待测Android应用软件的签名与恶意软件签名数据库中的签
名进行匹配,若恶意签名数据库中存在与待测Android应用软件的签名一致的签名,则判定
该待测Android应用软件的签名为恶意软件,结束检测;否则,执行步骤4);
步骤4),将待测Android应用软件送至数据流分析组件中的数据流分析模块,数据流分
析模块分析待测Android应用软件是否存在数据流模式,若存在数据流模式,提取出待测
Android应用软件的数据流模式,执行步骤5);若不存在数据流模式则判定为安全软件,结
束检测;
步骤5),将待测Android应用软件的数据流模式输入至数据流匹配模块,数据流匹配模
块将待测Android应用软件的数据流模式与数据流模式规则库中的数据流模式进行匹配,
若数据流模式规则库中存在与待测Android应用软件的数据流模式一致的数据流模式,则
判定待测Android应用软件为恶意应用,结束检测;否则,判定待测Android应用软件为风险
应用,结束检测。
所述步骤1)的具体步骤如下:
步骤1.1),依次将所有预设的恶意Android应用软件输入至签名分析组件;
步骤1.2),签名分析组件使用签名生成模块对每一个输入的恶意Android应用软件生
成MD5签名,并将其签名与软件名存入恶意软件签名数据库;
步骤1.3),依次将所有预设的恶意Android应用软件输入至数据流分析组件;
步骤1.4),数据流分析组件使用数据流分析模块对输入的每一个恶意Android应用软
件进行数据流分析,得出各个恶意Android应用软件的数据流模式,并将其依次输至数据流
模式挖掘模块;
步骤1.5),数据流模式挖掘模块将各个恶意Android应用软件的数据流模式中置信度
大于预设的置信度阈值且支持度大于预先设定的支持度阈值的数据流模式筛选出来,并将
其存入数据流模式规则库中。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
(1)本发明通过使用签名技术与数据流模式挖掘技术,不使用应用软件的权限信息,避
免了“滥权”现象产生的误报问题;
(2)本发明通过结合签名技术以及数据流模式挖掘技术,弥补了签名技术存在的,难以
对代码混淆类恶意软件进行准确分析的缺点,同时,签名分析组件的使用,也改进了主流数
据流分析方案存在的重复检测问题,提高了检测速度;
(3)本发明通过使用数据流模式挖掘,改进了普通数据流分析方案需要人工确认的缺
点,自动化程度高。
附图说明
图1是基于签名与数据流模式挖掘的Android恶意软件检测系统架构图;
图2是本发明系统检测流程。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
本文公开了一种基于签名与数据流模式挖掘的Android恶意软件检测系统,是一种静
态分析检测系统,它无需待测软件动态运行。本系统包含2个组件:签名分析组件与数据流
分析组件。通过签名分析组件优化系统对已知恶意软件排查的速度,通过数据流分析组件
分析可获得恶意软件数据流的频繁模式,以此作为规则指导未知软件的检测。下面分别对2
个组件进行介绍。
1)签名分析组件
签名分析组件包含签名生成模块、恶意软件签名数据库和签名匹配模块;其中,签名生
成模块用于生成Android应用软件的签名;恶意软件签名数据库用于储存所有预设的恶意
Android应用软件的签名;签名匹配模块用于将输入的Android应用软件的签名和恶意软件
签名数据库中存储的签名进行匹配。
签名分析组件的核心是签名生成模块,用来生成Android应用软件的签名值,签名
算法使用MD5签名算法,对apk整体进行签名。签名生成模块通过签名运算,能够保证每一款
签名的应用软件都能得到不同的签名值。因此,如果未知软件签名与某一恶意软件签名一
致,则说明未知软件就是该款恶意软件。
签名分析组件的功能是:对一定量的恶意软件生成签名值,存入数据库中形成恶
意软件签名数据库,在检测时,对未知软件生成签名,并将其在恶意软件签名库中进行匹
配,如果存在匹配,即未知软件签名与某恶意软件签名一致,则认定未知软件为恶意软件,
反之,若未知软件签名与库中任意签名都不一致,则将未知软件交由数据流分析组件中的
数据流分析模块进行分析。
2)数据流分析组件
数据流分析组件包含数据流分析模块、数据流模式挖掘模块、数据流模式匹配模块和
数据流模式规则库;其中,数据流分析模块用于分析输入的Android应用软件是否存在数据
流模式,如果存在,提取出输入的Android应用软件中的数据流模式;数据流模式挖掘模块
用于将所有预设的恶意Android应用软件中置信度大于预设的置信度阈值且支持度大于预
先设定的支持度阈值的数据流模式筛选出来;数据流模式规则库用于存储经数据流模式挖
掘模块筛选出来的数据流模式;数据流模式匹配模块用于将输入的Android应用软件的数
据流模式与数据流模式规则库中的数据流模式进行匹配。
数据流分析组件是系统的核心组件,该组件功能是:完成对恶意软件的数据流分
析、挖掘恶意软件的频繁数据流模式,将这些频繁数据流模式作为规则存入数据库,构成数
据流模式规则库。之后,该组件还要对签名匹配失败的未知软件进行数据流分析,将其数据
流模式(若不存在,则认定其为安全软件)在数据流规则库中进行匹配,若发现相同的数据
流模式则认定为恶意软件,反之,认定为风险软件,存在隐私泄露风险。数据流分析组件包
含数据流分析模块、数据流模式挖掘模块以及数据流模式规则库。
数据流分析模块完成Android应用软件的反编译、数据流图构建以及污点分析功
能。Android应用软件安装包的格式是apk文件,它实际上是一个压缩文件,数据流分析模块
要进行数据流分析首先要将apk文件进行反编译,解析其中的各种配置文件以及代码文件,
将源代码恢复或用中间码(IR)的形式进行表示。之后,标记程序代码中的各种敏感数据(比
如联系人、手机短信信息、邮件等),构建程序数据流图,然后根据此图,进行污点分析,追踪
被标记的敏感数据。如果被分析软件存在泄露隐私的数据流,则该模块会得出形如
{source, sink},这样的二元集合。每一个二元集合都是一条潜在的隐私泄露路径。source
和sink均是系统中的API函数,其中source是污点数据进入分析过程的入口函数,一般是
Android系统用来读取敏感数据的API函数比如读取短信、读取邮件等。sink是污点数据离
开分析过程的出口函数,一般是Android系统中发送短信、打开URL等发送数据的API函数。
Android应用软件的隐私泄露来源于程序内部,因为存在{source, sink}这样的读取、发送
路径才会使敏感数据泄露成为可能。
通过对一定量的恶意软件进行数据流分析,可以得到每款恶意软件泄露隐私的路
径,即许多{source, sink}这样的数据流模式。数据流模式挖掘模块针对大量的恶意
{source, sink}数据流模式进行关联挖掘,目的是找出恶意软件频繁使用的泄露隐私的路
径,即出现频繁的某几种{source, sink}集合,将这些频繁数据流模式当作判断恶意隐私
泄露软件的规则。
为了进行关联挖掘首先需要定义2个阈值,一个是置信度阈值p(Confidence)和支
持度阈值p(Support),这两个阈值用于筛选数据流模式,如果一条数据流模式的置信度p
(Confidence)和支持度p(Support)均高于给定阈值,那么就将这条数据流模式当作规则,
加入到数据流模式规则库中。
p(Confidence)和p(Support)的计算公式如下,其中p(source, sink)是该条数据
流模式{source, sink}在全体数据流模式中出现的概率。p(sink | source)是以source函
数作为入口函数的所有数据流模式中,出现sink函数作为出口函数的概率。count(source,
sink)是该{source, sink}数据流模式在全体模式集合中出现的次数,p(source)是以该
source函数作为入口函数的数据流模式在全体数据流模式集合中出现的概率。T代表通过
分析一定量恶意软件所获得的全体{source, sink}数据流模式。
(1) p(Support)= p(source, sink) = count(source, sink)/T
(2) p(Confidence)= p(sink | source) = p(source, sink)/p(source)
在计算完恶意软件每种{source, sink}出现的置信度与支持度之后,凡是两个值都大
于预先给定阈值的数据流模式,都要被加入到数据流模式规则库中。完成数据流模式规则
库建立后,当未知软件在签名组件中未能匹配的情况下,用数据流分析模块分析其数据流
模式,然后与数据流规则库中的规则进行匹配,若存在一致的{source, sink}模式,则说明
待测软件出现了恶意软件中频繁出现的隐私泄露路径,就可以认定该未知软件为恶意隐私
泄露软件,反之,说明该软件有泄露隐私风险,但并不是恶意软件。当然,如果未知软件经过
数据流分析模块分析后,不存在泄露路径,那么就直接认定该软件为安全软件。
本发明的系统架构图以及使用步骤如图1所示,系统首先选取一定量的恶意软件,
通过签名器进行签名运算得出恶意软件签名数据库,再让恶意软件通过数据流分析模块进
行数据流分析,得出这些恶意软件的数据流模式,然后使用数据流模式挖掘模块进行挖掘,
挖掘出恶意软件频繁使用的数据流模式,将它们存入数据流模式规则库中。在得到上述两
类规则库后就可以进行未知软件的检测了。
本发明的检测具体流程如图2,包含以下步骤:
步骤1),对所有预设的恶意Android应用软件进行签名训练与数据流模式训练,生成恶
意软件签名数据库与数据流模式规则库;
步骤2),将待测Android应用软件输入签名分析组件中的签名生成模块,生成待测
Android应用软件的签名,并将其输入至签名匹配模块;
步骤3),签名匹配模块将待测Android应用软件的签名与恶意软件签名数据库中的签
名进行匹配,若恶意签名数据库中存在与待测Android应用软件的签名一致的签名,则判定
该待测Android应用软件的签名为恶意软件,结束检测;否则,执行步骤4);
步骤4),将待测Android应用软件送至数据流分析组件中的数据流分析模块,数据流分
析模块分析待测Android应用软件是否存在数据流模式,若存在数据流模式,提取出待测
Android应用软件的数据流模式,执行步骤5);若不存在数据流模式则判定为安全软件,结
束检测;
步骤5),将待测Android应用软件的数据流模式输入至数据流匹配模块,数据流匹配模
块将待测Android应用软件的数据流模式与数据流模式规则库中的数据流模式进行匹配,
若数据流模式规则库中存在与待测Android应用软件的数据流模式一致的数据流模式,则
判定待测Android应用软件为恶意应用,结束检测;否则,判定待测Android应用软件为风险
应用,结束检测。
所述步骤1)的具体步骤如下:
步骤1.1),依次将所有预设的恶意Android应用软件输入至签名分析组件;
步骤1.2),签名分析组件使用签名生成模块对每一个输入的恶意Android应用软件生
成MD5签名,并将其签名与软件名存入恶意软件签名数据库;
步骤1.3),依次将所有预设的恶意Android应用软件输入至数据流分析组件;
步骤1.4),数据流分析组件使用数据流分析模块对输入的每一个恶意Android应用软
件进行数据流分析,得出各个恶意Android应用软件的数据流模式,并将其依次输至数据流
模式挖掘模块;
步骤1.5),数据流模式挖掘模块将各个恶意Android应用软件的数据流模式中置信度
大于预设的置信度阈值且支持度大于预先设定的支持度阈值的数据流模式筛选出来,并将
其存入数据流模式规则库中。。
本文的系统克服了传统数据流检测需要进行人工确认的劣势,提高了检测效率,
相较于传统基于权限的恶意软件检测方法,本系统避免了“滥权”问题带来的误报问题。同
时,该系统通过签名技术,使得检测重复恶意软件的速度获得极大提升。
本技术领域技术人员可以理解的是,除非另外定义,这里使用的所有术语(包括技
术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还
应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中
的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步
详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限制本发
明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明
的保护范围之内。