CN110516446A - 一种恶意软件家族归属判定方法、系统及存储介质 - Google Patents
一种恶意软件家族归属判定方法、系统及存储介质 Download PDFInfo
- Publication number
- CN110516446A CN110516446A CN201910787920.5A CN201910787920A CN110516446A CN 110516446 A CN110516446 A CN 110516446A CN 201910787920 A CN201910787920 A CN 201910787920A CN 110516446 A CN110516446 A CN 110516446A
- Authority
- CN
- China
- Prior art keywords
- malware
- family
- isomorphism
- api
- subgraph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/561—Virus type analysis
Abstract
本发明公开了一种恶意软件家族归属判定方法、系统及存储介质,所述方法包括步骤:获取包含恶意软件的安卓安装包;从所述安卓安装包中获取API函数节点信息;针对恶意软件家族使用的每个敏感API,结合API函数节点信息分别构建函数调用图;根据函数调用图计算函数调用图间存在的最大同构子图;对最大同构子图进行同构分析,得到恶意软件家族特征;利用恶意软件家族特征对恶意软件进行家族归属判定。本发明不仅能够有效减小了恶意软件家族函数调用图特征结构的规模,而且在判定恶意软件归属上具有较高的准确率。
Description
技术领域
本发明涉及一种恶意软件家族归属判定方法、系统及存储介质,属于计算机信息处理技术领域。
背景技术
随着Android设备市场占有率的增长,针对Android系统的恶意软件数量也呈逐年上涨趋势,Android系统成为了移动恶意软件泛滥滋生的平台,对人们的隐私及财产安全造成了巨大威胁。
面对数量庞大的恶意软件,对每一例样本进行人工分析是不切实际的。幸运的是,由于在Android恶意软件开发中广泛运用了代码复用技术,许多恶意软件是已知恶意软件家族样本的变种,因此可运用自动化分析技术,通过分析一款待检测恶意软件与已知恶意软件家族样本间的相似度可以判定该恶意软件是否为某一已知恶意软件家族样本的变种。
目前静态检测技术已广泛应用于Android恶意软件检测,但仍然存在着误判率较高、计算复杂度偏大等问题,如何有效提高静态检测技术的准确率是有待解决的问题之一。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种恶意软件家族归属判定方法、系统及存储介质,能够准确地对恶意软件进行家族归属分析。
为达到上述目的,本发明是采用下述技术方案实现的:
一种恶意软件家族归属判定方法,所述方法包括如下步骤:
获取包含恶意软件的安卓安装包;
从所述安卓安装包中获取API函数节点信息;
针对恶意软件家族使用的每个敏感API,结合API函数节点信息分别构建函数调用图;
根据函数调用图计算函数调用图间存在的最大同构子图;
将某一恶意软件家族样本基于同一敏感API得到的函数调用图作为训练集,对最大同构子图进行同构分析,得到恶意软件家族特征;
利用恶意软件家族特征对恶意软件进行家族归属判定。
结合第一方面,进一步的,从所述安卓安装包中获取API函数节点信息的方法包括如下步骤:
对安卓安装包进行反编译,得到包含dalvik字节码的smali文件;
对smali文件中的“incoke-xxxx”语句进行分析,得到安卓安装包中所包含的API函数节点;
将父类中的API函数节点替换子类中继承的API函数节点,将API函数节点间的间接调用关系转换为直接调用关系,获取API调用序列。
结合第一方面,进一步的,获取API函数节点信息的方法还包括对涉及第三方的软件开发工具包的API函数节点进行过滤。
结合第一方面,进一步的,所述函数调用图采用下述三元组表示:
Gi=(Si,Vi,Ei)
其中:Gi表示基于第i个敏感API构建的函数调用图;Si表示第i个敏感API;Vi表示第i个敏感API调用序列上所有函数节点的集合;Ei表示第i个敏感API函数节点间的调用关系;
结合第一方面,进一步的,根据函数调用图计算函数调用图间存在的最大同构子图的方法包括:
将多张基于不同敏感API的函数调用图以敏感API节点为图匹配的约束条件,利用子图同构算法得到最大同构子图。
结合第一方面,进一步的,利用子图同构算法得到最大同构子图的方法包括:
对于“图-图”同构及“子图-图”同构,采用VF2子图同构算法计算得到最大同构子图;
对于“子图-子图”同构,采用SimRank算法计算函数调用图间各节点关于敏感API节点的相似度,根据相似度构建最大同构子图。
结合第一方面,进一步的,利用恶意软件家族特征对恶意软件进行家族归属判定的方法包括:
将待判定恶意软件所使用的敏感API集与各个恶意软件家族使用的敏感API集进行比较,获取可能的恶意软件家族;
将恶意软件基于敏感API的函数调用图依次与可能的恶意软件家族的家族特征进行子图同构分析:
若该恶意软件基于某一敏感API的函数调用图恰与恶意家族基于相同敏感API的特征图满足“子图-图”同构,则采用公式(1)计算得到基于该敏感API恶意软件函数调用图与恶意软件家族特征图间的相似度:
其中:Nfeature表示基于该敏感API恶意软件家族特征图包含的节点数,Nsample表示基于该敏感API恶意软件函数调用图包含的节点数;
若Rfunction大于设定阈值γ,则进一步采用公式(2)计算恶意软件家族全部特征图与恶意软件的函数调用图的总体相似度:
其中:ΣNfeature_i表示所有与恶意软件基于敏感API函数调用图间满足“子图-图”同构的恶意软件特征图所包含的节点总数,ΣNsample_i表示待测恶意软件基于敏感API函数调用图包含的节点总数;
若总体相似度Rsimilarity大于某恶意软件家族预设的判定阈值α,则判定恶意软件归属为该恶意软件家族。
结合第一方面,进一步的,利用恶意软件家族特征对恶意软件进行家族归属判定的方法还包括:
当Rfunction和Rsimilarity均不大于判定阈值α时,采用公式(3)计算该未知恶意软件与所有已知恶意软件家族特征匹配的节点总数占该样本节点总数的比例Rsample_total:
式中:Nsample-i表示基于该敏感API恶意软件函数调用图包含的节点数;Nfunction-i表示已知恶意软件基于该敏感API函数调用图包含的节点总数;若Rsample_total大于预设阈值β,则表明该恶意软件为未知恶意软件家族样本,且该恶意软件家族与已知的某些恶意软件家族可能具有家族演化关系。
第二方面,本发明提供了一种恶意软件家族归属判定系统,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行前述任一项所述方法的步骤。
第三方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一项所述方法的步骤。
与现有技术相比,本发明实施例所提供的一种恶意软件家族归属判定方法、系统及存储介质所达到的有益效果包括:通过基于敏感API函数调用序列同构的方法对Android恶意软件家族特征进行分析,利用得到的恶意软件家族特征实现了对恶意软件的分类及检测,通过对比待检测恶意软件特征与已知恶意软件家族特征,可以确定该未知恶意软件的家族归属,判断其是否为新的恶意软件家族,不仅有效减小了恶意软件家族函数调用图特征结构的规模,而且在判定恶意软件归属上具有较高的准确率。
附图说明
图1是根据本发明实施例提供的一种恶意软件家族归属判定方法的流程图;
图2是Geinimi恶意软件家族不同样本与GoldDream恶意软件家族样本基于该敏感API的函数调用图;
图3是Geinimi恶意软件家族样本基于Ljava/net/HttpURLConnection;→connect敏感API的函数调用图;
图4是Geinimi恶意软件家族样本基于Landroid/location/LocationManager→getLastKnownLocation敏感API的函数调用图;
图5是Geinimi恶意软件家族样本基于Landroid/content/ContentResolver→delete敏感API的函数调用图;
图6是DroidKungFu1、DroidKungFu2、DroidKungFu3基于Ljavax/crypto/Cipher;→doFinal敏感API的家族特征图;
图7是Android恶意软件家族敏感API使用频率统计图。
具体实施方式
本发明实施例基于已知的Android恶意软件家族,采用静态检测技术寻找恶意软件家族样本中基于敏感API调用序列同构的最大同构子图,该同构子图可用来描述Android恶意软件家族的家族特征。该方法基于以下两点:(1)恶意软件执行敏感操作大多是通过调用SDK中提供的敏感API实现;(2)恶意软件开发中广泛采用了代码复用技术,因此恶意软件家族样本间存在相似的代码结构。由于子图同构问题被证明是一个NP问题,因此,本发明实施例针对恶意软件家族使用的每一个敏感API分别构建基于该敏感API的函数调用图,有效减小了函数调用图的规模。进而利用VF2子图同构算法计算同一恶意软件家族不同样本基于共同敏感API函数调用图间的最大同构子图。针对VF2算法无法处理的“子图-子图”同构问题,引入SimRank算法,通过计算函数调用图间各节点关于敏感API节点的相似度,得到恶意软件家族基于敏感API调用序列同构的家族特征图。利用恶意软件家族特征图可以较准确的对待检测恶意软件进行家族归属分析,并判定该恶意软件的恶意性。
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
如图1所示,根据本发明实施例提供的一种恶意软件家族归属判定方法的流程图,主要包括:构建函数节点集部分、构建基于敏感API的函数调用图部分以及构建基于敏感API调用序列同构的恶意软件家族特征部分。
步骤一:构建函数节点集:
在构建函数节点集部分中,通过静态分析反编译APK得到的smali文件,可以得到APK中使用的各类函数节点(包括用户显式定义的函数节点及SDK提供的API节点)并构建函数节点间的调用序列。
在构建基于敏感API的函数调用图部分中,首先对每一个恶意软件家族内部样本使用的敏感API进行统计,将恶意软件家族样本使用频率较高的多个敏感API构成的集合作为该恶意软件家族使用的敏感API集,该敏感API集初步建立了恶意软件家族基于敏感API的家族特征。然而仅利用敏感API的统计特征不足以对恶意软件家族进行唯一的准确划分,因此还需要针对恶意软件家族敏感API集中的每一个敏感API,分别构建基于敏感API的函数调用图。
在构建基于敏感API调用序列同构的恶意软件家族特征部分中,将某一恶意软件家族样本基于同一敏感API得到的函数调用图作为训练集,利用VF2子图同构算法对函数调用图间存在的最大同构子图进行分析(包括“图-图”同构分析及“图-子图”同构分析),得到与训练集中函数调用图子图同构的恶意软件家族特征图。当函数调用图间满足“子图-子图”同构时,VF2算法不再适用,因此本发明实施例引入SimRank算法对该情形下函数调用图间各函数节点与敏感API节点的关联程度进行分析,利用分析结果可以得到“子图-子图”同构情况下函数调用图间的最大同构子图。经过“图-图”同构、“图-子图”同构及“子图-子图”同构分析,得到的恶意软件家族样本基于共同敏感API函数调用图间的最大同构子图就是恶意软件家族基于该敏感API的家族特征图,恶意软件家族敏感API集中每一个敏感API分别对应着一个基于该敏感API的家族特征图,所有这些特征图的集合构成了恶意软件家族基于敏感API调用序列同构的家族特征。
构建基于敏感API调用序列同构的恶意软件家族特征首先需要对Android恶意软件进行逆向分析,反编译APK并对反编译得到的dalvik字节码进行分析得到各个函数节点以及各个函数节点间的调用序列。
(1)反编译APK:为了分析APK文件中的函数节点,需要对APK进行反编译。Baksmali、Apktool、dex2jar等反编译工具均能较好的对APK文件进行反编译,得到包含dalvik字节码的smali文件。由于Baksmali较Apktool及dex2jar具有更新快、异常调试信息详尽等优点,因此本框架采用Baksmali对APK文件进行反编译。
(2)解析smali文件:APK由Java语言编写,每一个smali文件分别对应着一个Java类。由于APK中不仅包含用户显式定义的函数,还包含SDK提供的API,这些API不以显式定义的方式存在于smali文件中,为了得到APK中全部函数节点,需要对文件的“invoke-xxxx”语句进行分析,得到APK中包含的API节点,“xxxx”指的是以invoke-开头的多个参数。
(3)构建函数调用序列:Java类与类间广泛存在的继承关系使函数节点间存在着间接调用关系。为了解决函数节点间间接调用的问题,本发明实施例将父类中的函数节点替换子类中继承的函数节点,这样函数节点间的间接调用关系就转化为了直接调用关系,实现了对任意函数节点间调用关系的准确分析。
(4)过滤第三方广告库与插件库:许多Android应用不仅包含Google提供的Android SDK,还包含许多用于植入广告及功能扩展的第三方SDK,这些由第三方厂商提供的SDK在实现功能时往往调用了敏感API,这不仅增加了构建基于敏感API函数调用图的复杂度,也会对分析基于敏感API的家族特征图造成干扰,因此需要对涉及第三方SDK的函数节点进行过滤。
步骤二:构建基于敏感API的函数调用图:
函数调用图可以较好地反映Android应用代码结构特征,不经过任何处理的函数调用图往往规模较大,不利于使用子图同构算法求得函数调用图间的最大同构子图,因此为了减小函数调用图的规模,本发明实施例仅构建基于敏感API的函数调用图。
(1)构建敏感API集
对恶意软件的分析得到Android恶意软件常用的敏感API集合,该集合不仅包括Android开发文档定义的敏感API,还包括其他一些敏感API,见表1。
表1其他的敏感API
由于Android应用往往通过反射的方式调用隐藏API,而Ljava/lang/reflect/Method;→invoke函数已被标记为敏感API,因此本发明实施例使用的敏感API集中不包含隐藏API。
(2)构建基于敏感API的函数调用图
Android恶意软件通过调用敏感API实现敏感操作,因此基于敏感API的函数调用图可以反映出恶意软件的主要结构特征。一款恶意软件往往涉及多个敏感API,每一个基于敏感API的调用序列都反映了该恶意软件的一个特征,本发明实施例对恶意软件使用的每一个敏感API分别构建函数调用图。
基于敏感API的函数调用图使用三元组表示Gi=(Si,Vi,Ei),Si表示某一敏感API,Vi表示某一敏感API调用序列上所有函数节点的集合,Ei表示函数节点间的调用关系。
图2(a)(b)(c)针对Landroid/telephony/TelephonyManager→getSimSerialNumber敏感API,通过对比Geinimi恶意软件家族不同样本与GoldDream恶意软件家族样本基于该敏感API的函数调用图,说明不同恶意软件家族样本基于共同敏感API的函数调用图间可能存在相似图结构。图2(d)(e)针对Landroid/telephony/SmsManager→sendTextMessage敏感API,通过对比Geinimi恶意软件家族不同样本基于该敏感API的函数调用图,说明恶意软件家族不同样本基于共同敏感API的函数调用图间存在相似图结构(图2(a)(b)(d)(e)为Geinimi恶意软件家族样本,图2(c)为GoldDream恶意软件家族样本)。
不同恶意软件家族样本基于共同敏感API函数调用图间可能存在相似图结构的情况表明仅通过某一两个敏感API的函数调用图难以反映恶意软件的全部特征。恶意软件包含的每一个敏感API都对应着一个基于该敏感API的函数调用图,所有这些函数调用图构成的集合才能完全刻画该恶意软件的结构特征,该结构可表示为G=(G1,G2,.....,Gn),其中n表示该恶意软件包含的敏感API个数,Gi表示基于某个敏感API构建的函数调用图,G代表了该恶意软件的结构特征。
同一恶意软件家族不同样本基于共同敏感API的函数调用图间存在相似图结构的情况表明通过分析恶意软件家族所有样本基于某一敏感API的函数调用图总可以得到一个最大相似图结构,恶意软件家族中所有这些基于敏感API最大相似图结构组成的集合反映了该恶意软件家族的全部特征,而如何得到这些最大相似图结构正是本发明实施例需要进一步讨论的问题。
步骤三:构建基于敏感API调用序列同构的恶意软件家族特征:
同一恶意软件家族样本基于某一敏感API的函数调用图之间总是存在相似的图结构,该相似图结构就是函数调用图间的最大同构子图,反映了恶意软件基于该敏感API的典型特征,可由图相似性度量算法求得。恶意软件家族敏感API集中的每个敏感API都对应着一个基于该敏感API的最大同构子图,所有这些同构子图的集合刻画了恶意软件家族基于敏感API调用序列同构的家族特征。
S301:构建基于敏感API最大同构子图
图同构可以用来度量图的相似性。
定义1基于敏感API的图同构:设图g1与g2是图同构的,即图g1与g2的顶点之间存在着保持顶点相邻状态的一一对应关系。若图g1=(s1,v1,e1)、图g2=(s2,v2,e2)(其中是s1、s2表示敏感API节点),存在一个双射函数f:{v1→v2}{s1→s2},使得v1中的任意两个相邻顶点x、y,当且仅当f(x)与f(y)在g2中相邻且s1与s2表示同一敏感API时,称图g1与g2满足基于敏感API的图同构。
判定两图同构一般无需人工干预,因此可以自动化实现,本发明实施例利用图同构算法计算函数调用图间的最大同构子图,该同构子图反映了函数调用图间的相似程度。
由于计算最大同构子图的复杂度与图中顶点数量呈指数增长关系,因此,为了降低计算复杂度以使得图同构算法能在有效时间内计算得到函数调用图间的最大同构子图,本发明实施例首先通过将恶意软件的整体函数调用图拆分为多张基于不同敏感API的函数调用图,缩小了每个图结构的规模,接着以敏感API节点为图匹配约束条件,利用子图同构算法得到基于敏感API函数调用图间的最大同构子图。
在已有的子图同构算法中,VF2算法是一种基于树搜索及回溯方法的精确图匹配算法,由于其在效率及准确性上都有较好的表现,因此本发明实施例采用VF2算法计算函数调用图间的最大同构子图。在计算图同构的过程中,主要存在“图-图”同构、“子图-图”同构以及“子图-子图”同构三种情况。
定义2基于敏感API的“图-图”同构:若有图g1=(s1,v1,e1)、图g2=(s2,v2,e2),图g1与图g2满足基于敏感API的“图-图”同构当且仅当g1与g2满足基于敏感API的图同构。
Geinimi恶意软件家族样本(MD5:1C19E136C3C9BF7A9A7940125C4EA638、MD5:3D788B3A1648A49F506D5C7CB44CA848)基于Ljava/net/HttpURLConnection;→connect敏感API的函数调用图如图3(a)(b)所示,该函数调用图满足基于敏感API的“图-图”同构条件。
定义3基于敏感API的“子图-图”同构:若有图g1=(s1,v1,e1)、图g2=(s2,v2,e2)、图g1’=(s1,v1’,e1’)(图g1’是图g1的子图,其中),图g1与图g2满足基于敏感API的“子图-图”同构当且仅当存在g1的子图g1’与g2满足基于敏感API的图同构。基于敏感API的“图-图”同构是基于敏感API的“子图-图”同构的一种特殊情况。
Geinimi恶意软件家族样本(MD5:1C19E136C3C9BF7A9A7940125C4EA638、MD5:1CA92E497E988B654BBF3B4C42FD3131)基于Landroid/location/LocationManager→getLastKnownLocation敏感API的函数调用图如图4(a)(b)所示,该函数调用图满足基于敏感API的“子图-图”同构条件。
定义4基于敏感API的“子图-子图”同构:若有图g1=(s1,v1,e1)、图g2=(s2,v2,e2)、图g1’=(s1,v1’,e1’)、图g2’=(s2,v2’,e2’)(图g1’是图g1的子图,其中图g2’是图g2的子图,其中),图g1与图g2满足基于敏感API的“子图-子图”同构当且仅当存在g1的子图g1’与g2的子图g2’满足基于敏感API的图同构,且该同构子图g1’(或图g2’)的节点数与图g1、图g2节点数的比值超过一定阈值α,否则认为该“子图-子图”同构无意义。
VF2算法是“子图-图”同构算法,因此针对“图-图”同构及“子图-图”同构的情况,VF2算法都能快速准确的计算得到基于敏感API函数调用图间的最大同构子图。而针对“子图-子图”同构的情况,VF2算法不再适用。判断“子图-子图”同构涉及对两张图所有节点的遍历与回溯,暂时还没有较好的算法可以计算得到“子图-子图”同构情况下的最大同构子图。
SimRank是一种基于图拓扑结构信息来衡量任意两个节点相似程度的算法,该算法的核心思想为:如果两个节点被相似的节点所调用(两个节点具有相似的入邻边结构),则这两个节点相似,即如果指向结点a和指向结点b的结点相似,那么a和b也认为是相似的。结合SimRank算法的思想以及基于同一敏感API的函数调用图具有共同敏感API节点的特征,本发明实施例认为如果两个节点调用了相似节点,则这两个节点相似,特别的,如果两个节点调用了同一敏感API,那么这两个节点相似。于是利用SimRank算法可计算基于同一敏感API不同函数调用图间函数节点的相似度。
Geinimi恶意软件家族样本(MD5:0DA3484A20C85C0489FEA8F53316B53C、MD5:1C19E136C3C9BF7A9A7940125C4EA638)基于Landroid/content/ContentResolver→delete敏感API的函数调用图如图5(a)(b)所示,显然该函数调用图满足“子图-子图”同构,然而VF2算法无法计算出该函数调用图间的最大同构子图,因此需使用SimRank算法进行分析。由SimRank算法可知图中节点node1_2与node2_1相似、节点node1_1与node2_2及node2_3相似,因此该函数调用图间满足基于敏感API“子图-子图”同构的最大同构子图为图示矩形框部分。
S302:构建恶意软件家族特征
同一恶意软件家族不同样本基于相同敏感API的函数调用图具有最大同构子图C,该同构子图反映了所有恶意软件基于该敏感API函数调用图包含的典型结构,因此可用来描述恶意软件家族的特征。恶意软件家族敏感API集中包含的每一个敏感API都对应着一个基于该敏感API的最大同构子图,所有这些同构子图构成的集合刻画了一个恶意软件家族的全部特征。
定义5恶意软件家族:一个恶意软件家族可以用集合Ci=(Ci1,Ci2,......,Cin)表示,其中Cin表示利用图相似性度量方法得到的基于某一敏感API的最大同构子图,i表示某一恶意软件家族,n表示该恶意软件家族涉及的敏感API个数。
计算恶意软件家族特征包括三个步骤:
(1)确定恶意软件家族使用的敏感API集;
(2)以该恶意软件家族所有恶意软件样本为训练集,针对该恶意软件家族敏感API集中包含的每个敏感API,分别利用图相似性度量方法得到基于该敏感API函数调用图的最大同构子图Cin;
(3)大部分情况下,一个恶意软件家族都包含多个敏感API,针对不同敏感API得到的最大同构子图构成集合Ci=(Ci1,Ci2,......,Cin)即是该恶意软件家族的家族特征。
利用恶意软件家族特征,可以实现对恶意软件家族归属的判定。首先通过对恶意软件使用的敏感API集进行分析,将该恶意软件使用的敏感API集与各个恶意软件家族使用的敏感API集进行比较,缩小可能的恶意软件家族范围。进而构建该恶意软件基于各个敏感API的函数调用图,将这些函数调用图依次与可能的恶意软件家族特征进行子图同构分析。若该恶意软件基于某一敏感API的函数调用图恰与恶意家族基于相同敏感API的特征图满足“子图-图”同构,则由式(1)可计算得到基于该敏感API恶意软件函数调用图与恶意软件家族特征图间的相似度:
其中Nfeature表示基于该敏感API恶意软件家族特征图包含的节点数,Nsample表示基于该敏感API恶意软件函数调用图包含的节点数。
若Rfunction大于设定阈值γ,则进一步由式(2)计算得到某一恶意软件家族全部特征图与该恶意软件基于敏感API函数调用图的总体相似程度Rsimilarity:
其中ΣNfeature_i表示所有与恶意软件基于敏感API函数调用图间满足“子图-图”同构的恶意软件特征图所包含的节点总数,ΣNsample_i表示待测恶意软件基于敏感API函数调用图包含的节点总数。为了准确判定恶意软件是否属于该恶意软件家族,还需引入阈值α,α通常大于60%。需要说明的是,α的值不应设置的过小,否则将产生误判。若Rsimilarity>α,则判定该恶意软件属于该恶意软件家族。
如图6(a)6(b)6(c)所示,分别绘制了DroidKungFu1、DroidKungFu2、DroidKungFu3基于Ljavax/crypto/Cipher;→doFinal敏感API的家族特征图,虽然相近恶意软件家族DroidKungFu1、DroidKungFu2及DroidKungFu3使用的敏感API集相差不大,但其基于同一敏感API的家族特征图之间存在较显著差异,从图中可以直观的看出三者基于该敏感API的函数调用图存在显著差异。因此,综合利用恶意软件家族敏感API集与基于敏感API的函数调用图可以对恶意软件家族进行较准确的划分。
如果待检测恶意软件与已知恶意软件家族的相似度都小于规定的阈值α,即若Rsimilarity≤α,则无法对该未知恶意软件进行分类。因此需要引入式(3)计算该未知恶意软件与所有已知恶意软件家族特征匹配的节点总数占该样本节点总数的比例Rsample_total:
式中:Nsample-i表示基于该敏感API恶意软件函数调用图包含的节点数;Nfunction-i表示已知恶意软件基于该敏感API函数调用图包含的节点总数;若Rsample_total大于一定的阈值β,则表明该恶意软件所有函数调用图虽然不与某一特定恶意软件家族特征具有较高的相似度,但是该未知恶意软件大部分函数调用图均与某些恶意软件家族特征图存在相似结构,因此,可知该恶意软件为未知恶意软件家族样本,且该恶意软件家族与已知的某些恶意软件家族可能具有家族演化关系。
为更进一步验证本发明实施例的有效性,下面结合具体实验数据对本发明实施例做进一步解释说明。相同的,以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本次实验是基于一定数量现实中Android恶意软件完成的。恶意软件训练集来源于AndroMalShare,包含16个恶意软件家族共641例恶意软件样本。恶意软件测试集来源于Android Malware Genome Project,包含16个恶意软件家族共685例恶意软件样本。具体见表2、表3。
表2 Android恶意软件训练集
表3 Android恶意软件测试集
Android恶意软件家族名称 | 恶意软件样本数 | Android恶意软件家族名称 | 恶意软件样本数 |
ADRD | 22 | Geinimi | 55 |
BeanBot | 8 | GingerMaster | 4 |
Bgserv | 9 | GoldDream | 47 |
DroidDream | 16 | jSMSHider | 16 |
DroidDreamLight | 46 | Pjapps | 58 |
DroidKungFu1 | 34 | Plankton | 11 |
DroidKungFu2 | 30 | SndApps | 10 |
DroidKungFu3 | 309 | YZHC_b | 10 |
恶意软件样本通过调用敏感API实现敏感操作,不同恶意软件家族样本使用的敏感API往往不同。对16个恶意软件家族使用的敏感API进行了统计分析,Android恶意软件家族敏感API使用频率统计图如图7所示,从图中可知,恶意软件家族广泛使用的敏感API包括用户获取设备及用户敏感信息的敏感API:TelephonyManager;→getDeviceId、URL;→openConnection,以及用于建立网络连接的敏感API:TelephonyManager;→getLine1Number、URLConnection;→connect等。
不同恶意软件家族由于其实现的敏感操作不同,因此其使用的敏感API集合也不同。表4对比了恶意软件家族ADRD、SndApps及GoldDream使用的敏感API集合。由于这三个恶意软件家族实现了不同的敏感操作且三者不存在家族演化关系,因此其使用的敏感API集合近乎完全不同。然而,具有家族演化关系或由同一“祖先”演化而来的恶意软件家族往往在实现的敏感操作上具有相似性,因此其使用的敏感API集合也具有相似性。
表4 ADRD、SndApps、GoldDream恶意软件家族敏感API集合的比较
表5比较了恶意软件家族DroidKungFu1、DroidKungFu2及DroidKungFu3调用的敏感API集合。DroidKungFu2恶意软件家族调用的敏感API集合较DroidKungFu1恶意软件家族相比仅缺少了对敏感API:Lorg/apache/http/impl/client/DefaultHttpClient;→execute的调用,DroidKungFu3恶意软件家族与DroidKungFu1恶意软件家族调用的敏感API集合完全相同,由于这三个恶意软件家族具有家族演化关系,故其使用的敏感API集合具有相似性。
表5 DroidKungFuX恶意软件家族敏感API集合的比较
因此,仅通过对比不同恶意软件家族调用的敏感API集合是无法对恶意软件家族进行准确划分的,还需要对恶意软件家族样本结构进行分析。即使恶意软件家族间使用的敏感API集合相似,然而这些恶意软件家族在基于敏感API的函数调用图上仍存在一定差异。因此,基于敏感API的函数调用图可以作为恶意软件家族的特征,利用这一特征可以实现对恶意软件家族进行较准确的划分。
为了检验公式(1)的可行性并确定阈值α,本发明实施例对不同恶意软件家族特征图间的相似性进行分析,计算得到了恶意软件家族fi与恶意软件家族fj(j≠i)间具有子图同构关系的特征图所包含的节点总数占恶意软件家族fi特征图节点总数的比例,见表6。其中占比最大值为55.56%,因此为了较为准确的确定待检测恶意软件的家族归属,阈值α需要大于等于60%。
表6恶意软件家族特征图相似率
大部分恶意软件家族特征图间相似节点占比较小,表明根据恶意软件家族特征图可以唯一确定待检测恶意软件的家族归属。某些恶意软件家族特征图相似节点占比相对较大,例如GoldDream恶意软件家族特征图与其他恶意软件家族特征图相似节点占其特征图节点数的比例都高于20%,这是由于该恶意软件家族各特征图含有节点数较少,而较少的节点数导致了较小的特征图规模(特征图结构简单),因此该恶意软件家族特征图与其他恶意软件家族特征图间产生子图同构情况的可能性增加,因此导致了占比较高的情况。
本发明实施例还提供了一种恶意软件家族归属判定系统,包括处理器及存储介质;所述存储介质用于存储指令;所述处理器用于根据所述指令进行操作以执行前述方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种恶意软件家族归属判定方法,其特征在于,所述方法包括如下步骤:
获取包含恶意软件的安卓安装包;
从所述安卓安装包中获取API函数节点信息;
针对恶意软件家族使用的每个敏感API,结合API函数节点信息分别构建函数调用图;
根据函数调用图计算函数调用图间存在的最大同构子图;
将某一恶意软件家族样本基于同一敏感API得到的函数调用图作为训练集,对最大同构子图进行同构分析,得到恶意软件家族特征;
利用恶意软件家族特征对恶意软件进行家族归属判定。
2.根据权利要求1所述的恶意软件家族归属判定方法,其特征在于,从所述安卓安装包中获取API函数节点信息的方法包括如下步骤:
对安卓安装包进行反编译,得到包含dalvik字节码的smali文件;
对smali文件中的“incoke-xxxx”语句进行分析,得到安卓安装包中所包含的API函数节点;
将父类中的API函数节点替换子类中继承的API函数节点,将API函数节点间的间接调用关系转换为直接调用关系,获取API调用序列。
3.根据权利要求2所述的恶意软件家族归属判定方法,其特征在于,获取API函数节点信息的方法还包括对涉及第三方的软件开发工具包的API函数节点进行过滤。
4.根据权利要求1所述的恶意软件家族归属判定方法,其特征在于,所述函数调用图采用下述三元组表示:
Gi=(Si,Vi,Ei)
其中:Gi表示基于第i个敏感API构建的函数调用图;Si表示第i个敏感API;Vi表示第i个敏感API调用序列上所有函数节点的集合;Ei表示第i个敏感API函数节点间的调用关系。
5.根据权利要求1所述的恶意软件家族归属判定方法,其特征在于,根据函数调用图计算函数调用图间存在的最大同构子图的方法包括:
将多张基于不同敏感API的函数调用图以敏感API节点为图匹配的约束条件,利用子图同构算法得到最大同构子图。
6.根据权利要求5所述的恶意软件家族归属判定方法,其特征在于,利用子图同构算法得到最大同构子图的方法包括:
对于“图-图”同构及“子图-图”同构,采用VF2子图同构算法计算得到最大同构子图;
对于“子图-子图”同构,采用SimRank算法计算函数调用图间各节点关于敏感API节点的相似度,根据相似度构建最大同构子图。
7.根据权利要求1所述的恶意软件家族归属判定方法,其特征在于,利用恶意软件家族特征对恶意软件进行家族归属判定的方法包括:
将待判定恶意软件所使用的敏感API集与各个恶意软件家族使用的敏感API集进行比较,获取可能的恶意软件家族;
将恶意软件基于敏感API的函数调用图依次与可能的恶意软件家族的家族特征进行子图同构分析:
若该恶意软件基于某一敏感API的函数调用图恰与恶意家族基于相同敏感API的特征图满足“子图-图”同构,则采用公式(1)计算得到基于该敏感API恶意软件函数调用图与恶意软件家族特征图间的相似度:
其中:Nfeature表示基于该敏感API恶意软件家族特征图包含的节点数,Nsample表示基于该敏感API恶意软件函数调用图包含的节点数;
若Rfunction大于设定阈值γ,则进一步采用公式(2)计算恶意软件家族全部特征图与恶意软件的函数调用图的总体相似度:
其中:ΣNfeature_i表示所有与恶意软件基于敏感API函数调用图间满足“子图-图”同构的恶意软件特征图所包含的节点总数,ΣNsample_i表示待测恶意软件基于敏感API函数调用图包含的节点总数;
若总体相似度Rsimilarity大于某恶意软件家族预设的判定阈值α,则判定恶意软件归属为该恶意软件家族。
8.根据权利要求7所述的恶意软件家族归属判定方法,其特征在于,利用恶意软件家族特征对恶意软件进行家族归属判定的方法还包括:
当Rfunction和Rsimilarity均不大于判定阈值α时,采用公式(3)计算该未知恶意软件与所有已知恶意软件家族特征匹配的节点总数占该样本节点总数的比例Rsample_total:
式中:Nsample-i表示基于该敏感API恶意软件函数调用图包含的节点数;Nfunction-i表示已知恶意软件基于该敏感API函数调用图包含的节点总数;若Rsample_total大于预设阈值β,则表明该恶意软件为未知恶意软件家族样本,且该恶意软件家族与已知的某些恶意软件家族可能具有家族演化关系。
9.一种恶意软件家族归属判定系统,其特征在于,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据权利要求1~8任一项所述方法的步骤。
10.计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1~8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910787920.5A CN110516446A (zh) | 2019-08-26 | 2019-08-26 | 一种恶意软件家族归属判定方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910787920.5A CN110516446A (zh) | 2019-08-26 | 2019-08-26 | 一种恶意软件家族归属判定方法、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110516446A true CN110516446A (zh) | 2019-11-29 |
Family
ID=68626881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910787920.5A Pending CN110516446A (zh) | 2019-08-26 | 2019-08-26 | 一种恶意软件家族归属判定方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110516446A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240696A (zh) * | 2020-01-09 | 2020-06-05 | 中国科学院深圳先进技术研究院 | 移动恶意程序相似模块提取方法 |
CN111814148A (zh) * | 2020-07-15 | 2020-10-23 | 电子科技大学 | 一种基于方法调用图的安卓恶意软件家族聚类方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102208004A (zh) * | 2011-05-13 | 2011-10-05 | 南京邮电大学 | 一种基于最小化特权原则的软件行为控制方法 |
CN108280350A (zh) * | 2018-02-05 | 2018-07-13 | 南京航空航天大学 | 一种面向Android的移动网络终端恶意软件多特征检测方法 |
-
2019
- 2019-08-26 CN CN201910787920.5A patent/CN110516446A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102208004A (zh) * | 2011-05-13 | 2011-10-05 | 南京邮电大学 | 一种基于最小化特权原则的软件行为控制方法 |
CN108280350A (zh) * | 2018-02-05 | 2018-07-13 | 南京航空航天大学 | 一种面向Android的移动网络终端恶意软件多特征检测方法 |
Non-Patent Citations (1)
Title |
---|
HAO ZHOU等: "Analysis of Android malware family characteristic based on isomorphism of sensitive API call graph", 《2017 IEEE SECOND INTERNATIONAL CONFERENCE ON DATA SCIENCE IN CYBERSPACE》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240696A (zh) * | 2020-01-09 | 2020-06-05 | 中国科学院深圳先进技术研究院 | 移动恶意程序相似模块提取方法 |
CN111814148A (zh) * | 2020-07-15 | 2020-10-23 | 电子科技大学 | 一种基于方法调用图的安卓恶意软件家族聚类方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426723B (zh) | 使用释放后内存的检测方法、系统、设备及存储介质 | |
Ampatzoglou et al. | The effect of GoF design patterns on stability: a case study | |
US9251046B2 (en) | Method and system for generating and processing black box test cases | |
US7926026B2 (en) | Graphical analysis to detect process object anomalies | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
Phan et al. | Quantifying information leaks using reliability analysis | |
CN110110529B (zh) | 一种基于复杂网络的软件网络关键节点挖掘方法 | |
KR20060045568A (ko) | 프로그램 계측 동안의 프로브 최적화 방법 및 시스템 | |
US20200089491A1 (en) | Method and system for code analysis to identify causes of code smells | |
KR101423030B1 (ko) | 컴퓨터 실행 가능한 어플리케이션 객체 분석 방법, 이를 수행하는 어플리케이션 객체 분석 서버 및 이를 저장하는 기록매체 | |
CN109670318A (zh) | 一种基于核控制流图循环验证的漏洞检测方法 | |
CN110516446A (zh) | 一种恶意软件家族归属判定方法、系统及存储介质 | |
CN107066384A (zh) | 基于Halstead复杂度度量的软件演化评估方法 | |
CN109101820A (zh) | 一种基于执行流图的Web应用安全漏洞预测方法 | |
Llerena et al. | Verifying the long-run behavior of probabilistic system models in the presence of uncertainty | |
Fan et al. | EstiDroid: estimate API calls of android applications using static analysis technology | |
CN112579440A (zh) | 一种虚拟测试依赖对象的确定方法及装置 | |
Kundu et al. | A UML model-based approach to detect infeasible paths | |
Satapathy et al. | Usage of machine learning in software testing | |
Mal et al. | New quality inheritance metrics for object-oriented design | |
CN107392029B (zh) | 一种基于化学抽象机的脆弱性模型构建方法 | |
Mathur et al. | Towards an object-oriented complexity metric at the runtime boundary based on decision points in code | |
KR102217092B1 (ko) | 애플리케이션의 품질 정보 제공 방법 및 장치 | |
Noda et al. | Constructing object groups corresponding to concepts for recovery of a summarized sequence diagram | |
Lopez et al. | Relevance of the cyclomatic complexity threshold for the java programming language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191129 |
|
RJ01 | Rejection of invention patent application after publication |