APP下载

Android恶意软件检测方法研究

2016-04-07刘梦戎胡勇

电脑知识与技术 2016年3期

刘梦戎 胡勇

摘要:Android已成为当今最热门的移动终端平台,其开放性的特点使得针对它的恶意软件层出不穷。该文针对恶意软件的行为进行动态分析,提出了一种基于监控敏感API调用的恶意软件检测算法。该算法用卡方检验筛选出权值高、作用不重叠的敏感API,最后使用K-means算法做机器学习,识别出与样本库相似的恶意软件,该方法能够有效识别恶意软件,标注出其恶意行为。

关键词:Android;恶意软件;敏感API

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)03-0086-02

近几年来,Android平台日益严重的安全问题,使得恶意软件研究成为当务之急。Android恶意代码分析研究目前主要有两种方法,即静态分析和动态检测。静态分析是指通过分析程序代码来判断程序行为 [1]。动态分析是指在严格控制的环境下执行应用程序,尽可能的触发软件的全部行为并记录,以检测应用程序是否包含恶意行为[2]。本文提出的全面检测软件运行时信息的Android恶意软件检测方案就是基于动态分析的基础上,利用敏感API的触发来判断应用程序的行为。据此开发了一个恶意程序检测系统,对系统的检测效果进行评估和验证。

1敏感API

通常,恶意软件在运行时需要调用特定的API来完成,如隐私窃取型恶意软件需要访问通讯录API,恶意计费型恶意软件需要调用发送短信API,这些API是敏感API[3]。在恶意软件动态分析中,需要用到程序运行时的API调用日志,而Android系统的日志仅提供了有限信息。因此通过dalvik注入的方式在Android源码中hook这些敏感API,使得恶意软件调用这些敏感API时能及时得到调用日志。

敏感API来源于对已知恶意软件分析的经验,以及对已知恶意软件和已知正常软件API统计的差异[4]。最终选定了可以用来收发短信、删除短信、拨打电话、删除通话记录、开启网络、执行shell脚本等功能的API。部分修改敏感API如表1所示。

2 检测方法的设计与实现

恶意软件检测系统功能包括:1)综合信息采集;2)数据预处理;3)数据分析。综合信息采集的目标是获取敏感API调用信息及全面获取程序的其它静、动态信息,以便于人工分析经过数据处理后仍然可疑的应用程序。数据预处理指的是用卡方检验算法对敏感API调用序列做滤波处理,以得到一个更加独立的敏感API调用特征值集合。经过数据预处理后,数据分析模块应用机器学习算法学习分类规则,学习完成后识别未知应用程序。

2.1综合信息采集

分析系统采用自动化设计,用户将目标应用程序导入系统后,系统将应用程序自动安装到分析模拟机上,并运行,分析系统记录下APK运行过程中对系统文件、网络、短信、通讯录、电话、日历、定位、录音的访问记录,以及系统是否有执行进程、注入、拍照等获取手机隐私信息的行为,并将应用程序触发的敏感API序列记录在数据库中。本系统为全自动化运行,分析模拟系统会自动模拟拨打电话、接听电话、收发短信、模拟按键、位置变化等真实的手机行为,应用程序会根据这些行为自动做出响应。部分综合信息如表2所示。

2.2用卡方检验预处理数据

数据采集模块得到的敏感API调用序列数据量很大,且有大量重复冗余调用。系统一共标记了183处敏感API,运行过程中会调用大部分的API。在获得的敏感API序列中,有些API单独触发对于检测软件是否安全的意义不大,并且很多敏感API在功能上有相似性,如Location类的getLatitude方法和getLongitude方法被应用程序触发后都表示程序正在获取手机位置信息等[5]。因此,可以使用卡方检验算法对样本库的API调用序列进行滤波,筛选掉上述类型的敏感API,以减少分析计算的工作量。卡方检验的公式表示如下:

2.3基于K-means算法的数据分析

经过上一步的去冗余等处理,将敏感API调用集合变成了含有敏感API、调用频数的二维表形式[6]。用K-means算法对各二维表进行学习计算。K-means算法是一种聚类算法,它以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇之间的相似度较低。算法的处理过程为:首先随机选取k个对象作为初始的k个簇的质心;然后将剩余对象根据其与各个簇的质心的距离分配到最近的簇;最后重新计算各个簇的质心。不断地重复此过程,直到目标函数最小为止。簇的质心公式如下:

每个Android应用程序的敏感API调用数据,都会被分成2种:正常的或含有恶意的,分别组成正常调用向量和恶意调用向量。实验中选择分两类即k=2,分类结果出来后,可以对照样本实际分类的情况,调整属性的数量,以及权重分配的方法。完成学习后,识别出既偏离良性,又偏离恶意的软件,可以结合数据库中的综合信息进行人工分析,再将结果重新反馈,建立新的类别。

3测试分析

从”Contagiomobil”网站下载了80个Android手机恶意软件样本。在Android市场上下载了60个正常应用程序,这140个程序作为实验的样本,进行分类整理。挑选其中40个恶意软件和30个正常软件作为系统学习样本,其余70个作为测试样本实验。实验的硬件架构如图所示:

经过实验检测:30个正常软件,其中有26个判断正确,4个作为疑似恶意软件提交;40个恶意软件,38个判断正确,2个作为疑似恶意软件提交。将疑似恶意软件的类型反馈给系统后,系统即拥有了对它们的识别能力。从结果来看,该检测方法对恶意软件有较高的判断率,表现出良好的性能,由于学习的样本数量限制,判别为疑似恶意软件较多,可以通过大量样本学习来改善。

3 结束语

文中提出并设计实现了一种Android恶意软件检测方案。该方案通过修改Android源码中的敏感API,实现当导入应用程序到系统后,系统开始将APK自动安装到分析模拟上运行,并自动产生模拟行为让APK做出响应。对APK触发的敏感API调用信息经过卡方检验的预处理后,使用k-means分类算法让系统进行学习,使系统对恶意软件有良好的识别能力。

参考文献:

[1] 蒋绍林,王金文,张涛,等.Android安全研究综述[J].计算机应用与软件,2012,29(10):205-210.

[2] 董振飞,杨康.Android平台恶意软件的静态行为检测[J].江苏通信,2011(2):39-47.

[3] 陈文.基于模块签名的Android内核级Rootkit检测方法研究[D].南京:南京大学,2012.

[4] 陈洪泉.恶意软件检测中的特征选择问题[J].电子科技大学学报:增刊,2009(11):53-56.

[5] 廖明华,郑力明.Android安全机制分析与解决方案初探[J].科学技术与工程,2011,11(26):6350-6355.

[6] 吴倩,赵晨曦,郭莹.Android安全机制解析与应用实践[M].北京:机械工业出版社,2013.

[7] 汪廷华,田盛丰,黄厚宽.特征加权向量机[J].电子与信息学部,2009,31(3):514-518.