移动恶意代码分析及检测技术研究

2015-05-15 18:46落红卫
信息通信技术 2015年1期
关键词:应用程序代码特征

落红卫

中国信息通信研究院 北京 100191

引言

伴随网络环境的日益成熟和业务应用的蓬勃发展,移动智能终端功能日益强大并被广泛使用,成为人们日常生活中必不可少的组成部分。根据工业和信息化部发布的数据,截至2014年10月,我国移动互联网用户达到8.74亿户,移动电话普及率达到93.5部/百人[1]。官方应用商店,如Google Play应用数量突破150万,苹果的App Store应用数量突破100万,下载量以百亿次计。移动应用的迅速发展极大程度上刺激了移动互联网持续创新,降低了移动应用开发门槛并为用户带来了丰富多彩的互联网体验,并最终促进了移动互联网全面发展。但是移动应用尤其是在线应用在飞速发展的同时也滋生了大量的安全隐患:恶意扣费、隐私泄露、流量耗费、数据篡改、资源占用、病毒木马等严重问题,甚至传播涉黄、反动等非法内容。究其原因,一方面在移动互联网中,除了安装手机防病毒软件外,缺乏针对不良及恶意应用传播的技术制约手段,例如移动应用程序的来源认证、对恶意应用的追踪溯源机制等等;另一方面移动应用平台(包括商店和第三方服务器)对其承载的移动应用安全管理尺度不一,没有统一标准规范,应用平台的自身安全防护能力不健全等,都是恶意应用、不良应用能够上架流通的重要原因。目前,90%以上恶意代码来自于Android应用软件,故本文将以Android应用软件为主进行恶意代码分析及检测技术研究。

1 移动恶意代码现状分析

移动恶意代码通常在移动应用软件开发或二次打包过程中植入,通过诱骗欺诈、隐私窃取、恶意扣费等方式攫取经济利益或传播垃圾信息。中国互联网协会反网络病毒联盟《移动互联网恶意代码描述规范》将移动互联网恶意代码分为八大类:恶意扣费、隐私窃取、远程控制、恶意传播、资费消耗、系统破坏、诱骗欺诈和流氓行为[2]。在这八类恶意代码中危害表现最突出的恶意程序有如下3个。1)恶意扣费。在用户不知情或未授权的情况下,通过隐蔽执行、欺骗用户点击等手段,订购各类收费业务或使用移动终端支付,导致用户经济损失的,具有恶意扣费属性。2)隐私窃取。在用户不知情或未授权的情况下,获取涉及用户个人信息,具有隐私窃取属性。3)资费消耗。在用户不知情或未授权的情况下,通过自动拨打电话、发送短信、彩信、邮件、频繁连接网络等方式,导致用户资费损失,具有资费消耗属性。

移动恶意代码难以治理主要有两方面原因:应用开放环境和检测躲避技术。

1.1 应用开放环境

移动恶意代码起源于应用软件开放的开发和应用环境。Android操作系统本身提供应用签名、权限审核和沙箱隔离三项重要的安全机制来限制和约束应用软件行为。虽然在很大程度上保证应用软件灵活性的前提下加强了应用软件安全能力,但远没达到消除安全威胁的效果[3],具体如下。

1) Android支持可装载内核模块机制(LKM)。在这种机制下,大多数内核模块都是可以被重新编译、装载和卸载的。系统启动后,LKM可以像其他内核模块一样被链接进入系统。部分恶意代码利用这种灵活扩展机制,通过修改内核代码使自己的恶意代码模块可以拦截正常的系统调用,并改变正常的软件行为,如隐藏进程、监控操作和记录键盘等。恶意代码可以修改系统调用表中的函数地址为自己的函数执行完自定义代码。Android反射机制使恶意代码在任何对象中都有调用目标类所有字段和方法的可能,增加了系统的安全威胁。

2) Android系统的权限机制以进程为监控单元,应用的进程间通信机制(IPC)给应用软件带来共谋攻击威胁。共谋攻击是指两个或多个应用分别获取一部分关键功能和权限,各自不会对系统安全造成威胁,但是这几个应用包含的功能共同作用则产生系统攻击,并不易被安全监控系统发觉[4-5]。

3) Android平台的权限安全机制可以保证应用程序在用户安装以后执行的操作不会超出它申明的权限列表。但大部分应用程序权限授予方式是全选方式,如果用户想使用该应用程序,只能将应用程序申明的所有权限授予应用程序,否则将无法安装该应用程序。市面上虽然已有一些产品可以完成权限的细粒度的控制功能,但是这些产品普遍需要用户参与是否授予权限的判定,这种方式对于用户不太友好,用户很难成为业务专家,故此难以实施[6]。

4) 应用软件均以APK包格式存在。应用软件在发布时都必须被签名,与通常在信息安全领域中使用数字证书的用途不同,Android仅仅利用数字签名来标识应用的作者和在应用间建立信任关系,而不是用来判定应用是否应该被安装。这个数字证书并不需要权威的数字证书签名机构认证,而是由开发者来进行控制和使用的,用来进行应用包的自我认证。同时,APK包本身较易被反编译,并重新打包,任何一个开发人员可以对应用程序进行再次打包,因此,很多恶意软件开发者从网络上下载各种热门应用,解压后插入恶意代码并重新进行打包,进而利用第三方应用商店或者论坛进行传播[7]。

1.2 检测躲避技术

任何事情都具有两面性。对于良性应用软件,检测躲避技术也可以称为软件保护技术,防止应用软件被反编译和盗版;对于恶意代码,检测躲避技术主要被用于逃避恶意行为被发现或者检测。具体如下。

1) 代码混淆技术。代码混淆是指对原始程序进行处理,得到与原程序功能完全一致但结构迥异的新程序。代码混淆可在源代码级别或可执行代码级别进行,目前主流的代码混淆技术主要是针对源代码级别的混淆,通过对程序布局(变量名、文本格式、注释等)、控制流程(跳转分支等)、关键数据等进行混淆转换,以增大逆向的难度,防止分析人员将文件反汇编出来。

2) 软件加壳。保护软件不被非法修改或反编译的程序,先于原程序运行并拿到控制权,进行一定处理后再将控制权转交给原程序,实现软件保护的任务。加壳后的程序能够防范静态分析和增加动态分析的难度。根据软件加壳的目的和作用,可分为以减小软件体积为目的的压缩保护壳和以保护软件为目的的加密保护壳。随着加壳技术的发展,很多加壳软件在具有较强压缩能力的同时具备软件保护能力。

3) 防调试跟踪。防止逆向人员利用动态调试器对软件进行调试的技术,以避免程序运行过程被逆向人员追踪,防止关键算法和敏感信息的泄露。防调试跟踪技术一般通过对调试器的特征检测来实现,如检测敏感进程名称、检测进程是否处于调试状态、检测反常权限、检测时间差、检测断点等。当检测到系统中存在调试器时,程序可做出适当的反应,如退出程序或执行异常处理等。

2 移动恶意代码检测技术介绍

面对日益增多的恶意代码及其变种,如何快速有效地检测应用软件中的恶意行为是当前信息安全检测的主要挑战之一。主流的恶意代码检测技术包括基于特征码检测、基于代码分析检测和基于行为监控检测等[8-13]。

2.1 基于特征码检测

这种检测是基于已知恶意应用进行逆向分析后提取特征码进行的检测,其流程如图1所示。特征码可以唯一标识恶意代码,并且不会出现在正常软件内。特征码包含偏移地址和该地址的二进制信息,比如字符串、操作码、资源信息等。特征码往往需要手工处理分析得到,需要花费很长的时间和人力成本。由于高准确性和低误报率,特征码检测被安全软件广泛使用。但是,特征码检测的最大缺陷是无法检测未知恶意代码。而且,特征码检测对恶意代码的变种检测效果也不好,需要人工提取各种病毒变种的共有特征。随着恶意代码数目的增加,恶意代码特征库越来越大,扫描引擎的扫描速度会降低,同时,恶意代码库会占用更多的空间[14]。

图1 基于特征码检测流程

2.2 基于代码分析检测

这种检测是在不运行代码的方式下,通过词法/语法分析、语言结构分析和控制流/数据流分析等技术对程序代码进行扫描分析的一种检测技术,通常流程如图2所示。首先,系统以Android应用程序APK文件作为输入,通过代码反编译模块进行反编译,获得Android源代码;其次,源代码分析模块对源代码进行词法/语法解析、语言结构分析和数据流/控制流分析,得到敏感数据以及API调用;最后,安全分析模块根据已制定的安全规则,对敏感数据以及API调用进行分析,确定是否为恶意行为。基于代码分析检测可以对安全规则和安全分析模块进行启发式恶意代码检测扩充,用于检测未知恶意行为。基于代码分析检测自动化程度高,可以完整覆盖较全的检测路径和部分未知恶意行为,但是误报率较高并需要对检测结果进行核验[15-17]。

图2 基于代码分析检测流程

2.3 基于行为监视检测

这种检测是利用程序执行过程中的行为特征作为恶意代码判定的依据,流程如图3所示。与特征码检测时提取静态的字符串不同,行为特征是携带动态信息和语义理解的复杂多变的数据结构。使用不同语言编写的程序可能拥有相同的行为特征,所以基于行为特征的恶意代码描述不再是针对一个独立的恶意代码程序,而是针对具有类似行为的一类恶意代码集合。恶意代码的传播、隐藏、系统破坏及信息窃取等功能在程序运行时的行为特征中必将有所体现,这些行为特征往往比较特殊,可以用于区别恶意代码和正常程序。恶意代码主动防御技术,就是基于对进程和行为的全程监控,一旦发现触犯恶意规则的行为,则发出告警。行为监控往往需要借助沙盘和虚拟化等技术,以确保恶意代码执行过程中不会对分析系统造成破坏,并且方便将恶意代码清除或将系统还原到干净的状态。基于行为监控的检测降低了恶意代码检测误报的风险,但是由于针对特定行为特征监控,基于行为监控的检测增加了检测的漏报率。同时,基于行为监控的检测处理速度远低于特征码检测[18-22]。

图3 基于行为监视检测流程

3 移动恶意代码检测最新研究

随着恶意代码数目的增加,未知恶意行为的出现,以及检测躲避技术的应用,恶意代码检测系统需要完成更多更复杂的任务。上述各种恶意代码检测技术各有优缺点,故此综合使用上述恶意代码检测技术的基于多类特征的Android应用恶意行为检测系统成为当前实际应用主流[23]。与此同时,人工智能系统正越来越多地被引入恶意代码检测领域,为恶意代码检测带来了新的思路和方法。目前,主流的应用于恶意代码检测领域的人工智能技术包括数据挖掘和机器学习[24]。

数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库技术等,高度自动化地分析数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者做出正确决策。由于恶意代码隐藏于应用程序当中,应用程序本身代码量就已经很大,当前应用程序总量也很多,故此数据挖掘是最适合恶意代码检测的技术之一。事实上,数据挖掘早已应用于恶意代码检测领域,其主要思想是:首先,提取恶意代码和正常程序的特征,提取的特征可以是文件的静态特征,也可以是文件执行时的动态特征,对特征进行编码,构成恶意代码特征集合和正常文件特征集合;然后,基于数据挖掘算法对分类器进行训练;最后,进行恶意代码检测效果的测试。

机器学习研究计算机怎样模拟或实现人类的学习行为以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习从研究人类学习行为出发,研究一些基本方法(如归纳、一般化、特殊化、类比等)去认识客观世界,获取各种知识和技能,以便对人类的认识规律进行探索,深入了解人类的各种学习过程,借助于计算机科学和技术原理建立各种学习模型,从而赋予计算机系统学习能力。用于恶意代码检测领域的机器学习主要思想是:首先,提取恶意代码和正常程序的代码做预处理并形成特征;其次,根据特征创建恶意代码检测模型;再次,机器学习算法分析收集到的数据,分配权重、阈值和其他参数达到学习目的,形成最终检测规则库;最后,进行恶意代码检测效果的测试。

基于人工智能的恶意代码检测技术同样遇到许多问题:人工智能系统本身系统复杂,理论算法还不是非常成熟;不像恶意代码库特征,未知恶意代码判定标准不确定,给检测系统带来很大困难;基于人工智能的恶意代码检测系统往往系统庞大,执行效率远低于传统检测系统。故此,真正基于人工智能的恶意代码检测还有很长的路要走。

4 结束语

移动恶意代码检测技术是稳固移动互联网产业的根基,是促进移动互联网产业健康稳定发展的动力。通过移动应用软件安全评测技术及工具的理论研究和产品研发,建立移动应用软件安全检测的技术体系、工具及实验环境,建设第三方权威测试平台,对移动应用软件产业链的形成与发展具有重要的推动作用。同时,应用软件的安全性与用户经济利益紧密关联,只有具备科学、权威的恶意代码检测工具,才能帮助构建一个用户可信任的移动互联网应用软件使用环境,对安全要求高、经济附加值高的移动应用软件才可以推广和应用,真正繁荣发展移动互联网。

参考文献

[1]工信部统计分析[EB/OL].[2014-12-25].http://www.miit.gov.cn/n11293472/n11293832/n11294132/n12858447/index.html

[2]中华人民共和国工业和信息化部.YD/T 2439-2012移动互联网恶意程序描述格式[S].2012

[3]张玉清,王凯,杨欢,等.Android安全综述[J].计算机研究与发展,2014,51(7):1385-1396

[4]Wang W,Wang X,Feng D W,et al.Exploring Permission-Induced Risk in Android Applications for Malicious Application Detection[J].IEEE Transactions on Information Forensics and Security,2014,9(11):1869-1882

[5]Sbirlea D,Burke M G,Guarnieri S,et al.Automatic detection of inter-application permission leaks in Android applications[J].IBM J.RES.&DEV.,2013,57(6):10:1-10:12

[6]Moonsamy V,Rong J,Liu S.Mining permission patterns for contrasting clean and malicious android applications[J].Future Generation Computer Systems,2014,36:122-132

[7]Mojica I J,Adams B,Nagappan M,et al.A Large-Scale Empirical Study on Software Reuse in Mobile Apps[J].IEEE Software,2014,31(2):78-86

[8]Suleiman Y Yerima,Sezer S,McWilliams GAnalysis of Bayesian classification-based approaches for Android malware detection[J].Information Security,IET,2013,8(1):25–36

[9]Faruki P,Laxmi V,Bharmal A.AndroSimilar:Robust signature for detecting variants of Android malware[J].Journal of Information Security and Applications,2014(38):63–69

[10]Guido D M,Ondricek J K,Grover J N,et al.Automated identification of installed malicious Android applications[J].Digital Investigation,2013(10):S96-S104

[11]Rastogi V,Chen Y,Jiang X,et al.Catch Me If You Can:Evaluating Android Anti-Malware Against Transformation Attacks[J].IEEE Transactions on Information Forensics and Security,2014,9(1):99-108

[12]Ye Y F,li T,Jiang Q S,et al.CIMDS:Adapting Postprocessing Techniques of Associative Classification for Malware Detection[J].IEEE TRANSACTIONS ON SYSTEMS,MAN,AND CYBERNETICS,2010,40(3):298-307

[13]Ying-Dar Lin,Jose F Rojas,Edward T.-H.Chu,et al.On the Accuracy,Efficiency,and Reusability of Automated Test Oracles for Android Devices[J].IEEE Transactions on Software Engineering,2014,40(10):957-970

[14]Dong H,et al.Malware detection method of android application based on simplification instructions[J].The Journal of China Universities of Posts and Telecommuni cations,2014,21:94-100

[15]Zhao Z,Wang J,Bai J.Malware detection method based on the control-flow construct feature of software[J].IET Inf.Secur.,2013,8(1):18-24

[16]Bartel A,Klein J,Monperrus M,et al.Static Analysis for Extracting Permission Checks of a Large Scale Framework:The Challenges and Solutions for Analyzing Android[J].IEEE Transactions on Software Engineering,2014,40(6):617-632

[17]Enck W,Ongtang M,Mcdaniel P.Understanding Android Security[J].IEEE Security &Privacy Magazine,2009,7(1):50 - 57

[18]Zhang Y,Yang M,Yang Z M,et al.Permission Use Analysis for Vetting Undesirable Behaviors in Android Apps[J].IEEE Transactions on Information Forensics and Security,2014,9(11):1828-1842

[19]Alazab M.Profiling and classifying the behavior of malicious codes[J].Journal of Systems and Software,2015,100:91-102

[20]Elish K O,Shu X K,Yao D,et al.Profiling user-trigger dependence for Android malware detection[J/OL].[2014-12-28].http://www.sciencedirect.com/science/article/pii/S0167404814001631

[21]Enck W,Gilbert P,Chun B G,et al.TaintDroid:An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones[J].ACM Transactions on Computer Systems (TOCS),2014,32(2):1-29

[22]Bläsing T,Batyuk L,Schmidt A D,et al.An Android Application Sandbox System for Suspicious Software Detection[C]//5th International Conf.Malicious and Unwanted Software (Malware 10),ACM,2010,55-62

[23]杨欢,张玉清,胡予濮,等.基于多类特征的Android应用恶意行为检测系统[J].计算机学报,2014(1):15-27

[24]Shabtai A,Moskovitch R,Elovici Y,et al.Detection of malicious code by applying machine learning classifiers on static features:A state-of-the-art survey[J].Information Security Technical Report,2009,14(1):16-29

猜你喜欢
应用程序代码特征
根据方程特征选解法
离散型随机变量的分布列与数字特征
删除Win10中自带的应用程序
不忠诚的四个特征
谷歌禁止加密货币应用程序
创世代码
创世代码
创世代码
创世代码
三星电子将开设应用程序下载商店