法律状态公告日
法律状态信息
法律状态
2016-03-30
授权
授权
2014-01-22
实质审查的生效 IPC(主分类):G06F21/56 申请日:20130925
实质审查的生效
2013-12-25
公开
公开
技术领域
本发明涉及移动互联网技术领域,主要涉及一种检测Android系统上的恶意 代码的方法。
背景技术
随着智能手机的高速发展,Android平台逐渐成为了世界上第一大的移动终 端平台,产品覆盖了机顶盒,手机,平板,以及各种智能终端,从各个角度影响 着人们的生活。而且这些智能终端的功能越发的强大,包括了语音通话,数据业 务,NFC近场通讯等。Android智能终端已经深入的进入到了我们每个人的生活 中,支付类服务,生活类服务,地图类服务,娱乐类服务,个人信息类服务。在 这样的情况下,Android平台上的安全问题逐渐成为了一个不得不被关注的问 题。
据安全公司TrustGo最新数据表明,Android上恶意应用数量自2011年 9月到2012年9月增长了580%。全球Android恶意软件数量已从2年前的百 余款到了今天的过百万,从简单的窃取用户通信记录发展到了全面监控用户手 机,窃取包括个人记录,银行记录,第三方软件保存信息,后台发送吸费短信, 后台静默点击广告等多个方面。
现有Android平台恶意代码检测技术大多采用特征库方式,对新的未知恶意 软件几乎没有查杀能力。
发明内容
针对现有技术的不足,本发明的目的在于提供一种Android恶意代码检测方 法,通过启发式静态分析,提高对恶意代码的识别和查杀能力。
本发明的目的是通过以下技术方案来实现的:
一种Android恶意代码检测方法,包括以下步骤:
第一步,采集Android软件的恶意样本,进行手动分析,提取其中的敏感函 数;
第二步,提取所述恶意样本中经常使用的敏感接收器;
第三步,对第一步和第二步提取的敏感函数和接收器进行打分,打分原则为 高危操作或者敏感信息窃取方向的分值最高,危害程度越低,分值越低;
第四步,对待测的apk文件,通过反编译apk源文件,得到内部方法调用序 列,然后再提取apk文件对外部的敏感函数和敏感接收器进行的调用,把这两部 分调用添加到内部方法调用序列中,形成全局的异构方法调用序列;
第五步,根据第四步生成的异构方法调用序列,生成异构方法调用图,图中 包含外部调用敏感函数、敏感接收器、Main函数和具体权限。
第六步,对第五步生成的图进行连通性扫描,利用图的深度遍历算法,划分 出独立子图;
第七步,对上一步处理过的子图,利用第三步中的分值结构进行敏感性打分, 并计算每个独立子图的评分;
第八步,上一步中评分超过第一阈值的即为恶意代码子图模块,进行标定与 记录;
第九步,每检测出一个恶意代码子图后,计算该恶意代码子图的调用路径长 度序列。
第十步,将该恶意代码子图的调用路径长度序列与已知恶意代码家族调用路 径长度序列进行对比,并计算编辑距离,所述编辑距离是指两个调用路径长度序 列之间,由一个转成另一个所需的最少编辑操作次数。
第十一步,记录每一个敏感函数的恶意代码子图的调用路径长度序列与已知 恶意代码家族调用路径长度序列的编辑距离,并将该编辑距离与已知恶意代码家 族调用路径长度序列中对应的敏感函数调用路径长度总和进行比值,若比值均小 于第二阈值,则判定该恶意代码与所述已知恶意代码家族属于同一个家族。
本发明的有益效果为:启发式地发现未知恶意软件,可以对其进行家族标定, 提高识别和查杀能力,为广大Android第三方市场和个人用户提供安全扫描和保 护。
附图说明
图1是本发明提出的Android恶意代码检测方法的流程示意图;
图2是计算恶意代码子图的调用路径长度序列的算法示意图。
具体实施方式
以下结合附图对本发明的技术方案进行详细说明。
如图1所示,本发明采用构建Apk软件异构方法调用图,标定敏感函数,继 而实现以图的相关性方式对Android恶意代码进行定位和家族分类。在一个特定 实施例中,检测方法具体包括以下步骤:
第一步,采集Android软件的恶意样本,进行手动分析,提取其中的敏感函 数。
所述敏感函数包括网络类,短信类,电话类,文件操作类,设备操作类,代 码执行类,地理位置类等七大类。在一个实施例中,敏感函数共计31个敏感api 函数接口,如表1所示。
表1敏感函数和敏感接收器示例
第二步,提取恶意样本中经常使用的敏感接收器。本领域技术人员应当明了, 所谓“经常使用”是指在预定时间内使用次数达到或超过预定阈值。在一个实施 例中,经常使用的敏感接收器包括接受短信接收器,接通电话接收器,挂断电话 接收器,接受来电接收器,开机启动接收器共计五个,见表1。
第三步,对第一步和第二步采集的敏感函数和接收器进行打分。分值可以采 用连续的数值,也可以采用分段档位。在一个实施例中,分值分为六档,如表1 所示,以5分为最低档,30分为最高档,步长为5。打分原则为高危操作或者敏 感信息窃取方向的分值最高,随着危害程度不同,危害越低,分值越低。
第四步,对待测的apk文件,通过反编译apk源文件,得到内部方法调用序 列,然后再提取apk文件对对外部的敏感函数的调用,敏感接收器调用,由于这 两部分调用,结构是内部函数调用外部函数的形式,所以把这两部分调用,添加 到内部方法调用序列中,从而形成了全局的异构方法调用序列。
第五步,根据第四步生成的异构方法调用序列,生成异构方法调用图,其 中,图中包含外部调用敏感函数,敏感接收器,Main函数。
第六步,对第五步生成的图进行连通性扫描,利用图的深度遍历算法,划分 出独立子图。
第七步,对上一步处理过的子图,利用附录一所示分值进行敏感性打分,主 要利用第三步设计的分值结构,并计算每个独立子图的评分,(评分=敏感分数/ 方法总数)。
第八步,上一步中评分超过阈值的即为恶意代码子图模块,进行标定与记录, 阈值为0.8;
第九步,每检测出一个恶意代码子图后,计算恶意代码子图的调用路径长度 序列。函数调用路径长度计算方法:在子图中,对每一个外部敏感函数方法,必 然存在多个调用序列,每一个调用序列中的节点集合即为函数调用路径,而节点 集合的节点数目之和即为函数调用路径长度。每一个外部敏感函数都有不止一个 调用序列,这些不同的调用序列所生成的调用路径长度所构成的集合即为函数调 用路径长度序列。
参考图2,上述算法的示例可描述如下:
图中In表示图中每个节点的入度,Seq则记录每个节点的调用路径长度。
Step1:首先对全图所扫描,计算每个节点的入度(In),并初始化调用路 径长度序列Seq。
Step2:首先选取图中入度为零的节点A,并查找A节点所调用的所有节点: B和C,将A中的Seq中的每个元素加1合并到B中,并且给B的Seq中直接再 加一个元素1(代表了A直接调用B),得到B:Seq[1]。最后将B节点的入度减 一,对对等的C节点做同样操作。
Step3:继续选取图中入读为零的节点B,并查找B节点所调用的所有节点 D,将B的Seq中的每个元素加1合并到D的Seq中,得到D:Seq[2],再将D 的Seq中直接再加一个元素1(代表了B直接调用D)得到D:Seq[1,2],将D 节点入度减一。
Step4:继续选取图中入读为零的节点C,并查找C节点所调用的所有节点 D、E,将C中的Seq的每个元素加1合并到D的Seq中,得到D:Seq[1,2,2], 再将C的Seq中直接再加一个元素1(代表了C直接调用D)得到D:Seq[1,1,2,2], 将D节点入度减一。对E做类似操作,得到了E:Seq[1,2],E的入度减一。
Step5:继续选取图中入读为零的节点D,并查找D节点所调用的所有节点 E,将D中的Seq的每个元素加1合并到E的Seq中,得到E:Seq[1,2,2,2,3,3], 再将D的Seq中直接再加一个元素1(代表了D直接调用E)得到E: Seq[1,1,2,2,2,3,3]。
Step6:全图遍历结束,得到了E节点的调用路径长度序列E: Seq[1,1,2,2,2,3,3]。
第十步,将恶意代码子图的调用路径长度序列与已知恶意代码家族调用路径 长度序列进行对比,计算编辑距离。这里将编辑距离定义进行了扩充,指两个调 用路径长度序列之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑 操作包括将一个元素替换成另一个元素,插入一个元素,删除一个元素。设序列 a,b为待测序列,i,j分别代表a,b序列的指定位元素。其中,ai表示a序列第i个 元素,bj表示b序列第j个元素,distancea,b(i,j)为序列之间的对应长度的编辑 距离:
第十一步,记录每一个敏感函数的恶意代码子图的调用路径长度序列与已知 恶意代码家族调用路径长度序列的编辑距离,并将其与已知恶意代码家族调用路 径长度序列中对应的敏感函数调用路径长度总和进行比值,若比值均小于10% 时,则可以判定这两个恶意代码属于同一个家族。
由此,本发明利用图的连通性对恶意代码进行定位和家族分类,启发式地发 现未知恶意软件,可以对其进行家族标定,提高识别和查杀能力。
以上利用具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说 明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域技术人员, 依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述, 本说明书内容不应理解为对本发明的限制。
机译: 基于低维数熵映射图的恶意软件检测方法
机译: 基于图的恶意软件命令控制基础设施检测方法
机译: 一种正面认证方法,其增强了计算机生成全息图转换的数字全息图标记的安全级别,这是一种基于计算机生成的全息图的正认证系统数字全息图标记发生器,用于基于计算机生成的全息图的正验证系统