基于android应用的恶意行为检测与实现

基于android应用的恶意行为检测与实现

ID:20608184

大小:3.27 MB

页数:81页

时间:2018-10-14

上传者:文档小小白
基于android应用的恶意行为检测与实现_第1页
基于android应用的恶意行为检测与实现_第2页
基于android应用的恶意行为检测与实现_第3页
基于android应用的恶意行为检测与实现_第4页
基于android应用的恶意行为检测与实现_第5页
资源描述:

《基于android应用的恶意行为检测与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

电子科技大学UNIVERSITYOFELECTRONICSCIENCEANDTECHNOLOGYOFCHINA硕士学位论文MASTERDISSERTATION论文题目:基于Android应用的恶意行为检测与实现学科专业:计算机系统结构学号:201521060106作者姓名:章宗美指导教师:罗蕾 分类号密级注1UDC学位论文基于Android应用的恶意行为检测与实现(题名和副题名)章宗美(作者姓名)指导教师罗蕾教授电子科技大学成都(姓名、职称、单位名称)申请学位级别硕士学科专业计算机系统结构提交论文日期2018年3月23日论文答辩日期2018年5月学位授予单位和日期电子科技大学2018年6月答辩委员会主席评阅人注1:注明《国际十进分类法UDC》的类号。 RESEARCHANDIMPLEMENTATIONOFMALICIOUSBEHAVIORDETECTIONINANDROIDAPPLICATIONSAMasterThesisSubmittedtoUniversityofElectronicScienceandTechnologyofChinaDiscipline:ComputerSystemArchitectureAuthor:ZongmeiZhangSupervisor:ProfessorLeiLuoSchool:SchoolofComputerScience&Engineering 摘要摘要Android是Google在2007年发布的开源移动终端操作系统,它兼具开放性以及高效性,广受手机厂商和开发者青睐,现已是市场上占有率最高的移动操作系统。但正是由于Android系统的开放性与受欢迎程度,它成为了恶意应用所攻击的主要对象。当前Android平台下恶意应用程序层出不穷,并且恶意应用躲避现有检测工具的手段也越来越复杂,要求必须寻求一种更高效的Android恶意应用检测技术,使得Android平台下的恶意应用检测可以变得自动化以及智能化。基于以上背景,本文对Android平台的恶意应用检测技术进行深入研究,设计并实现了一个结合静态恶意应用检测技术和动态恶意应用检测技术的Android恶意应用检测系统,在保证自动化、智能化对Android应用程序进行检测的同时,也确保了恶意应用检测的准确率。主要的研究内容以及成果如下:1.提出并实现了一种基于N-gram的静态恶意应用检测模型。该模型通过逆向手段反编译AndroidAPK文件,利用N-gram技术在字节码上提取特征,以此避免传统检测中专家知识的依赖。同时模型使用深度置信网络,能够快速而准确地学习训练。通过对1267个恶意样本和1200个善意样本进行测试,结果显示模型的检测准确率在N-gram长度为7时达到最高,为98.34%;2.设计并实现了一个非侵入式的Android动态恶意检测工具。检测工具不需要对应用程序做任何修改就可以记录下应用程序的运行时行为,同时被检测应用也不会感知到检测工具的存在,消除了恶意应用躲避检测机制的影响;3.设计并实现了一个将静态恶意检测和动态恶意检测相结合的Android恶意检测系统。系统在静态检测阶段利用基于N-gram静态检测和基于敏感API和权限静态检测分别对应用程序进行检测分析,动态检测则对静态检测的结果进一步分析确认,实验结果表明整体的静态检测阶段的误报率为0,并且动态检测分析可以有效地分析静态检测结果不确定的应用样本。关键词:Android安全,Android静态恶意检测、N-gram技术、深度置信网络、Android动态恶意检测I ABSTRACTABSTRACTAndroidisanopen-sourcemobileoperatingsystemreleasedbyGooglein2007.Itisbothopenandefficient,widelyfavoredbymobilephonemanufacturersanddevelopers,andnowhashighestmarketshareinthemobileoperatingsystem.However,duetoitsopennessandpopularityoftheAndroidsystem,Androidoperatingsystemhasbecomethemaintargetofmaliciousapplications.Currently,maliciousapplicationsareconstantlyemergingontheAndroidplatform,meanwhile,andthemeansbywhichmaliciousapplicationsusetoevadeexistingdetectiontoolsarebecomingincreasinglycomplicated.ItisnecessarytoseekamoreefficientdetectiontechnologytoautomaticlyandintelligentlydetectAndroidmaliciousapplication.Basedontheabovebackground,thisarticleconductsin-depthresearchontheAndroidmaliciousapplicationdetection.AlsothisarticledesignsandimplementsanAndroidmaliciousapplicationdetectionsystemthatcombinesstaticmaliciousdetectiontechnologyanddynamicmaliciousdetectiontechnologytoensureautomationandintelligenceforAndroidapplicationdetection.Thesystemensuresboththeaccuracyandefficiencyofmaliciousapplicationdetection.Themainresearchresultsareasfollows:1.AstaticmaliciousapplicationdetectionmodelbasedonN-gramisproposed.ThismodeldecompilestheAndroidAPKfilebyreversingengineering,andusesN-gramtechnologytoextractfeaturesdirectlyfromthebytecodes.ItavoidsthedependenceonexpertknowledgeinAndroidsecurity.Atthesametime,themodelusesadeepbeliefnetworktolearnquicklyandaccurately.Bytesting1267malicioussamplesand1200benignsamples,theresultshowsthattheoveralldetectionaccuracyofthemodelcanreachupto98.34%whenlengthofN-gramequalsto7.2.Designsandimplementsanon-invasivedynamicmaliciousdetectiontoolinAndroidplatform.ThedetectiontoolcanrecordtheruntimebehavioroftheAndroidapplicationwithoutanymodificationoftheapplication.Atthesametime,thedetectedapplicationwillnotperceivethepresenceofthedetectiontoolsothatiteliminatestheinfluenceofmalware’sevasionmachenism.3.DesignsandimplementsanAndroidmaliciousdetectionsystemthatcombinesII ABSTRACTstaticanddynamicmaliciousdetection.Inthestaticdetectionmodule,thesystemusesthestaticdetectionbasedonN-gramandthestaticdetectionbasedonsensitiveAPIsandpermissionstodetectandanalyzetheapplicationrespectively.Thedynamicdetectionperformsfurtherdetectionandanalysisonthestaticdetectionresults.Theexperimentalresultsshowthatnoneofstaticanalysisismisreported,andthedynamicdetectionanalysiscaneffectivelyanalyzetheapplicationswhichstaticanalysismoduleisnotcertainabout.Keywords:Androidsecurity,Androidstaticmaliciousdetection,N-gramtechnology,deepbeliefnetwork,AndroiddynamicmaliciousdetectionIII 目录目录第一章绪论..................................................................................................................11.1研究背景以及意义.........................................................................................11.1.1Android平台的发展现状....................................................................11.1.2Android平台安全分析的意义............................................................31.2国内外研究现状.............................................................................................31.2.1Android系统安全研究现状................................................................31.2.2Android应用程序安全研究现状........................................................41.2.3Android应用潜在安全漏洞检测研究现状........................................61.3研究目标与主要内容.....................................................................................71.3.1研究目标..............................................................................................71.3.2研究的主要内容..................................................................................71.4论文的组织结构.............................................................................................8第二章相关基础知识................................................................................................102.1Android系统知识.........................................................................................102.1.1Android整体架构..............................................................................102.1.2Android四大组件..............................................................................112.1.3Android安装文件APK结构............................................................132.2Android安全机制概述.................................................................................152.2.1Android进程沙箱..............................................................................152.2.2Android权限机制..............................................................................162.2.3Android程序签名..............................................................................162.3Android静态检测技术.................................................................................172.3.1基于数字签名的静态检测技术........................................................172.3.2基于控制流图的恶意检测技术........................................................182.3.3基于行为特征的静态检测................................................................202.4Android动态检测技术.................................................................................212.5本章小结.......................................................................................................22第三章Android恶意检测系统设计.........................................................................233.1系统的设计目标...........................................................................................233.2系统的检测步骤...........................................................................................233.3系统所面向的用户.......................................................................................23IV 目录3.4系统的主要功能...........................................................................................243.5系统总体设计...............................................................................................243.6本章小结.......................................................................................................26第四章Android静态恶意检测.................................................................................274.1基于N-gram的Android静态检测模块.....................................................274.1.1N-gram选取.......................................................................................284.1.2特征集合选取和深度置信网络........................................................324.2基于敏感API和权限的静态检测模块......................................................394.2.1应用权限............................................................................................394.2.2Android框架API...............................................................................394.2.3敏感特征选取....................................................................................414.2.4基于敏感API和应用权限的向量化...............................................434.3本章小结.......................................................................................................44第五章Android动态恶意检测.................................................................................455.1AndroidZygote进程.....................................................................................455.2Xposed原理..................................................................................................475.3利用Xposed实现动态检测工具................................................................495.4本章小结.......................................................................................................53第六章模块测试及系统整体测试............................................................................546.1实验数据收集...............................................................................................546.2模块测试.......................................................................................................546.2.1基于N-gram的静态恶意检测模块测试调优.................................546.2.2基于敏感API和权限的静态恶意检测模块测试...........................586.3动态恶意检测模型测试...............................................................................606.4系统整体测试...............................................................................................626.5本章小结.......................................................................................................64第七章总结与展望....................................................................................................667.1论文总结.......................................................................................................667.2展望...............................................................................................................66致谢..............................................................................................................................67参考文献......................................................................................................................68攻硕期间的研究成果..................................................................................................72V 第一章绪论第一章绪论本章首先介绍Android移动操作系统平台的发展现状以及未来的趋势,与此同时,本章也对Android操作系统在现阶段所面对的安全问题进行了阐述。随后,本章提出了Android平台下恶意检测分析技术的重要性和迫切性,在此基础上,本章节对Android平台下的国内外研究现状进行了分析阐述,将现阶段下各个主流的安全检测分析技术进行了对比,分析其优缺点。最后,本章提出了本文为了解决Android平台下恶意应用泛滥所研究和实现的主要分析技术。1.1研究背景以及意义1.1.1Android平台的发展现状随着近年来我国3G、4G网络等移动互联网基础设施建设的完善,我国的智能设备数量逐年增加,智能手机现今已是人民日常生活的密不可分的一个部分,与此同时,移动终端设备功能也在不断地更新完善,其处理能力已经接近桌面设备,iOS设备目前已经进入了64位处理器的时代。在可见的未来里,移动设备将取代PC终端用于处理大部分的日常工作。根据腾讯大数据《2017年Q1移动App使用情况分析》,2017年第一季度全球网站流量检测机构宣布Android系统已经成为全球第一大操作系统,这是自上世纪90年代以来Windows系统首次被对手所超越[1]。对于国内市场而言,Android系统的用户数量早已经位居第一,仅2016年中国移动端设备的应用下载量高达900亿次。Android操作系统是谷歌为移动终端设备而设计的开源智能操作系统,它是一款开源的操作系统,兼具高效性和开放性,Android系统也因此成为了广大手机厂商和开发者不二的选择,这强有力地推动了Android系统平台的发展,使它迎来了发展的黄金十年。现今,Android平台上的应用数不胜数,从天气、日历这种人们生活必备的工具应用到交易转账等重要的金融应用程序比比皆是,Android平台的应用已经完全可以满足人们日常和工作所需。但是也正是因为Android的开放性和受欢迎程度,Android操作系统平台成为病毒木马的主要攻击目标。根据腾讯大数据2017年度互联网安全报告,2017年手机病毒感染用户量虽然较2016年有所减少,但是被感染的终端设备数量仍然高达1.88亿,并且仅在2017年1月受感染的移动设备数量就达到了2166万,为全年最高纪录[2]。图1-1显示了2017年每月Android平台下感染用户数量。报告还分析了2017年各个病毒类型所占的比重,结果如图1-2所示。其中,流氓行为类病毒数量高居榜首,占据了47.25%的比例,资源消耗类病毒占比为34.77%,位居第一和第二,1 电子科技大学硕士学位论文紧随其后是占比9.65%的隐私获取类的病毒,再接着为分别恶意扣费、诱骗欺诈、远程控制、系统破坏和恶意传播类病毒应用程序。图1-12014-2016上半年新增病毒包总量对比[2]图1-22016年上半年各个手机病毒类型占比分布[2]资源消费类病毒在未经用户授权甚至是用户不知情的情况下,以发送彩信、恶意使用流量等消耗用户资费的恶意手段,给用户造成经济损失。恶意广告推广2 第一章绪论应用就是这一类资源消耗恶意应用程序,一旦下载就会不停地使用流量,导致流量资费增加。恶意扣费和隐私获取类的恶意应用非常类似,它们会在用户不知情的情况下在系统后台窃取用户存储在设备上的身份证信息、银行密码、联系人数据等隐私数据,从而对用户的财产造成严重威胁。流氓行为和远程操作类似,都是对Android系统本身进行攻击,在获取系统的root权限后,远程操控手机,给用户造成不便。从以上的背景分析可以看到Android操作系统平台下的安全分析和恶意应用检测是一个亟待研究的重要课题。1.1.2Android平台安全分析的意义移动智能终端设备渗透到了当代人生活的方方面面,其重要性不言而喻,而Android系统作为最大的移动操作系统平台,针对Android平台下的安全分析和恶意应用防护也因此变得极其重要。传统的恶意软件检测主要依靠专业的技术人员利用专家知识进行分析检测,但是Android平台下与日俱增的恶意应用数量已经超出了人工检测能力可以承受的范围,必须寻求一种更为高效的检测手段,使得Android平台下的恶意应用检测可以变得规范化、自动化以及智能化,从而更好地应对Android平台所面临的安全威胁,促进行业健康发展。现今,机器学习算法、神经网络算法以及深度学习算法等人工智能模型极大地促进了图像识别、自然语言处理等研究方向的进步,如果将人工智能技术应用到恶意应用检测领域,不但可以大幅度提升恶意应用检测的效率,而且对于检测的准确率也可以有很大的帮助。1.2国内外研究现状Android平台下的安全问题主要分为两个大类,系统安全和应用安全[3]。系统安全指的是因Android系统内核漏洞而引发的安全问题,而Android应用安全问题则主要是Android应用程序引起的安全问题,如设备恶意扣费、窃取用户隐私等。除此之外,正常应用程序可能存在的安全漏洞也是当前Android平台下的安全研究热点方向之一,这一类问题的研究重点主要是检测应用程序潜在的隐私数据泄露。1.2.1Android系统安全研究现状Android系统内核主要由Linux内核构成,因而Linux内核中存在的安全漏洞也会同样出现在Android系统中。恶意应用可以利用Android内核漏洞,提升自己的系统权限,甚至是获得超级管理员权限,因此内核漏洞所引起的安全问题通常来说都会对整个系统造成不可挽救的损失。CVE-2012-0056[4]漏洞就是一个3 电子科技大学硕士学位论文恶意应用提升权限的例子,由于Linux对“/proc//mem”文件的权限控制不当,使得应用程序可以改写root权限进程的内存,把自身的权限提升至超级管理员权限,进而执行任意的特权指令。这一漏洞在Android4.0被恶意应用程序用于本地提权。针对Android系统安全漏洞,解决方案之一就是研究并开发出有效的工具以挖掘漏洞,文献[5]将控制流挖掘算法应用于Android系统中,并针对包括Android系统扩展和Yaffs文件系统在内的所有内核代码构建典型漏洞分析脚本,对Android内核漏洞进行有效挖掘和分析。另一个方面,增强Linux内核本身的安全性也可以有效避免系统出现安全问题。文献[6]提出了将SELinux安全机制应用于Android内核中以保证Android内核安全,随后文献[7]按照类似的思路以TOMOYOLinux为安全增强内核开发Android系统以保证内核安全。文献[8]则是完整地实现了基于SELinux的Android系统。文献[6-8]提到的所有增强内核安全的机制都是从文件访问方式出发,将文件访问的权限控制从自主访问控制(DAC)策略转换成到强制访问控制(MAC)策略。DAC访问控制允许文件的拥有者将文件的访问权限授予其他进程,即文件的拥有者对文件有完全的控制权;而MAC访问控制则是系统对进程创建的文件进行统一的权限管理,即使是文件的创建者,在创建文件之后也可能无权访问文件。通过MAC访问控制,可以有效地降低内核漏洞的威胁。1.2.2Android应用程序安全研究现状Android应用安全问题是另一类Android平台下的安全问题[3],这一类安全问题主要是Android应用程序引起的安全问题,如设备恶意扣费、窃取用户隐私等。Android应用所引起的安全问题也是本文所关注和研究的课题。Android动态恶意检测技术和静态恶意检测技术是Android平台下的两类主要安全检测技术[9]。Android动态恶意检测技术首先为应用程序搭建一个运行所需的测试环境,将应用程序运行在该环境下,随后检测应用程序在运行时的行为特征,通过对行为特征的分析,判断出应用程序是否有恶意行为倾向。静态检测技术相对于动态检测技术而言则不需要运行应用,它提取应用程序文件本身的一些静态特征来进行恶意分类检测,较常使用的静态特征有应用的字节码、申请的权限等。动态恶意检测首先需要将待检测的应用运行于测试设备、Android虚拟机等测试沙盒中,监控应用在运行时的行为特征,比如应用的网络访问请求、应用的文件读写操作、应用的IPC消息请求等。一般来说,动态检测技术很大程度上复原了应用程序在真实设备上的所有行为,因此有很高的检测精度,但是其检测环境复杂,且资源消耗大,难以自动化,检测所需的成本较高,并不能很好适用于大规模恶意应用检测。4 第一章绪论静态恶意检测则是利用逆向工程等手段抽取出应用程序文件本身的静态特征,例如应用的所申请的权限信息、应用所调用的Android框架API以及应用的字节码等静态信息,通过对这些特征信息的分析,推断出Android应用在运行时可能会表现出的行为,并以此对应用程序进行恶意分类。静态恶意检测一般来说有两个步骤:特征提取和训练检测。特征提取即利用Android平台下的逆向工程手段,提取出应用的特征信息,利用提取出的特征去表征一个应用;训练检测阶段则是利用模式识别等手段,对用特征信息表进行识别,一般来说,模式识别的常用的手段为利用机器学习算法进行训练识别,首先对已有的恶意样本进行充分训练,随后再将训练模型用于恶意检测。静态检测相比于动态检测而言不需要复杂的运行环境,资源消耗低,效率高,满足自动化的恶意检测需求,但是检测的准确率也相应地会有所降低。基于签名的静态恶意应用检测和基于应用行为特征的静态恶意检测是静态恶意检测的两类主要技术。基于应用签名的静态恶意检测技术是通过提取应用的签名信息,如一段特殊的代码或者是字符串,并在恶意签名库中进行比对测试,从而对应用程序做出判别。Androguard[10]是国外著名的恶意检测工具,它利用应用程序的开发者签名来检测和识别一个应用程序。借助一个庞大的、有效的签名数据库,Androguard可以快速并准确地对应用程序做出判别,但是基于签名的恶意应用检测也有很明显的缺陷,对于一个新的恶意应用,由于签名数据库没有它的签名信息,该方法也就无法识别。基于应用程序行为特征的静态恶意检测则通过提取应用的特征信息,比如应用申请的权限、应用所调用的Android框架API等,用这些静态建立一个恶意检测模型以进行恶意应用分类,该模型能够对未知的恶意应用进行准确的恶意辨别。同时,基于行为的静态恶意检测技术也能避免应用程序代码混淆和加密所带来的干扰。但是静态的基于行为的恶意检测方法必须要选取一个好的分类检测模型,并且需要大量样本不断地训练模型使其准确率达到检测要求。国内外学者在Android静态恶意应用检测技术方面做了大量的研究工作。文献[11]将形式化描述方法作用于Android的Dalvik指令,模型不需要反编译应用程序,而是从Dalvik字节码上直接提取恶意代码特征,但是该模型需要人工分析提取恶意代码片段,检测效率低。文献[12]提出的Android应用检测模型基于基于权限频繁模式挖掘算法,模型计算应用所申请的权限之间的关联性,并以此建立一个权限频繁模式算法模型PAprior来对恶意应用进行检测。文献[13]提出了另外一种建立恶意检测模型的思路,其利用逆向技术反编译Android的APK文件,对得到的smali文件进行分析,提取出Android应用程序所使用的Android敏感函数接口,如短信发送接口、网络请求接口、文件读写接口等。该模型还将5 电子科技大学硕士学位论文所提取的API接口进行分类,以此作为应用的恶意特征集合,并在此基础之上构建一个以深度置信网络模型(DeepBeliefNetwok)[14]为核心的恶意检测模型。文献[15]在应用程序特征提取方面的研究则是结合了文献[12-13]的工作,通过提取Android应用所申请的权限和应用所调用的敏感API,同时再结合应用在运行时的敏感行为信息,用这三类特征信息作为恶意特征集合,并利用深度学习算法构建一个恶意特征检测模型,该方法的优点在于它不仅考虑了应用权限和敏感API这两类静态特征权限,还考虑到了应用运行时的动态行为特征,更加丰富的应用行为特征意味着更高的准确率,但是由于运行时行为特征信息提取的成本高,模型的检测效率会有所降低。前文提到的基于应用行为特征的检测技术都是对单一的Android应用进行检测,它们都忽略了这样一个事实:多个应用组合也有可能表现出恶意行为。文献[16]针对Android平台下多个应用组合而可能出现的权限提升漏洞问题进行了研究,并实现了检测工具COVERT。COVERT利用静态反编译技术提取应用程序相关的安全特征,并将这些安全特征进行联合分析以发现可能存在的安全问题。COVERT优点在于它支持增量式地分析,一个新的应用安装或者应用的卸载后,不需要重新分析,只需对特定应用的特征进行修改即可。1.2.3Android应用潜在安全漏洞检测研究现状一个正常的Android应用也有可能存在安全漏洞,这些安全漏洞并不是Android应用开发者刻意为之,而往往是因为他们使用了第三方程序库导致的。这一类的安全漏洞主要是用户隐私数据的泄漏,第三方程序库可能在开发者不知情的情况下,利用某些技术手段将用户的隐私数据发送到第三方服务器,从而窃取用户隐私。用户隐私窃取现已经是Android用户面临的主要威胁之一。针对隐私数据泄漏漏洞,主要检测手段有动态和静态污点分析技术。动态污点分析即对运行时用户的隐私数据进行追踪,以判断出应用是否窃取了用户隐私,但是由于测试无法覆盖应用所有的行为,漏报率高。静态污点分析则通过分析应用的控制流图以及数据流,判断出隐私数据的可能流向。静态污点分析模型通常来说有很高的代码覆盖率以及较低的漏报率,但是相对动态污点分析来说误报率高。在静态污点数据分析技术方面,文献[17]提出了一个Android平台下的静态污点分析工具LeakMiner,LeakMiner考虑了Android各个组件的生命周期,在此基础上构建了一个能覆盖所有Android回调方法的检测模型,但是由于模型不具备数据上下文敏感性,无法检测出隐式的隐私数据泄漏。文献[18]则提出了一个具备数据上下文敏感性的污点检测模型,但是该模型不具有数据域敏感以及数据对象敏感的特性,如果一个对象的某一个属性存储了污点数据,那么模型就认定整个对象是污点数据,导致污点数据范围扩展,造成检测误差。该模型的检测6 第一章绪论效果较文献[17]虽然有所提升,但是仍然不够理想。FlowDroid[19]所实现的检测模型具有数据上下文、域、对象敏感的特性,它也对Android的所有回调方法和组件的生命周期进行了覆盖,同时模型使用IFDS框架[20]来对污点数据流进行分析,该模型很好地解决了单个Android组件内污点数据传播的分析检测,但是无法检测出组件间的污点数据传播。针对FlowDroid的问题,文献[21]则提出了污点分析工具Epicc,Epicc构建在FlowDroid基础之上,并对其进行了改进优化,能够有效地检测出Android组件之间的污点数据传播。在动态污点数据分析技术方面,文献[22]提出了TaintDroid检测工具,该工具复制了应用程序运行过程中每一个生成的数据对象,并将复制对象作为动态污点数据进行标记,在应用执行的过程中根据污点标记在内存中的数据流流向以追踪污点数据。AppFence则是文献[23]提出的动态污点检测工具,它不仅仅可以检测出可能的隐私数据泄漏,还能阻止隐私数据泄漏。该模型使用数据遮蔽和渗出阻塞技术,将可能会被传递到广域网络的隐私数据替换为影子数据,以此防止隐私数据的泄漏,但是其严格的隐私控制策略也会对Android应用的正常执行造成影响。基于TaintDroid,文献[24]提出了Kynoid工具,Kynoid相比TaintDroid能够更细粒度地分析污点数据传播,用户可以自定义污点数据追踪的策略,对于隐私数据的检测有极大的灵活性,但是功能改进所带来的缺点是检测性能的下降,Kynoid在运行时的内存消耗要远大于TaintDroid,运行速度也低于TaintDroid。1.3研究目标与主要内容1.3.1研究目标本文首要工作是深入理解Android系统及其对应的安全机制,同时对国内外现有的前沿Android安全检测技术进行深入研究,随后在此之上构建本文所研究课题的主要思路。针对Android平台下与日俱增的安全威胁,本文提出并实现了一个Android恶意应用检测系统,该系统能够智能化、自动化地对Android应用程序进行恶意检测。系统包括一个静态检测技术模块,静态恶意应用检测结合深度学习与机器学习算法,能有效检测地检测恶意应用,检测准确率能够达到95%以上,误报率则在2%以下。检测系统还将进一步结合动态检测技术,分析应用在运行时表现出的具体行为,以进一步对应用程序进行检测分析。1.3.2研究的主要内容本文提出并实现了一个Android恶意应用检测系统,系统包括了静态检测和动态检测两类检测技术。静态检测结合深度学习,设计了基于DBN模型[14]的恶7 电子科技大学硕士学位论文意检测模型。动态检测技术方面则是实现了一个非侵入式的动态检测框架,在不对应用程序作任何修改的前提下,利用运行时钩子技术对应用在运行时调用的API进行记录,以此得到应用程序的运行时行为。本文的主要研究内容有:1.深入理解Android系统及其对应的Android机制,深入研究Android平台下前沿的安全检测技术;2.在深入研究Android静态恶意应用检测技术的基础上,提出并实现了基于N-gram的Android静态恶意应用检测模型。该模型通过逆向手段反编译AndroidAPK文件,利用N-gram技术直接在字节码上提取特征,以此避免传统检测中专家知识的依赖。同时模型使用深度置信网络,能够快速而准确地学习训练;3.本文还利用敏感API和权限作为应用程序静态特征,实现了一个基于机器学习算法的Android恶意应用检测模型。本文选取的恶意应用经常使用的敏感特征集合是在对恶意样本源做了大量的分析工作得出的。本文利用两种截然不同的应用特征对应用进行恶意分类,目的是为了降低静态检测的整体误报率;4.研究Android动态检测技术,实现一个非侵入式的动态检测工具,并且能在不被测应用感知的情况下检测应用程序在运行时的敏感行为;5.提出并实现了将Android静态恶意应用检测技术和Android动态恶意检测技术相结合的检测系统,对系统的功能性、正确性进行实验验证。1.4论文的组织结构本文的各章节安排如下:第一章为绪论。对研究课题的背景知识以及Android系统平台的发展现状以及面临的安全威胁进行了简要介绍,对现今前沿的各个恶意检测技术进行分析,对比其优缺点,最后提出了本文研究目标以及主要研究内容第二章是相关基础知识。本章介绍了Android系统的整体架构以及系统对应的安全机制,同时本章节也介绍了Android平台下两类主要的检测技术的基础知识。第三章为Android恶意检测系统设计,从整体上阐述了本文所设计的Android恶意应用检测系统。第四章为Android静态恶意检测。介绍本文所实现的基于N-gram技术的静态恶意检测模块和基于敏感API和权限的静态恶意检测模块。第五章为Android动态恶意检测。介绍本文实现的动态检测工具模块的原理8 第一章绪论以及实现,该模块对应用不具有侵入性,不需要修改应用程序即可对应用的运行时行为进行监控。第六章为模块测试以及系统整体测试。对系统的各个功能模块以及整体的检测效果进行实验验证。第七章为总结与展望,对本文的主要工作以及不足之处进行了总结9 电子科技大学硕士学位论文第二章相关基础知识本章首先介绍了Android系统的整体架构以及各个应用组件,随后本章节概述了Android系统主要的安全机制。最后本章对主流的Android静态恶意应用检测和动态恶意应用检测技术的原理进行了介绍。2.1Android系统知识2.1.1Android整体架构Android的系统结构可以从下到上可以分为四个部分,Linux内核层、Android运行时环境(包括C/C++程序库和Dalvik运行时环境)、Android应用程序框架层和Android应用程序层[25]。图2-1显示了Android的整体系统架构。ApplicationsHomeContactsPhoneBrowser...ApplicationFrameworkActivityWindowContentViewNotificationManagerManagerProvidersSystemManagerPackageTelephonyResourceLocationXMPPManagerManagerManagerManagerServersLibrariesAndroidRuntimeSurfaceMediaSQLiteCoreLibrariesManagerOpenGL|DalvikVirtualFreeTypeWebKitESMachineSGLSSLlibcLinuxKernelDisplayCameraBluetoothM-SystemsBinder(IPC)DriverDriverDriverDriverDriverKeyboardAudioPowerUSBDriverWIFIDriverDriverDriversManagement图2-1Android系统架构图运行在Android系统中的各个应用程序组成了Android应用程序层,应用程序包括随同Andriod系统打包发布的各种核心应用,相册应用、短信管理、邮件应用都是运行在Android应用层的运行程序。现阶段Android平台下的应用程序开发的主力语言仍然是Java,但是谷歌也在积极推动Kotlin语言在Android平台10 第二章相关基础知识下的发展。Android应用程序框架层,是依照程序代码重用机制所设计的各种可重用的开发组件,开发人员对这些已经编写好的程序功能块有全部的访问权限。有了应用程序框架层的功能模块,开发者能够方便快速的替换和实现应用程序各种功能,提高开发效率。主要开发模块有:a)视图(View):视图是可以用来构建程序界面的一系列组件,例如列表视图(ListView)、按钮(Button)、文本框(TextView),以及嵌入式的网页浏览器视图(WebView);b)资源管理器(ResourceManager):应用程序中静态资源的访问均由资源管理器进行管理。应用中的多语言字符串、界面布局以及图片等都是静态的非代码资源;c)通知管理器(NotificationManager):提供状态栏消息通知的管理;d)活动管理器(ActivityManager):活动管理器管理应用程序所使用的应用程序组件(Activity、Service等)的生命周期;e)内容提供器(ContentProvider):利用ContentProvider,应用程序可以访问到其他应用按照特定协议所开放的内部数据。Android系统运行时环境主要分为C/C++的静态程序库模块和Dalvik运行时环境模块。Android系统必须包含C以及C++的静态程序库,为系统正常运行提供底层支持。比如Android系统包含的C语言程序库SQLite,SQLite是一个较为成熟的轻量级嵌入式数据库程序,对数据库的大部分功能进行了支持。Android的Dalvik运行时环境则是专门为Android应用程序优化的Java虚拟机环境,它和Java虚拟机类似,提供了垃圾回收机制、线程管理功能等各个Java程序运行所必须的核心服务。Linux内核层则作为了Android的系统内核层。2.6版本的Linux内核是构建Android内核服务的基础,其内核安全防护、网络协议栈、进程和内存管理均由该版本的Linux内核提供。2.1.2Android四大组件Android系统包含了4个基础的应用组件,它们是构建一个应用程序的核心。四大组件分别为:Activity、Service、ContentProvider、BroadcastReceiver。Activity组件用于展示应用程序的交互界面,监听用户的输入并对此作出响应。Android系统提供了Intent机制让Activity可以相互通信协作。一个Intent由动作(action)以及动作对应的数据组成。动作即通信的协议,比如浏览器中用户点击链接之后就会启动另外一个页面加载对应的网页,这里的动作就是由标签页A跳转到标签页B这一操作所定义的协议,而动作所对应的数据即链接背11 电子科技大学硕士学位论文后的URL。Activity组件具有生命周期,而Android系统利用栈来对生命周期进行管理,一个Activity的生命周期可以划分为4类:a)运行态:Activity处在栈的顶端,此时Activity获得屏幕的焦点,用户能与之进行交互;b)暂停态:虽然用户仍然可以看见Activity,但是它已经不在栈顶,失去了焦点;c)停止态:用户不可见,但在之后可能被重新放回栈顶;d)销毁态:被系统回收销毁,内存中的数据被清除。Activity组件有7个回调函数,用于在其生命周期的各个阶段调用用户定义的逻辑指令。这7个回调函数分别为:a)onCreate:创建组件的回调函数;b)onRestart:如果组件被重新置于栈顶,它就会被调用,之后onStart和onResume回调方法会依次被调用;c)onStart:在组件启动时被调用(第一次启动或者是在停止之后被恢复);d)onResume:在组件启动之后会被调用,此后其获得屏幕焦点;e)onPause:组件即将被调入后台时被调用,组件这时候还没有被销毁;f)onStop:当组件失去焦点时被调用,此后组件不再屏幕上显示;g)onDestroy:销毁组件时调用该回调方法,可以用于一些资源清理回收的动作。由这7个回调函数组成的AndroidActivity的生命周期图如图2-2所示。Service和Activity很类似,但是它们有一个很大的不同点,Service组件对用户不可见,它通常被用于开发常驻后台的应用程序功能。Service在应用程序进入后台后会持续运行,只有当应用程序进程被杀死时,绑定在这个应用进程上的所有Service才会停止运行。例如,应用程序为音乐播放创建一个常驻后台的Service组件,当用户由音乐应用跳转到其他应用时,Service正常运转,用户也才因此能够在听音乐的同时做浏览网页、查看邮件等操作。内容提供器的作用则是开放出应用程序的内部数据,为应用程序间的通信协作提供了可能。ContentProvider相当于一个存储在不同介质上的文件数据的中间代理组件,它将应用程序内部不同的数据类型文件组织起来,为其调用者提供统一的访问接口,极大地方便了开发者的开发流程。但事实上,应用程序往往利用另外一个中间对象ContentResolver来和ContentProvider进行交互。ContentResolver与ContentProvider通信,与其合作来对数据共享会话进行代理。Android通过这样一种机制规范应用程序间数据访问的流程,保证应用程序内部数据的安全。12 第二章相关基础知识ActivitylaunchedonCreate()onStart()onRestart()UsernavigatestotheUserreturnstotheactivityactivityonResume()ActivityAppprocesskilledrunningAnotherActivitycomesAppswithhigherpriorityneedsintotheforegroundmemoryonPause()TheactivityisnolongervisibleonStop()UsernavigatestotheactivityTheactivityisfinishedorbeingdestroyedbythesystemonDestroy()Activityshutdown图2-2AndroidActivity生命周期BroadcastReceiver是应用程序接收广播消息的基础组件。系统全局的电量改变、短信收发消息、连接的网络环境的更改等都是系统全局的广播消息,应用程序也可以定义消息并将其广播。应用程序可以注册对应的BroadcastReceiver接收其感兴趣的广播消息,在其收到广播后,会调用用户自定义的回调方法进行消息处理。2.1.3Android安装文件APK结构Android应用的安装包文件APK(AndroidPackage)是一个zip压缩文件,后缀为apk[26]。如果用zip压缩工具解开安装文件压缩包,可以得到如图2-3所示的结构。APK文件解包META-AndroidManifeAssets目录lib目录res目录class.dexresource.arscINF目录st.xml图2-3Android安装文件APK的目录结构13 电子科技大学硕士学位论文其中,1)assets目录:应用程序非代码静态资源所在的位置。assets目录节点的子树结构没有限定,可以有任意的深度,也正是因为如此,必须使用AssetManager对象来访问此目录下的资源;2)lib目录:存放应用程序运行所必需的Native程序库文件;3)res目录:同样存放应用程序的非代码静态资源文件。不同的是,每一个资源文件都会有对应的资源ID,可以利用资源ID对资源文件进行直接访问;4)META-INF目录:应用的签名文件所在目录。Android应用在发布前都必须进行应用的完整性计算,这些计算结果就是应用的签名文件,主要有CERT.RSA,CERT.DSA,CERT.SF和MANIFEST.MF文件,其中CERT.RSA是利用开发者私钥签名的文件,CERT.DSA和MANIFEST.MF记录来文件的SHA-1哈希值,可以通过这些签名文件信息确保应用的完整性;5)AndroidManifest.xml:AndroidManifestx.xml保存了应用程序的配置信息,比如应用所有的组件信息、申请的权限信息、应用程序名以及程序图标等信息。在打包Android程序时,AndroidManifest文件会被简单编译。编译之后AndroidManifest文件的文件格式为AXML,其文件格式如图2-4所示。其中,a)前4个字节为AXML文件的魔数,取0x00080003;b)紧随其后的4个字节存储文件的长度;c)StringDataSegment保存xml中所有的字符串数据;d)ResourceIDSegment保存xml文件中所有的资源ID;e)XMLContentSegment存放xml的所有数据内容。AXML文件头4bytesAXML文件长度4bytesStringDataSegmentResourceIDSegmentXMLContentSegment图2-4AXML文件格式6)classes.dex文件:保存可执行的Android应用程序的dalvik字节码。Android应用程序的Java代码会先被编译成class文件,class文件内存储的是可以被JVM执行的字节码,这些字节码会被再次转换成Dalvik字节码,这样应用14 第二章相关基础知识程序才可以在特别优化的Dalvik虚拟机下执行,而class.dex则是存储了应用程序Dalvik字节码的文件;7)resource.arsc文件:保存res目录中的资源文件与ID的映射关系。通过读取该文件内的映射关系,可以用R.id.filename的形式访问资源文件。Android应用的安装过程为:APK文件被系统复制到“/data/app”下,之后系统读取APK的签名信息,校验应用程序的完整性。如果是完整的,则再校验dex文件的完整性,如果dex文件没有被篡改过,则利用优化工具优化dex为odex文件并将其置于“/data/dalvik-cache”目录下。最后系统在“/data/data”创建一个存储应用程序内部数据的目录项。2.2Android安全机制概述Android系统从不同的角度设计了安全防护机制,在给予应用程序灵活性的同时保证了系统的安全。从系统架构,Android系统为应用程序提供了沙箱机制,其巧妙地利用Linux内核的用户权限机制,将应用程序运行在独立的进程中,相互之间互不影响。但Android系统也提供了高效的进程间通信机制和独特的内存管理技术,使得移动设备有限的资源被高效地利用。从应用程序的角度看,所有的权限除了必须显示申请之外,还需要用户授予才能访问受限的资源,这种严格的权限管理机制很大程度上规范了应用程序的行为。2.2.1Android进程沙箱Android将Linux中多用户隔离的权限模型应用与多应用程序中,并在此基础之上构建了一个依靠Linux内核的Android沙箱机制,Android沙箱机制如图2-5所示。Android应用程序沙箱Android应用程序沙箱(UIDX)(UIDY)Linux进程空间Linux进程空间(代码、数据、堆栈)(代码、数据、堆栈)应用程序资源文件应用程序资源文件(文件、数据库、网络连(文件、数据库、网络连接、设备资源)接、设备资源)资源所有者UID:X资源所有者UID:Y图2-5Android沙箱机制每一个用户在Linux系统中都由唯一的UID标识,而在Android系统中,一15 电子科技大学硕士学位论文个应用程序被当成了一个用户,即应用程序拥有唯一的UID标识。由此,UID便限制了应用程序的权限和它能访问的资源,同时Linux的进程安全机制保证了不同的进程运行在不同的内存空间,各个应用程序互不干扰。如此一来,一个应用便是运行在了一个操作系统级别下的一个沙箱之中。Android系统还提供了一个ShareUID机制。ShareUID机制是指在相互信任的应用程序在Android系统中拥有相同的UID,它们共享相同的内存空间、代码、数据以及进程资源。通常来说,相互信任的应用程序必须要有相同的开发者签名,并在AndroidManifest文件中指定相同的UID。2.2.2Android权限机制在Android系统中,新安装的应用程序在未经用户授权的情况下不具有任何权限,即默认是不受信任的状态,无法访问受限的设备资源。应用程序如果需要使用这些受限的资源和API,必须显式地申请权限,并在应用第一次启动的时候由用户授权,在运行时由系统进行运行时检查权限,用户在必要的时候还可以撤销所授予的权限。这种定制权限的方式让系统设备安全得到了有效的保证。Android权限防护机制[27]概括如下:1)应用程序显式申请权限。应用程序将需要申请的权限显式定义在AndroidManifest.xml文件中,在第一次启动的时候系统会向用户询问是否赋予应用程序所申请的权限;2)权限由有权限名、权限组以及权限保护级别所构成;3)权限组按照权限功能的进行划分;4)Normal、Dangerous、Signature以及System构成了权限的四个保护等级。每一个保护级别有对应的认证方式,权限如果是Normal级别,那么应用显式申请之后便可使用对应的资源,需要用户授权的权限级别为Dangerous,Signature和System级别的权限则是超级管理员的权限,只有设备制造商等系统用户在出厂时进行设置;5)运行时权限检查。运行时检查保证应用在访问受限资源前必须拥有对应的权限,否则应用程序会因为权限检查出错而停止运行。2.2.3Android程序签名Android系统下的应用程序必须由开发者用私有密钥进行签名,应用的签名信息可以被用于验证应用的完整性,检测应用程序是否被恶意篡改或者被病毒感染[28]。签名信息相同的应用程序是可以相互信任的应用程序,在授予权限后,它们可以访问对方基于签名的进程资源。应用程序签名的加密算法为不对称加密[29],需要私有密钥和公开密钥。应用16 第二章相关基础知识程序商店不允许安装未经签名的应用,但签名的数字证书的权威性并没有任何要求,任何第三方机构,如设备厂商、应用商店甚至开发者自身都可以颁发数字证书,为应用进行签名。Android系统在安装新的应用程序时会对读取签名信息文件进行应用完整性的校验,若签名信息有误,应用程序则无法完成安装流程。系统在应用程序升级时同样会校验签名信息,若前后签名信息不一致,应用程序会作为一个全新的应用安装到系统上,原有的应用程序也不会消失。2.3Android静态检测技术Android静态恶意应用分析技术是利用反编译等逆向工程技术,提取应用的特征信息,并以此判断应用程序是否为恶意应用的检测分析技术[3]。静态分析通常作为一种代码审查手段,保证发布的程序的安全性。主流的静态分析方法有:基于数字签名的静态分析技术、基于控制流图的分析技术以及基于应用静态行为特征的检测分析技术。2.3.1基于数字签名的静态检测技术Android数字签名可以唯一标识一个应用程序。每一个应用必须由开发者利用开发者私钥进行签名,通过应用程序的数字签名可以获悉应用程序开发者的信息,亦可以对应用程序的完整性进行校验。Android采用X.509标准[30]作为其数字证书的标准格式,X.509标准的证书格式如图2-6所示。版本号序列号签名算法ID发行者名称有效期生效时间截止时间主体名称主体公钥信息公钥加密算法主体公钥发行者唯一ID(可选)主体唯一ID(可选)扩展(可选)证书签名(签名算法和签名)图2-6X.509标准的证书格式17 电子科技大学硕士学位论文X.509格式的证书包括:1)版本号:数字证书的版本号,目前有版本1、2以及3这三个版本;2)序列号:证书唯一标识符;3)签名算法ID:标识证书使用的签名算法;4)发行者名称:证书颁发者的标识名;5)有效期:证书的有效期限;6)主体名称:标识证书拥有者,在版本1中必须非空;7)主体公钥信息:数字证书的公钥信息8)发行者唯一ID:证书发行者的唯一标识ID,不在版本1中使用;9)主体唯一ID:证书的唯一ID,不在版本1中使用;10)扩展:RFC5280规定了一系列如何使用证书的扩展,其内容包括在字段内容中;11)证书签名:数字证书对应的签名,包括签名算法和签名。基于数字签名的静态分析工具首先解压AndoridAPK安装包,随后按照X.509标准格式读取数字签名文件进而取得应用程序的数字签名信息,通过比对恶意样本库的数字签名信息进行恶意应用检测。此外,也可将应用程序的数字签名和之前保存的应用程序的数字签名进行比对,若一致,则说明应用程序没有被篡改过。这一检测技术的优点是检测速度快,准确率高,但不适合检测未知应用。2.3.2基于控制流图的恶意检测技术控制流图(ControlFlowGraph)[31]是一个程序执行流程的抽象表示,它是一个有向图,图中每一个节点代表了程序中的一条执行语句或者是一个代码块,每一条边代表程序的执行路径。控制流图示例如图2-7所示。x=y=0;do{y=func(x,y);0x=y=0x=x+1;}while(xtest()Vinvoker-super{p0,p1},L/Super;->superTest()Vmove-objectv0,p0new-instancev1,L/TestClass$1;iput-objectv1,p0,L/MainClass;->test2()V;return-void图4-3Dalvik指令段样例图4-4给出了将Android应用的Dalvik字节码转换成指令序列集合的代码实29 电子科技大学硕士学位论文现。smali_fname是反编译得到的包含Android应用程序字节码的源码文件的文件名,dalvik_opcodes则是包含字节码转换规则的哈希表,图4-4中130行将源码文件按照方法分块,并对每一个方法内的字节码分别进行转换。第135行至148行将方法内的字节码按照上文所述的方式进行剪裁处理,之后在转换表dalvik_opcodes中找到对应的转换序列,将序列添加到opcode_seq末尾,在处理完方法内部全部的字节码之后添加一个换行符,以表明这是一个方法的结束。图4-4Dalvik字节码转换实现在得到转换的序列集合之后,需要对其进行切割。假设采取长度为k来提取N-gram,那么切割的方式即从序列开始处,以步长为1,依次取k个gram。例如,对前文所得到的指令段序列号集合,采用长度为3-gram的方式进行切割,得到的N-gram集合为{6e6f07,6f0722,07225b,225b0e}。对于指令长度为N的N-gram来说,假设Dalvik指令集的指令个数为M,那么不同的N-gram数量理论上限为MN。随着N-gram长度N值的增大,N-gram提取所得的不同的N-gram的数量可能会呈现爆炸式增长,导致样本的特征向量维数太大,训练和匹配阶段计算时间过长,检测效率低下。因此本文首先对1200个正常样本和1267个恶意样本中不同的N-gram数进行了实验,观察不同N-gram的个数是否真的随长度N值的增大而呈爆炸式的增长,统计结果如图4-5所示。随着长度的增大,全体样本中不同的N-gram的个数并没有呈爆炸增长,而是趋于稳定,说明N-gram作为特征不会出现状态空间爆炸问题。这一结果的可能原因是随机组合的指令大多数是无意义的指令,能用于程序执行的指令组合只是占所有指令组合的小部分。另外,为了说明基于N-gram特征的分类检测的有效性,本文分别对恶意样本中不同的N-gram个数、善意样本中不同的N-gram个数以及两种重合的N-gram种类个数进行了统计,统计结果表4-2所示。本文对表4-2的数据进行了处理,30 第四章Android静态恶意检测图4-5不同长度下不同的N-gram数量计算了重合的N-gram数目在善意样本和恶意样本中所占据的比例,处理结果如图4-6所示。从统计结果可以看出,当N-gram长度为2时,重合的种类数在善意应用和恶意应用中都占据很大的比例,这说明N-gram长度在为2的时候不能很好区别恶意和善意应用,但是随着N-gram长度的增加,重合的种类数在善意应用中的比例显著下降,在恶意应用中也快速降低,这说明在长度足够长(大于等于5)时,善意应用只有小部分的N-gram和恶意应用相同,因此N-gram可以作为区分恶意和善意应用的特征。表4-2恶意和善意样本N-gram统计N-gram长度恶意N-gram数善意N-gram数重合N-gram数232654418533169434133009175083431244149694851321181030798531180331567315317892426479744833464685225903176201885561397812343133872626157982345221515269803743710014493118522291086164881195916331564357119069933129430910133090631 电子科技大学硕士学位论文图4-6重合的N-gram比例4.1.2特征集合选取和深度置信网络本文首先提取每一个恶意样本的N-gram集合。在得到所有恶意样本的N-gram集合之后,按照一定规则筛选出作为恶意特征的N-gram集MSet,随后用恶意特征集合向量化样本的N-gram集合,从而得到样本的向量化表示。1)按照频率选取特征集合在对所有的恶意样本进行N-gram提取操作后,本文得到了全部的恶意应用N-gram集合,按照不同的N-gram出现的频率进行排序,选取前k个高频率的N-gram作为特征集合,从而得到恶意应用特征集合为:MSet={m1,m2,…,mk}(4-2)随后本文利用恶意特征集合来向量化一个Android应用样本。向量化的过程为:对于一个应用,首先构造一个k维的向量app_feacture=[0,0,…,0],对于该应用的N-gram集合,如果集合中包含特征集合中的元素mi,那么将向量中下标为i的元素置1,否则置0。于是就可以得到一个维数为k的应用的特征向量。由于特征集合的大小决定了特征向量的维数,维数过小会降低检测准确率,而过大会增加训练和检测的时耗,本文在考虑了准确率和性能之后选取频率在前500的N-gram作为特征集合的大小。2)深度置信网络深度置信网络(DeepBeliefNetwork,DBN)[14]模型目前深度学习网络理论中应用较为广泛的一种模型。DBN由多个限制玻尔兹曼机(RestrictedBoltzmanMachine,RBM)[37]组成,在预学习阶段各个RBM各自无监督地充分训练,而在微调阶段则利用反向传播算法(BackPropagation,BP)[38]微调整个网络。与深度学习算法模型相比,DBN算法能充分挖掘输入向量的特征并且训练速度更32 第四章Android静态恶意检测快,因此本文采取DBN的模型用于训练检测。限制玻尔兹曼机由一层可见单元v和一层隐藏单元h组成,其中同一层的神经元互不连接,可见层中的每一个神经元和隐藏层中的每一个神经元相连。RBM网络模型如图4-7所示。v1v2v3v4h1h2h3图4-7典型的RBM网络在RBM中,Wij用于表示任意两个相连的神经元连接强度,同时每一个神经元自身有一个偏移系数bi(对于可见神经元)和ci(对于隐藏神经元)来表示其自身权重。RBM的所有神经元的状态是取值为{0,1}的二元集合,分别表示未激活与激活状态。由此一来,可以定义一个RBM的能量:𝐸(𝒗,𝒉)=−∑𝑁𝑣𝑏∗𝑣−∑𝑁ℎ𝑐∗ℎ−∑𝑁𝑣∑𝑁ℎ𝑊∗𝑣∗ℎ𝜃𝑖=1𝑖𝑖𝑗=1𝑗𝑗𝑖=1𝑗=1𝑖𝑗𝑖𝑗(4-3)其中vi表示可见神经元的状态,v=(v1,v2,v3,…,vNv)是给定的RBM的输入,hi表示隐藏神经元的状态,h=(h1,h2,…,hNh)表示RBM的输出。利用公式4-3定义的能量函数,可以给出网络状态(v,h)联合概率分布:1−𝐸𝜃(𝒗,𝒉)𝑃𝜃(𝒗,𝒉)=𝑒(4-4)𝑍𝜃其中,𝑍(𝒗,𝒉)=∑𝑒−𝐸𝜃(𝒗,𝒉)(4-5)𝜃𝒗,𝒉称为配分函数(partitionfunction)。如何将RBM的训练结果拟合输入样本是我们真正关心的问题。在RBM中,数据样本v的边缘概率分布用于表示单个输入样本的拟合,于是可以定义以下似然函数用于表示对于某一个样本数据的拟合程度:(𝒗)=∑𝑃(𝒗,𝒉)=1∑𝑒−𝐸𝜃(𝒗,𝒉)𝑃𝜃𝒉𝜃𝒉(4-6)𝑍𝜃基于以上的分析,假定训练样本集合为33 电子科技大学硕士学位论文𝑺={𝒗𝟏,𝒗𝟐,…,𝒗𝒏𝒔}(4-7)其中,n𝒊s表示训练样本的数目,𝒗为某一个训练样本。因为训练样本之间是独立同分布的,所以对全部样本数据的最大拟合就是最大化以下似然函数:𝑛𝑠𝒊lnℒ𝜃,𝑆=∑𝑖=1ln𝑃(𝒗)(4-8)可以利用梯度上升算法[39],通过迭代的方法来逼近最大值,迭代的一般格式为:𝜕lnℒ𝑆𝜃∶=𝜃+𝜂(4-9)𝜕𝜃其中,η>0表示学习率,从公式(4-9)可以知道,计算梯度是关键,即计算出RBM网络关于各个网络参数的偏导数。直接计算梯度值算法复杂度过大,比较常用的计算方法是利用对比散度算法(ContrastiveDivergenceCD)[40]求出各个梯度的近似值。假设v(k)表示执行k步CD算法后所得到的输入层的值,那么有:𝜕ln𝑃(𝒗)(0)(0)(0)(𝑘)(𝑘)(𝑘)≈𝑃(ℎ=1|𝒗)𝑣−𝑃(ℎ=1|𝒗)𝑣(4-10)𝜕𝑊𝑖,𝑗𝑗𝑖𝑗𝑖𝜕ln𝑃(𝒗)(0)(𝑘)≈𝑣−𝑣(4-11)𝜕𝑏𝑖𝑖𝑖𝜕ln𝑃(𝒗)(0)(0)(𝑘)(𝑘)≈𝑃(ℎ=1|𝒗)−𝑃(ℎ=1|𝒗)(4-12)𝜕𝑐𝑗𝑗𝑗k步CD算法(简记为CD-k)的步骤为:对于∀𝒗∈𝑺,取初始值𝒗(𝟎)=𝒗,随后计算k次Gibbs[42]采样,其中第t步(t=1,2,…,k)先后执行以下两次计算:a)利用𝑃(𝒉|𝒗(𝑡−1))采样出𝒉(𝑡−1),用sample_h_given_v表示该过程;b)利用𝑃(𝒗|𝒉(𝑡−1))采样出𝒗(𝑡),用sample_v_given_h表示该过程。一般来说CD-k中k取1就可以取得很好的近似结果。在公式(4-10)、(4-11)与(4-12)中我们需要计算𝑃(ℎ𝑗=1|𝒗)或者是𝑃(𝑣𝑖=1|𝒉),这两个概率值表示一个隐藏神经元或者是一个可见神经元被激活的概率,通过数学推导可以得到在RBM中一个隐藏神经元被激活的概率为:𝑃(ℎ=1|𝒗)=𝜎(𝑐+∑𝑁𝑣𝑊∗𝑣)𝑗𝑗𝑖=1𝑖𝑗𝑖(4-13)其中σ为sigmoid函数。由于RBM的可见层和隐藏层之间是双向连接的,可见层的神经元被激活的概率与隐层神经元类似:𝑃(𝑣=1|𝒉)=𝜎(𝑏+∑𝑁ℎ𝑊∗ℎ)𝑖𝑖𝑗=1𝑖𝑗𝑗(4-14)结合公式(4-10)、(4-11)、(4-12)、(4-13)和(4-14),可以得到关于的各个参数(W、34 第四章Android静态恶意检测b、c)的梯度计算算法CD-k。记一次梯度上升迭代中各个参数的梯度为𝜟𝑾、𝜟𝒃和𝜟𝒄(各个梯度的分量分别为𝛥𝑊𝑖,𝑗、𝛥𝑏𝑖和𝛥𝑐𝑖)。算法CD-k的描述如图4-8所示。另外图4-9和图4-10分别描述了sample_h_given_v函数实现和sample_v_given_h函数实现。对于sample_h_given_v,当给定可见层上的v时,记隐藏层上v𝑣j被激活的概率为𝑝𝑗,容易推导出区间[0,1]上随机产生的数值rj落在子区间[0,𝑝𝑣)的概率也是𝑝𝑣,即这是两个概率上等价的事件,于是可以利用后𝑗𝑗者来模拟前者。即若r𝑣j落在了子区间[0,𝑝𝑗)中,那么就认为hj应该取1,否则取0。同理可以得出sample_v_given_h的函数实现描述。用可见神经元构造出隐藏层神经元,再由隐藏神经元去计算出可见神经元,一直反复迭代就是RBM训练的主要过程。经由充分训练之后,隐藏层的神经元不仅可以较为准确地表示可见层神经元的特征,还可以还原可见层的神经元状态。多个RBM叠加在一起就组合形成了一个DBN,其中,上一个RBM的隐藏层神经元作为下一个RBM的可见层的神经元。在训练时,上一个RBM必须经过充分训练之后才能训练下一个RBM。本文将DBN作为监督学习框架来使用,所以需要在最后一个RBM之后增加一层逻辑回归层网络[41],该层网络对接收最后一个RBM网络的输出,计算得到最后的分类结果。一个典型的DBN网络结构如图4-11所示。微调阶段DBN就是一个多层反向传播网络,由逻辑回归层的计算结果反向微调各层的W,a与b。图4-12给出了本文所实现的DBN网络的构造函数。构造函数主要完成了以下两项任务:a)47行至76行,根据隐藏层数构造DBN网络的sigmoidlayer,然后将上一个sigmoidlayer(或者是输入层)与当前的sigmoidlayer相结合构造一个rbm网络,从而能够利用rbm网络无监督地训练这两个layer之间的网络参数;b)78行至86行,为DBN网络添加一个逻辑回归层logLayer,以计算最后的分类结果,并为logLayer设置损失函数,计算结果误差,从而能够在微调阶段反向传播误差以微调网络。DBN的训练有以下两个阶段:a)预学习阶段:无监督对每一个的RBM网络进行单独训练,确保每一个RBM的网络参数能够尽可能地拟合输入的样本数据;b)反向微调阶段:最后一个RBM网络之后放置一个逻辑回归层网络,接收最后一层RBM的输出,在此阶段整个DBN网络是一个监督学习框架的神经网络。在预学习阶段所有的RBM都经过了充分训练,各个RBM网络层网35 电子科技大学硕士学位论文络参数都各自经过了充分调整,但是RBM网络只能确保网络内部对输入数据达到了最佳的拟合,整体的DBN网络的特征映射没有达到最优的状态。所以此时需要用逻辑回归层网络的计算结果来反向传播错误信息,开始反向微调网络,以此达到整个网络最优。算法CD-k,计算RBM(W,b,c)一次迭代的梯度𝜟𝑾、𝜟𝒃和𝜟𝒄-输入:k,S,RBM(W,b,c),𝜂,其中W,b,c被随机初始化;-输出:𝜟𝑾、𝜟𝒃和𝜟𝒄。Step1:初始化𝜟𝑾=0,𝜟𝒃=𝟎,𝜟𝒄=𝟎;Step2:FORALLvinSDO{v(0)=v;FORt=0,1,…,(k-1)DO{h(t)=sample_h_given_v(v(t),RBM(W,b,c));v(t+1)=sample_v_given_h(h(t),RBM(W,b,c));}FORi=1,2,…,nv;j=1,2,…,nhDO{𝛥𝑊=𝛥𝑊+[𝑃(ℎ(0)=1|𝒗(0))𝑣(0)−𝑃(ℎ(𝑘)=1|𝒗(𝑘))𝑣(𝑘)];𝑖,𝑗𝑖,𝑗𝑗𝑖𝑗𝑖(0)(𝑘)𝛥𝑏𝑖=𝛥𝑏𝑖+[𝑣𝑖−𝑣𝑖];𝛥𝑐=𝛥𝑐+[𝑃(ℎ(0)=1|𝒗(0))−𝑃(ℎ(𝑘)=1|𝒗(𝑘))];𝑗𝑗𝑗𝑗}𝑾=𝑾+𝜂𝜟𝑾;𝒃=𝒃+𝜂𝜟𝒃;𝒄=𝒄+𝜂𝜟𝒄;}图4-8算法CD-k描述36 第四章Android静态恶意检测函数sample_h_given_v:记𝑝𝑣=P(ℎ=1|𝒗),𝑗=1,2,…,𝑛𝑗𝑗ℎFORj=1,2,…,nhDO{1.生成[0,1]上的随机数rj;1,𝑖𝑓𝑟<𝑝𝑣2.ℎ={𝑗𝑗𝑗0,𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒}图4-9函数sample_h_given_v实现描述函数sample_v_given_h:记𝑝ℎ=P(𝑣=1|𝒉),𝑖=1,2,…,𝑛𝑖𝑖𝑣FORi=1,2,…,nvDO{1.生成[0,1]上的随机数ri;1,𝑖𝑓𝑟<𝑝ℎ2.𝑣𝑖={𝑖𝑖0,𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒}图4-10函数sample_v_given_h实现描述LogisticRegressionW3Backpropagation...RBMW2BackpropagationRBM...W1Backpropagation...BackpropagationRBMW0...图4-11典型的DBN模型37 电子科技大学硕士学位论文图4-12DBN网络的构造函数多层反向传播网络一般会有因随机的初始化权值而陷入局部最优或者是网络整体的收敛速度慢的问题,而DBN恰恰是克服了这两个问题。本文的DBN在反向微调时每一层都是sigmoid网络层,DBN的输入为样本的特征向量,即输入的节点数为500,输出节点数为2,表示应用程序是否为恶意应用。同时DBN预学习阶段学习速率为0.05,微调阶段学习速率为0.2。本文研究了不同的隐藏层层次以及对应的节点数对恶意检测的影响,实验检验了结构为[500,100,2]、[500,150,2]、[500,200,2]、[500,150,100,2]、[500,100,100,2]、[500,150,150,2]、[500,150,100,50,2]对恶意检测的影响,其中,数组的第一以及最后的元素表示输入和输出节点层的节点数,其余依次表示隐藏层的节点数。38 第四章Android静态恶意检测4.2基于敏感API和权限的静态检测模块4.2.1应用权限Android安全机制规定在默认情况下应用程序无法访问受保护的资源和调用受限的框架API,比如拨打电话、调用网络接口等。如果应用需要使用特定的权限,就必须在显式地在AndroidManifest文件中进行申请,在应用第一次启动时系统会检测应用程序的权限申请,并询问用户是否授予权限。Android系统在应用运行时同样会进行权限检查,如果应用调用了未授权的设备资源,系统就会强制应用退出。应用所申请的Android系统权限在一定程度上反映了它在运行时的行为模式,对于大多数正常的应用来说,它们只会申请应用所需的权限,而相反的,恶意应用往往存在过度申请权限的情况。本文在研究了大量恶意样本之后定位了一些恶意应用用于窃取用户隐私数据等恶意行为的权限,如表4-3所示。表4-3敏感权限及其功能权限权限功能ACCESS_NETWORK_STATE获取网络设备状态信息ACCESS_WIFI_STATE获取WIFI设备状态信息CALL_PHONE拨话功能权限CHANGE_NETWORK_STATE允许应用修改网络连接状态GET_ACCOUNTS允许应用获取设备中存储的账户信息INTERNET运行应用连接网络INSTALL_PACKAGES允许应用安装另一个应用程序READ_CONTACTS允许应用读取设备的联系人信息READ_LOGS允许应用读取设备日志信息READ_PHONE_STATE允许应用访问设备状态信息READ_SMS允许应用访问设备短息RECEIVE_BOOT_COMPLETED在设备启动后应用会收到通知RESTART_PACKAGES允许应用程序重启其他应用RECEIVE_SMS在设备收到短信后通知应用SEND_SMS允许应用发送短信4.2.2Android框架API运行在Android系统下的应用程序必须调用Android的API,因此应用程序39 电子科技大学硕士学位论文所使用API能够反映出应用程序的运行时行为。例如,应用程序如果调用了DexClassLoader提供的开发接口,则应用程序很有可能会在运行时动态加载应用程序之外的代码文件,进而执行某些恶意行为。本文在分析了大量的恶意样本后,提取出了大量被恶意应用调用的Android框架中的敏感API,这些API按照其获取的资源以及功能可以分为Android框架相关的API和Dalvik虚拟机相关的API两个大类。1)Android框架相关APIa)BroadcastReceiver:应用程序利用BroadcastReceiver接收其他应用程序调用sendBroadcast接口所发送的广播消息。与该类有关的敏感API在表4-4中列出;表4-4BroadcastReceiver有关接口API调用功能AutoSmsReceiver接收设备收到的短信BootReceiver在设备启动后收到通知PhoneCallReceiver在设备通话状态改变时收到通知abortBroadcast停止当前的广播b)PackageManager:PackageManager可以获得安装在设备上的应用程序的包信息,恶意应用可以利用PackageManager扫描设备上是否有恶意检测工具,从而躲避检测;c)SmsManager:短信管理,恶意应用常常利用该类有关的接口发送扣费短信,或者是获取和运行商有关的信息;d)TelephonyManager:TelephonyManager用于获取设备通话的状态信息,相关的敏感接口在表4-5列出;e)ConnectivityManager:ConnectivityManager用于读取当前网络的连接状态信息;f)WifiManager:用于管理设备的WIFI功能,恶意应用常常利用WifiManager的getConnectionInfo方法来获取WIFI的连接信息;g)SupplicantState:当前WPA(wifiprotectedaccess)的supplicant状态信息。2)DVM相关的APIDVM(DalvikVirtualMachine)是Android应用程序运行时不可或缺的运行时环境,而DVM的DexClassLoader这个类对象允许应用程序动态加载外部的.jar40 第四章Android静态恶意检测或者apk文件,恶意应用大量地使用DexClassLoader的loadClass方法动态加载从外部网络下载的恶意应用程序以执行恶意行为。表4-5TelephonyManager有关接口API调用功能getCallState获取设备通话的状态getDataActivity获取通话数据的活动状态getDeviceId获取IMEI或者是MEIDgetLine1Number获取手机号码,对于GSM网络来说就是MSISDNgetNetworkType返回当前数据连接的网络类型getSimOperator获取Sim卡运营商国家代码和运行商网络代码getSimSerialNumber获取Sim卡序列号getSimState返回Sim卡状态信息getSubscriberId返回设备的唯一标识,比如GSM网络的IMSI号4.2.3敏感特征选取在列举了上述权限和API特征之后,本文对全部的敏感特征做进一步的选取。敏感特征选取主要是为了除去相关性较小的权限或者API,相关性较小的权限或者API特征可能会影响机器学习模型的训练效果,比如学习速度过慢、过度学习等,本文利用信息熵来权衡敏感权限和API特征的分类能力。对一个数据集进行分类的最大原则是:通过对无序的数据集进行划分,数据集变得更加有序。组织杂乱无序的数据集的方法通常是应用信息论度量信息,信息论是量化处理信息的分之科学。在信息论中,数据集的信息期望值由熵定义,一个数据集的熵定义为:𝐻=−∑𝑛𝑝(𝑥)𝑙(𝑥)(4-15)𝑖=1𝑖𝑖其中,xi表示某一个分类,对应的𝑝(𝑥𝑖)则表示该类别在数据集中出现的概率,l(xi)表示的是类别xi的信息,定义为:𝑙(𝑥𝑖)=−𝑙𝑜𝑔2𝑝(𝑥𝑖)(4-16)数据集针对某一特征进行分类,分类之前和之后数据集的信息熵的变化定义为信息增益[43],信息增益的数值越高则说明按照此分类所得到的数据集划分效果越显著。根据公式(4-15)和(4-16),可以得到图4-13所示的算法。41 电子科技大学硕士学位论文算法:计算用敏感特征划分数据集所获得的信息增益输入:数据集S={s0,s1,…,sn},特征集合为{x0,x1,…,xt};输出:数据集关于每一个特征的信息增益InfoGain(xi);记𝑝(𝐵)表示类别善意样本在数据集中出现的概率,𝑝(𝑀)表示恶意样本在数据集中出现的概率,𝑙(𝐵)=log𝑝(𝐵),𝑙(𝑀)=log𝑝(𝑀)22BaseEntropy=−𝑝(𝐵)𝑙(𝐵)−𝑝(𝑀)𝑙(𝑀)FORi=1,2,…,tDO{new_entropy=0;num1=thenumberofsamplescontainfeaturexi;num2=thenumberofsamplesdonotcontainfeaturexi𝑛𝑢𝑚1prob1=;𝑛𝑛𝑢𝑚2prob2=;𝑛new_entropy=−𝑝𝑟𝑜𝑏1×𝑙𝑜𝑔𝑝𝑟𝑜𝑏1−𝑝𝑟𝑜𝑏2×𝑙𝑜𝑔𝑝𝑟𝑜𝑏222InfoGain(xi)=BaseEntropy–new_entropy;}图4-13用敏感特征划分数据集所得的信息增益算法本文对GenomeProject[44]的1267个恶意样本进行了分析计算,计算每一个敏感API特征和权限特征所对应的信息增益,选取出的排名前30的特征作为恶意特征集合,结果如表4-6所示。表4-6应用敏感特征选取结果特征排名特征排名getSubscriberId1PhoneCallReceiver16READ_PHONE_STATE2getSimState17READ_SMS3getCallState18getSimSerialNumber4ACCESS_WIFI_STATE19SEND_SMS5BootReceiver20getLine1Number6getSimOperator21sendTextMessage7RECEIVE_BOOT_COMPLETE2242 第四章Android静态恶意检测getDeviceId8INTERNET23getInstalledPackages9getActivityNetwokInfo24RECEIVE_SMS10GET_ACCOUNTS25CALL_PHONE11AutoSmsReceiver26CHANGE_NETWORK_STATE12abortBroadcast27READ_CONTACTS13READ_LOGS28INSTALL_PACKAGES14getNetworkType29getServiceCenterAddress15RESTART_PACKAGES304.2.4基于敏感API和应用权限的向量化本文基于敏感API和应用权限的静态检测模块利用机器算法对应用进行分类训练,因此应用样本必须进行向量化,以特征向量的形式作为机器学习算法的输入。应用向量化的原理和基于N-gram的静态检测技术类似,首先构造一个长度为30的特征向量app_feature=[0,0,…,0],下标i(以1开始)对应的值表示排名为i的特征是否存在于应用样本中。向量化流程图如图4-14所示。AndroidAPKAPKToolAndroidManifest.xmlsmaliMalwarePermissionMalwareAPIScannerfeaturesetScannerfeaturesetFeatureVector图4-14基于敏感API和权限的向量化流程应用程序首先由apktool进行逆向分析,得到应用程序的AndroidManifest以及包含应用程序Dalvik字节码的smali文件,随后调用APIScanner对所有的smali文件进行扫描,如果扫描到了恶意特征集合中的某一个API,那么就将特征向量中对应的下标的元素置为1。这之后,调用PermissionScanner扫描AndroidManifest文件中所申请的权限集合,一个应用程序的权限申请集合示例如图4-15所示。43 电子科技大学硕士学位论文图4-15Android的权限申请定义PermissionScanner只需扫描AndroidManifest文件中的uses-permission标签即可得到应用程序所申请的全部权限信息,如果发现应用所申请的权限包含恶意特征集合中的某一个权限特征,就置对应的下标元素为1。4.3本章小结本章对Android恶意检测系统中的静态恶意应用检测模块的原理以及实现进行了介绍。静态恶意应用检测由基于N-gram的Android静态检测模块以及基于敏感API和权限的静态检测模块两个子模块组成,子模块分别应用截然不同的静态应用特征对应用程序进行检测分析,以期降低静态检测模块的误报率。44 第五章Android动态恶意检测第五章Android动态恶意检测本文利用Xposed框架[45]实现了一个非侵入式的动态检测工具,可以在不对应用程序做任何修改的情况下记录下应用在运行时调用的Android框架API,从而对应用程序进行恶意检测分析。Xposed的实现原理主要是利用root权限替换AndroidZygote进程的代码实现,使得其能够对需要监控的API设置钩子函数。本章首先介绍了Zygote进程的基础知识,随后对Xposed的实现原理进行简要分析,最后介绍如何利用Xposed实现一个非侵入式的动态检测工具。5.1AndroidZygote进程Android系统的应用进程拥有独立的资源,Android独特的沙箱机制将应用进程隔离开来,应用之间只能通过Android系统规定的机制(IPCBinder等)进行通信与资源共享。启动一个应用程序会在系统中创建一个新的进程,该进程在Android系统中则是由Zygote这个进程通过调用fork函数创建出来的。Android内核由Linux改造而来,所以Zygote进程和Linux下的其他进程一样,同样是init进程的子进程,init进程读取init.zygote.rc文件然后fork自身创建了Zygote进程。Zygote进程的启动流程如图5-1所示。app_main.main()AndroidRuntime.start()startVM()startReg()ZygoteInit.main()runSelectLoop()startSystemServer()preload()registerZygoteSocket()图5-1Zygote进程启动流程a)app_main.main函数是文件app_main.cpp中的main函数,这个文件是app_process的实现文件,zygote由app_process启动。main函数的主要工作是解析启动Zygote进程的参数信息,设置进程名,最后将执行流程跳转到AndroidRuntime.start()函数;b)AndroidRuntime.start函数通过调用startVM启动Davilk虚拟机,并调用startReg函数注册JNI(JavaNativeInterface)函数以供Dalvik虚拟机调用。在注册了JNI函数后,start函数通过反射机制调用ZygoteInit类的main函数。在完成了以上操作之后,Android应用程序的Runtime环境就完成了初始化;c)startVM函数主要是在Android系统下即启动Dalvik虚拟机,并对虚拟机的45 电子科技大学硕士学位论文参数进行设置;d)startReg函数则是为上层的Java应用程序注册底层的JNI函数。在Java层,即Dalvik虚拟机内调用底层的Native函数其实是引用了底层C++实现的函数指针,而为了能让上层知道底层的函数地址,就必须将注册对应的JNI函数;e)ZygoteInit.main函数是ZygoteInit类的入口函数,native层通过反射机制调用该方法,在这之后执行流程就转到了Java层。ZygoteInit.main()函数主要工作是为Zygote进程注册socket,将其作为服务端监听创建进程的请求。此外该函数还负责调用preload函数预加载系统的运行时库等资源(如OpenGL类库),启动运行时垃圾回收机制,启动Android系统的system_server进程。最后函数调用runSelectLoop()函数进入休眠等待模式,直到有创建新进程的请求到来;f)registerZygoteSocket函数为Zygote进程注册套接字,以此监听创建进程的请求。在Android系统中,新的进程都是由应用通过startActivity等框架API以BinderIPC消息方式启动。Android系统内部则是将BinderIPC消息发送到system_server进程,system_server在收到应用发来的IPC消息后通过socket将创建进程的请求发送给Zygote进程,Zygote在接收到消息后被唤醒,调用底层的fork函数从而新建一个进程。system_server进程Android系统中提供核心服务的进程,例如应用组件管理、电源管理都是由system_server进程来提供服务。一个进程创建的简要流程如图5-2所示。Android内核继承了Linux内核中子进程的创建方式,即使用copy-on-write技术优化一个子进程的创建流程,只有需要时才会拷贝内存,而进程预加载的类库和资源大多只读内存,由此一来内存的使用便得到了优化。Android进程创建如图5-3所示。发起进程Systemserver进程startActivity、Process.start()startService等IPCBinder方式Socket消息新建进程Zygote进程ActivityThread.main()ZygoteInit.runSelectLoop()图5-2Android进程创建流程46 第五章Android动态恶意检测PreloadedPreloadedResourcesResourcesPreloadedPreloadedclassesCopyonwriteclassesforkingVMVMZygoteZygotelibclibcZygote进程新进程图5-3Android的进程创建机制5.2Xposed原理Xposed是Android平台下的一个开源插件开发框架,它提供了一个插件式的机制,可以做到以非侵入式的方法替换应用所调用的函数接口,同时它也支持在函数调用之前或者是之后插入执行代码,非常适合用于动态检测工具的开发。Xposed主要由两个部分组成:a)用于替换app_process的底层的Xposed框架程序库;b)XposedBridge类库,为上层提供hook机制底层的Xposed框架程序模仿了Android系统原生的app_process的实现,并且加入了许多Xposed框架专有的功能。利用root权限,将Android系统的app_process实现替换为Xposed版本的app_process,那么Android系统利用app_process启动的Zygote进程即为Xposed框架所实现的Zygote进程。Xposed所启动的Zygote与Android原生的Zygote进程主要的不同之处在于在startReg函数内它注册了许多为上层的XposedBridge类库所使用的JNI函数(最主要的是hookMedthodNative)以及在preload函数加载XposedBridge.jar这个类库。hookMethodNative是Xposed底层框架在Dalvik虚拟机中注册的一个最重要的JNI函数,其底层由XposedBridge_hookMethodNative函数实现,具体实现如图5-4所示。XposedBridge_hookMethodNative函数的实现主要分为以下几步:1.通过DVM的函数接口找到目标函数在native层所对应的方法对象。图5-4中代码247行首先得到Java类在native层所对应的对象declaredClass,之后在利用该类对象调用dvmSlotToMethod函数得到方法在native层的对象;2.保存原有的方法对象以及一些钩子信息到XposedHookInfo类对象中,代码实现在260行至263行;3.将方法对象设定为native类型,并将hookedMethodCallback函数设定为方法47 电子科技大学硕士学位论文对象的nativeFunc。代码267行设置method的nativeFunc为hookedMethodCallback,并在268行将method的insns域设置为hookInfo,以保存原有方法对象以及钩子信息。图5-4XposedBridge_hookMethodNative实现Davilk虚拟机在执行字节码时如果发现方法属性为Native,就会调用方法对象的nativeFunc域所指向的函数,由此一来,目标函数的执行就转到了Xposed所实现的hookedMethodCallback函数,该函数调用上层XposedBridge类的handleHookedMethod方法,该方法将上层注册的BeforeHook(前置钩子)函数和AfterHook(后置钩子)依次执行。handleHookedMethod函数的实现如图5-5所示。HandleHookedMethod的执行流程为:1.将目标方法对象以及其他钩子函数信息存入MethodHookParam类的对象param中,代码实现在327行至330行;2.遍历目标方法对象的所有前置钩子函数,调用beforeHookedMethod方法,执行前置钩子函数,代码主要实现在333行至337行;3.调用invokeOriginalMethodNative函数执行目标方法的原始实现,并将结果存入param对象中;4.遍历目标方法对象的所有后置钩子函数,调用afterHookedMethod方法,执行后置钩子函数,代码主要实现在364行以及369行。从handleHookedMethod函数的实现也可以看出,对于同一个目标方法,可以同时注册多个前置钩子函数和后置钩子函数,如何注册钩子函数将在下文Xposed使用时说明。48 第五章Android动态恶意检测图5-5handleHookedMethod实现传统的动态检测方法一般通过反编译APK文件得到smail字节码,利用smali插桩技术修改smali文件,重新打包并运行应用,监控应用程序运行时的行为信息。这种侵入式的方式实现复杂,而且效率低。Xposed则是实现了一个非侵入式的插件机制,通过劫持Zygote进程,改变目标函数的执行流程,从而在目标函数之前或者之后插入执行代码,甚至可以修改目标函数的原本实现,开发者无需关心应用程序的内部实现,只需要向Xposed框架注册钩子函数即可。Xposed替换了app_process的实现,这一操作需要root权限,具有一定的风险性。同时由于Xposed允许替换任何Android框架API,如果注册的钩子函数管理不当,则会影响系统正常运行。5.3利用Xposed实现动态检测工具Android应用的动态检测通过将应用运行在沙盒、虚拟机或者真实的测试设备中,监控应用在运行时的行为并进行分析。运行时行为信息则由应用运行时所调用的API组成,而Xposed框架可以很方便地对应用程序所调用的API进行拦截,因此Xposed框架非常适合于开发动态检测工具。Xposed以模块(module)形式组织插件所注册的钩子函数。所有的模块在设备启动的时候由Xposed调用loadModules函数加载,模块内实现的钩子函数都会被注册。loadModules的执行流程为:a)获取当前所有已经安装的插件应用列表,对每一个插件应用,调用49 电子科技大学硕士学位论文loadModule加载模块;b)loadModule读取assets目录下的xposed_init文件,得到该应用所注册的hook类列表;c)loadModule校验钩子类型是否符合Xposed对应的钩子类型定义,若是,则注册对应的hook函数,否则就打印错误日志。图5-6展示了Xposed所支持的Hook类型的继承关系。所有的Hook类型都继承自IXposedMod类。其中IXposedHookInitPackageResources类用于对资源加载过程设置钩子函数,其子类只要继承IXposedHookInitPackageResources并重载handleInitPackageResource方法即可。IXposedHookZygoteInit类则是对Zygote创建子进程的过程进行hook,子类需要重载initZygote方法。最后IXposedHookLoadPackage是对Android应用的执行过程进行hook,即可以对应用调用的Android系统框架API设置钩子函数,子类同样需要重载handleLoadPackage函数。IXposedModIXposedHookInitPackageResourcesIXposedHookZygoteInitIXposedHookLoadPackage+handleInitPackageResource()+initZygote+handleLoadPackage()对资源进行Hook对Zygote进行Hook对App进行Hook图5-6Xposed所支持的Hook类型的继承关系举例来说,如果需要记录下某一个应用发送的IPCBinder消息,那么插件应用则需要继承IXposedHookLoadPackage类,然后重写其handleLoadPackage方法,实现代码如图5-7所示:1)代码第5行对IXPosedHookLoadPackage类的handleLoadPackage方法进行重载,Xposed在加载插件模块时调用该方法;2)第6行至第8行根据判断当前的应用进程的包名判断是否为被监控的应用所启动的进程,如果不是则直接返回,不对API做任何劫持;3)第9-16行代码调用XposedBridge库所提供的findAndHookMethod为目标函数startActivity、startService(均为系统框架API)添加前置钩子函数,钩子函数仅往日志文件写入一条包含所调用的API名及其参数信息的日志(记录日志的执行代码被省去)。50 第五章Android动态恶意检测图5-7劫持应用代码样例为了监控应用在运行时所有的敏感行为,首先需要确定哪一些行为是需要监控并找到该行为对应的全部的Android框架API。本文在研究了大量的恶意样本之后将以下的应用行为确定为需要监控的行为:a)序列化行为:应用程序将运行时内存数据保存为二进制格式文件;b)加密操作:应用程序将数据调用框架API的加密接口进行加密处理;c)数据库操作:应用程序调用SQLite相关接口对本地数据库进行操作;d)HTTP/HTTPS操作:应用程序向远程服务器发起HTTP请求操作。此外,虽然动态检测工具无法读取HTTPS请求的内容,但是工具可以检测到HTTPS握手阶段的操作请求;e)文件读写:应用程序向SD卡读写文件的操作;f)WebView操作:应用程序利用WebView相关接口进行操作,该类接口可以动态加载外部的JavaScript文件;g)IPC消息:应用程序所接收以及发出的IPC消息;h)其他:包括屏幕截图、剪切板、设备地理位置信息以及设备指纹信息获取操作。这里以IPC消息请求为例,说明如何对特定的行为进行监控。阅读Android开发文档可知,IPC相关的API:startActivities、startActivity、startService、sendBroadcast、registerRecevier。而这些方法由以下两个类对象则由“android.app.Activity”和“android.content.ContextWrapper”调用。利用XposedBridge所提供的findAndHookMethod方法对上述API进行劫持,图5-8列出了所有findAndHookMethod的API调用。从图5-8可以看到,代码对可能出现IPC相关API调用的地方都进行了劫持,这样一来应用程序的所有IPC消息都会被记录下来以便后续分析。方法findAndHookMethod的定义如图5-9所示,方法的第一个参数是要劫持的类,对于IPC消息请求则为“android.app.Activity”或者是“android.content.ContextWrapper”,methodName51 电子科技大学硕士学位论文参数则指定需要hook的类的方法名,parameterTypesAndCallback指定被劫持的方法所使用的参数类型以及相应的钩子回调实现。从图5-8可以看到,所有的钩子函数都是前置钩子函数,即在指定的API调用前调用对应的Hook回调函数。在论文所实现的动态检测工具中,所有的回调实现的功能都在向日志文件写一条有关调用API的记录,包括API的名字及其所使用的参数信息。图5-8IPC行为劫持的示例代码图5-9findAndHookMethod接口定义按照前文所述的监控IPC消息行为的实现思路,本文动态检测工具完成了对52 第五章Android动态恶意检测序列化行为、加密操作、数据库操作、HTTP/HTTPS请求、文件读写、WebView操作、IPC消息、地理位置信息读取、屏幕截图等应用程序运行时敏感行为的监控。5.4本章小结本章介绍了Android恶意检测系统中的动态恶意应用检测模块,对其原理以及实现进行了详细阐述。该动态检测模块对应用程序不具有任何侵入性,可以在不修改应用程序的情况下记录下应用程序的运行时敏感行为,从而对应用程序进行恶意检测分析。53 电子科技大学硕士学位论文第六章模块测试及系统整体测试6.1实验数据收集为了对本文所提出的Android恶意检测系统的有效性进行验证,需要收集Android恶意应用样本以及Android善意应用样本以进行实验测试。本文收集了1267个恶意应用样本,恶意样本来源自GenomeProject[44],恶意样本源包含有49类恶意应用并且每一个应用都经过安全分析人员鉴定,保证样本源只包含恶意样本。对于善意样本,为了减少善意样本源中混有恶意样本的概率,本文从应用审核更加严格的GooglePlay应用市场上抓取了1200个被广泛下载使用的应用。恶意检测系统包含两个静态检测技术子模块,分别为基于N-gram的静态恶意应用检测和基于敏感API和权限的静态静态恶意应用检测,这两个静态检测模块都涉及模型训练和模型测试两个过程,所以本文从恶意样本源和善意样本源中各取90%的应用程序作为训练集合,剩下的全部恶意和善意样本作为测试集合。本章接下来会对本文所设计的各个模块的实验测试进行阐述,最后再对系统整体的运行效果进行实验说明。6.2模块测试本文所设计的Android恶意检测系统共有2个大的功能模块,分别是静态恶意应用检测技术模块和动态恶意应用检测技术模块,其中静态恶意应用检测技术模块又包含基于N-gram的静态恶意应用检测子模块和基于敏感API和权限的静态恶意应用检测子模块。设计两个静态检测子模块的目的是用不同的静态应用特征对应用进行检测分析,以降低静态检测模块整体的误报率。只有两个静态检测模块检测结果不一致时,才会调用动态检测模块对应用进行动态检测,这样一来可以大大降低动态检测的次数,在保证系统检测效率的同时,也使得系统拥有极高的准确率和极低的误报率。6.2.1基于N-gram的静态恶意检测模块测试调优为了验证实验结果的有效性,实验采用了精确率(Precision)、召回率(Recall)、准确率(Accuracy)以及F1参数(F1-score)来评价模型的检测结果。其中,𝑇𝑃𝑃𝑟𝑒𝑐𝑖𝑠𝑜𝑛=(6-1)𝑇𝑃+𝐹𝑃𝑇𝑃𝑅𝑒𝑐𝑎𝑙𝑙=(6-2)𝑇𝑃+𝐹𝑁𝑇𝑃+𝑇𝑁𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦=(6-3)𝑇𝑃+𝑇𝑁+𝐹𝑃+𝐹𝑁54 第六章模块测试及系统整体测试2∗𝑅𝑒𝑐𝑎𝑙𝑙∗𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛𝐹1−𝑠𝑐𝑜𝑟𝑒=(6-4)𝑅𝑒𝑐𝑎𝑙𝑙+𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛a)Precision信息说明了检测模块判断为正常应用的样本中,真正为正常样本的概率;b)Recall则表示全部的正常样本中被模型预测为正常样本的概率;c)Accuracy代表全体样本中被预测正确的样本所占据的比例;d)F1-score说明了预测模型的分类能力的稳定程度。对于基于N-gram的静态检测模型来说,不同的N-gram长度和DBN的层次结构是影响检测效果的两个重要的因素,需要分别设计实验测试。本文的DBN在微调阶段,每一层网络均为sigmoid网络层,DBN的输入为样本向量化之后的特征向量,即输入的节点数为500,输出节点数为2,即是否为恶意应用。同时DBN预学习阶段学习速率为0.05,微调阶段学习速率为0.2。本文研究了在N-gram长度为5时不同的隐藏层层数以及对应的节点数对恶意检测的影响,实验检验了结构为[500,100,2]、[500,150,2]、[500,200,2]、[500,150,100,2]、[500,100,100,2]、[500,150,150,2]、[500,150,100,50,2]对恶意检测的影响,其中,数组的第一以及最后的元素表示输入和输出节点层的节点数,其余依次表示隐藏层的节点数。实验结果如表6-1所示。从数据可以看出隐藏层数的提高,可以使DBN网络学习得更加充分,以此提高检测准确率,但是网络的收敛速度相应地会急速变慢,在隐藏层数为3时,收敛速度已经非常慢了。另外一方面,也需要看到隐藏层数提高也有可能使得网络的检测效果有所下降,表中[500,150,100,50,2]结构的网络的检测效果不如[500,150,100,2]的网络,这可能是因为网络存在过分学习(overfitting)的情况。从表6-1可以看出,在网络结构为[500,150,100,2]时,DBN网络的检测准确率最高,达到了97.8%,同时F1-score也达到了96.15%,说明此时模型检测效果稳定。表6-1不同DBN结构的实验结果网络结构PrecisionRecallAccuracyF1-score[500,100,2]81.74%92.16%91.99%86.64%[500,150,2]83.48%94.12%93.11%88.48%[500,200,2]89.72%94.12%95.31%91.87%[500,150,1002]94.34%98.04%97.80%96.15%[500,100100,2]89.81%95.10%95.59%92.3%[500,150,150,2]88.99%95.10%95.32%91.94%[500,150,100,50,2]89.42%91.18%94.49%90.29%55 电子科技大学硕士学位论文本文在第四章提到N-gram长度为2时,恶意和善意样本重合的N-gram种类数在两者中都占了很大的比例,随着长度的增加,重合的占比在善意样本中占据的比率的减小速度远大于在恶意样本,这在一定程度上说明了N-gram长度达到一定时,恶意和善意样本的N-gram集合有明显的区别。因此本文也对不同N-gram长度对检测效果的影响进行了实验。实验采用了结构为[500,150,100,2]的DBN网路结构,网络预训练阶段的学习速率为0.05,在微调阶段的学习速率为0.2。本文对长度为2到8的N-gram分别进行了实验,各个检测结果图6-1所示。从图6-1中可以看出,在N-gram长度为2时检测的准确率和F1-score都不理想,但随着N-gram长度的增加,检测的准确率和F1-score的值都在增加,这和之前的分析猜测吻合。值得注意的时,当N-gram的长度大于5之后实验各个结果都相近,准确率在长度为7时达到了最大值98.34%,但由于N-gram长度的增加,特征集合提取的资源消耗明显增加。图6-1不同N-gram长度对检测效果的影响在均衡特征处理的资源消耗、DBN学习速度以及检测效果等各方面因素之后,本文选择N-gram长度为5,DBN结构为[500,150,100,2]作为最佳的模型参数。图6-2不同算法模型的检测效果56 第六章模块测试及系统整体测试另外,实验比较了在N-gram长度为5时,DBN网络模型和传统的机器学习算法模型的检测效果。实验中采取的DBN网络结构为[500,150,100,2],预训练阶段的学习速率为0.05,微调阶段的学习速率为0.2。实验比较了KNN[46]算法、DecisionTree[47]算法以及SVM[48]算法同DBN模型进行了比较。结果如图6-2所示。从结果可以看出无论是整体的检测准确率还是F1参数DBN模型的结果都比其他模型更优。最后本文将基于N-gram的静态恶意应用检测模型同近几年国内相关工作所提出的模型进行了对比,结果见表6-2。表6-2相关工作对比检测工具选取特征使用算法测试数据检测效果8000个APK特定类型应基于Dalvik指令的Davilk指令形闵可夫斯基距离(300个恶用可以达到代码特征描述[11]式化特征以及编辑距离意)100%仅能准确预基于K-means的权40个APK申请权限K-means分类测程序的危限检测[49](10个恶意)险程度使用SVM600个APK基于权限和API特权限以及APISVM以及KNN训练分类,(100个恶征结合的检测[50]特征算法可以达到意)90%基于多类特征的组件、系统调3126个APK可以达到Android恶意检测用、函数调用三层混合系算法(1126个恶94.46%的准[51]等意样本)确率字节码预处理2467个APK最高可以达基于N-gram的检之后的N-gramDBN算法模型(1267个恶到98.34%的测特征意)准确率文献[11]提出的工具检测模型可以做到不需要反编译就可以提取Dalvik指令的形式化特征,但是该工具的预处理部分需要人工分析源代码并提取恶意代码片段,检测效率低。该模型针对特定类应用准确率可以达到100%,但是其实验数据少,结果可能存在误差。文献[49]则是利用应用程序的权限特征并结合K-means算法进行分析,如果应用程序过度申请敏感权限,模型就会判定应用是危险的。该模型的优点在于对应用的危险程度进行分级,但无法断定应用是否存在恶意行57 电子科技大学硕士学位论文为,需要人工进行进一步分析,同时模型所使用的测试数据较少,实验结果也不具备很强的说服力。文献[50]将应用程序的API和权限作为整体特征,并比较了KNN算法以及SVM算法的分类结果,使用SVM算法对特征进行分类训练,准确率可以达到90%,KNN则达到了82%。该模型的检测方法无需人工分析应用源码,极大地提高了检测效率,但是选取哪些权限和API作为特征需要Android安全领域知识,不同的特征选取对结果的影响有较大的影响。文献[51]提出的Androdect结合了应用的静态特征以及动态特征,同时利用了大量的测试样本用于测试检测模型,准确率可以达到94.46%,但是由于引入了动态特征,检测效率也有所降低。本文所提出的基于N-gram的检测模型较文献[11]的优点在于不需要人工分析应用程序源码,检测效率高且结果准确,对新的应用也有很好的检测能力。而相较于文献[49-51],本文的模型优点在于不需要Android安全领域的专家知识,减少了人为错误的可能,同时利用DBN模型挖掘应用程序更深层次的特征,在保证了检测准确率的同时也确保了检测效率,在网络结构为[500,150,100,2]时准确率最高可以达到98.34%,高于Androdect的94.46%。6.2.2基于敏感API和权限的静态恶意检测模块测试设置基于敏感API和权限的静态恶意检测这一模块的目的在于利用区别于N-gram所提出取来的静态Android应用特征,对恶意分类结果户进行二次校验。相比较仅利用N-gram特征进行检测而言,两种截然不同的应用特征可以大大降低静态检测的误报率,从而极大地减少动态检测模块的调用次数。虽然增加了静态检测的时间和资源消耗,但仍然可以保证检测整体的效率,确保Android应用的批量化、自动化检测,并且这样设计也可以大大提高系统检测的准确性。基于敏感API和权限的静态恶意检测和基于N-gram的静态恶意检测类似,同样需要从Android应用提取静态特征,区别在于敏感API和权限特征需要Android安全领域知识。本文在4.2节列举了恶意应用常常会使用的敏感API和应用权限,这些敏感、API和权限特征是在大量研究分析了本文所使用的恶意样本源之后得出的。可以看到基于N-gram的技术的优越性在于它并不需要前期的大量分析工作,大大提升了检测效率。为了方便后续的分析检测,本文将应用的反编译解包之后,利用图4-12中的APIScanner和PermissionScanner将应用所包含的全部敏感API和权限特征提取出来,以JSON格式保存到文件中。一个应用所包含的敏感API和权限特征的JSON数据如图6-3所示。perms所对应的数组即应用所申请的全部Android系统权限,可以看到应用申请了ACCESS_PHONE_STATE、SEND_SMS等敏感权限。apis则是应用程序在代码中调用的全部敏感API,在这里,本文使用的APIScanner仅扫描4.2小58 第六章模块测试及系统整体测试节所列举出的敏感API。从图6-3看到,应用调用了getConnection、getSubscriberId、getDeviceId、getActiveNetwork、getActiveNetworkInfo以及sendTextMessage这6个敏感的系统API。perms:[“android.permission.READ_CONTACTS”,“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”.“android.permission.WRITE_EXTERNAL_STORAGE”,“android.permission.INTERNET”,“android.permission.INSTALL_PACKAGES”,“android.permission.BROADCAST_PACKAGE_REMOVED”,“android.permission.WRITE_SETTINGS”,“android.permission.RESTART_PACKAGES”,“android.permission.WRITE_APN_SETTINGS”,“android.permission.ACCESS_FINE_LOCATION”,“android.permission.ACCESS_COARSE_LOCATION”,“android.permission.RECEIVE_BOOT_COMPLETED”,“android.permission.ACCESS_NETWORK_STATE”,“android.permission.SEND_SMS”,“android.permission.RECEIVE_SMS”,“android.permission.READ_SMS”,“android.permission.WRITE_SMS”,“android.permission.MODIFY_PHONE_STATE”],apis:[“getConnection”,“getSubscriberId”,“getDeviceId”,“getActiveNetwork”,“getActiveNetworkInfo”,“sendTextMessage”]图6-3应用所包含的敏感API和权限示例59 电子科技大学硕士学位论文本文并不直接利用4.2节所列举的API和权限来对应用进行向量化,而是对API和权限特征进一步筛选,选取能够明显标识恶意应用的特征集合,利用该特征集合应用进行向量化,以加快机器学习的速度以及检测的准确率。本文利用公式(4-15)和公式(4-16)计算数据集的信息熵以及特征对应的信息增益,并以此判断特征的分类能力,选出分类能力排名在前30的特征作为特征集合,排名前30的特征由表4-5列举。最后,应用按照图4-12所示的流程进行向量化,得到一个维度大小为30的特征向量。本文在这一静态检测模块并不利用DBN模型进行训练检测,虽然DBN可以挖掘到应用深层次的特征信息,但是DBN训练以及检测速度较传统的机器学习慢,为了提升系统整体的检测效率,本文在这一个静态检测模块采用了传统的机器学习模型来对应用进行检测训练。与6.2.1节的实验类似,基于敏感API和权限的检测模型利用公式(6-7)、(6-8)、(6-9)、(6-10)来检验模型的检测效果。同时,为了能够找到一个合适的机器学习算法,本文比较了KNN、DecisionTree、以及SVM等算法模型的测试结果,结果如图6-4所示。可以看到SVM算不论在精确率、准确率、回归率还是F1参数,都高于其他算法模型,故本文使用SVM来作为基于敏感API和权限的算法检测模型。图6-4不同算法模型对基于敏感API和权限的特征的检测结果6.3动态恶意检测模型测试传统的动态检测技术的监控手段首先是反编译APK文件,扫描反编译之后的smali文件代码,在敏感API执行前后插入日志代码,最后将重新打包的APK进行动态检测,该方法效率低且对测试样本具有侵入性。本文则是基于Xposed框架提出了一个非侵入性的动态检测工具,可以在不修改应用源码的情况下对需要监控的敏感API进行动态劫持。60 第六章模块测试及系统整体测试在第五章提到,Xposed替换了Android的Zygote进程实现以劫持所有应用程序的启动流程。在一个测试应用进程启动时,Xposed会对检测工具内指定的每一个敏感API调用hookMethodNative这个Xposed注册的JNI函数,该函数将敏感API的属性改为Native,并设置对应的NativeFunc指向为Xposed自定义的回调函数。此后在Dalvik虚拟机执行到该API时,由于该属性为Native,Dalvik会直接调用NativeFunc所指向的函数。Xposed支持对资源、应用程序以及Zygote相应的API进行劫持,而动态检测工具是对应用运行时行为进行监控,其主要利用Xposed对应用程序调用的API进行劫持的能力。本文利用Xposed框架实现了一个非侵入性的动态检测工具,并对所设计的动态检测工具进行了实验测试,以确保其能正确记录下应用程序运行时敏感行为。实验对数款不同类型的应用程序进行了分析检测实验,以此确保检测工具具有较好的通用性。被检测的应用程序罗列如下:天天快报(新闻类)、WIFI万能钥匙(系统工具类)、腾讯视频(影音播放类)、新浪微博(社交通讯类)、电信营业厅(生活购物类)、ES文件浏览器(文件管理类)、有道云笔记(学习工具类)。本文在尽可能触发每一个应用程序的所有功能情况下,记录下了应用程序的运行时敏感行为。表6-3展示了各个被测试应用程序的运行敏感行为的统计结果。表6-3记录了应用程序每一类行为在动态检测时所发生的次数。表6-3应用程序的动态检测结果行为次数序列化加密操作数据库操作HTTP(S)文件读写WebView操作IPC消息其他应用程序天天快报23416433462545711271165982WIFI万能钥匙13919716113111409847299新浪微博245327176565348176799897872电信营业厅2113586537621281428376672ES文件浏览器1124112865108290839453693有道云笔记90715325746513401350224781腾讯视频128114213934342414608可以看到大部分应用程序的行为主要集中在文件读写和HTTP/HTTPS请求上。图6-5则给出了天天快报的IPC消息行为、文件读写行为以及HTTP(S)行为的日志示例。可以看到该日志中,应用程序一共创建了8个新文件,读写了一次文件,一共有13次IPC消息行为与5次HTTP请求。61 电子科技大学硕士学位论文图6-5天天快报的动态行为日志(部分)6.4系统整体测试本文设计了实验对所设计的Android恶意应用检测系统的整体检测效果进行验证。为了实验结果的真实性以及有效性,本文收集了除GenomeProject项目之外的50个Android恶意应用样本,恶意样本来源于Github网站上的android-malware项目[52],对于正常样本,为了说明恶意检测系统检测效果的普适性,本文从百度移动应用商店上抓取了不同类型且下载量大使用广泛的10类应用程序,每一类包含10个应用程序,共计100个善意应用程序样本,它们分别为:以新浪新闻为代表的新闻类应用程序、以百度贴吧为代表的社交通讯类应用程序、以美拍为代表的摄影类应用程序、以网易严选为代表的购物类应用程序、以万年历为代表的生活实用类应用程序、以墨迹天气为代表的天气类应用程序、以WPSOffice为代表的办公类应用程序、以WIFI万能钥匙为代表的系统工具类应用程序、以去哪儿为代表的旅游出行类应用程序以及百度地图为代表的地图类应用程序。在3.2节中提到,本文所设计的Android恶意检测系统有2个基于应用不同静态特征的静态检测模块,分别为基于N-gram技术的静态恶意检测模块和基于敏感API和权限的静态恶意检测模块。本章在前两节对两个静态检测模块分别进行了实验检测,选取出了模型最佳的检测参数。在本节实验中,基于N-gram的静态检测使用网络结构为[500,150,100,2]的DBN算法模型,预学习阶段的学习速率为0.05,微调阶段学习速率为0.2,设置N-gram长度为5。而基于敏感API和权限的静态检测的采用SVM算法,选取的敏感特征在表4-6列举。同时,62 第六章模块测试及系统整体测试恶意检测系统了利用本文所设计的非侵入式动态检测工具,动态检测工具在运行时记录下5.3节所列举的运行时行为。系统整体的检测结果如表6-4所示。表6-4恶意检测系统的整体检测效果检测结果TP个数TN个数FP个数FN个数静态检测模块基于N-gram的静态检测965004基于敏感API和权限的静态检测924828两个静态检测模块一致的结果924800其中,整体的预测只涵盖了两个静态检测模块结果一致的情况,即有92个样本同时被检测为正样本,有48个样本同时被检测为恶意样本,并且此时没有误报的情况。对静态检测阶段不确定(检测结果不一致)的应用程序,则利用动态检测收集应用运行时的行为日志信息,结合静态检测阶段的分析数据做进一步分析检测。从表6-4可以直到共有10个应用在静态检测阶段检测结果,于是需要利用动态检测工具收集这10个应用程序的运行时行为,以进一步进行分析。这里以新浪新闻(新浪新闻在静态检测阶段检测结果不一致)的动态检测为例,阐述如何对实验数据进行分析。表6-5给出了新浪新闻某一类行为的全部API调用次数以及该类行为中包含的敏感操作次数。表6-5新浪新闻运行时的动态行为信息行为记录结果全部的行为次数敏感的行为次数行为类别序列化操作290加密行为209209数据库操作4590HTTP(S)请求44045WEBVIEW操作8650IPC消息99515其他15480由于检测工具无法识别出加密行为中被加密的内容,所以全部的加密行为均被认为是敏感行为。可以看到除了加密操作以外,新浪新闻的敏感行为有HTTP(S)请求和IPC消息,其中网络请求的敏感行为主要是进行HTTPS握手,但是进行63 电子科技大学硕士学位论文握手的远程服务器是可信的服务器(新浪服务器),而敏感的IPC消息则包括CONNECTIVITY_CHANGE消息、WIFI_STATE_CHANGED消息、PACKAGE_REMOVED消息以及PACKAGE_ADDED消息,可以看到虽然新浪新闻在运行时虽有敏感行为,但是敏感行为数量不多,而且并没有对设备造成过多影响。此外,可以通过分析静态恶意检测阶段的数据,分析出静态检测误判的可能原因。android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATEandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGEandroid.permission.READ_PHONE_STATEandroid.permission.CALL_PHONEandroid.permission.ACCESS_COARSE_LOCATIONandroid.permission.ACCESS_FINEE_LOCATIONandroid.permission.CHANGE_WIFI_STATEandroid.permission.RESTART_PACKAGESandroid.permission.RECEIVE_BOOT_COMPLETEDandroid.permission.MOUNT_UNMOUNT_FILESYSTEMSandroid.permission.READ_LOGSandroid.permission.AUTHENTICATE_ACCOUNTSandroid.permission.GET_ACCOUNTSandroid.permission.WRITE_SMSandroid.permission.READ_SMSandroid.permission.SENSOR_INFO图6-6新浪新闻申请的系统权限信息图6-6给出了新浪新闻所申请的敏感信息集合。通过对静态检测的数据进行分析,可以发现主要是新浪新闻过分申请了权限,导致基于敏感API和权限的静态检测产生了误判。6.5本章小结本章对本文所设计的Android恶意检测系统的各个模块以及总体的检测效果64 第六章模块测试及系统整体测试进行了实验测试,实验表明该系统能有效地对应用程序进行恶意检测分析,在保证了自动化检测的同时也保证了检测的准确率。65 电子科技大学硕士学位论文第七章总结与展望7.1论文总结移动互联网的到来使得移动智能设备成为人们生活必不可缺的部分,移动智能设备的功能日趋完善,处理性能越来越高,已经完全胜任大部分的日常功能。而另一方面,由于Android操作系统的开放性和受欢迎程度,Android平台下恶意应用程序也越发肆虐,如何高效地应对日益增长的恶意应用数量对Android平台的威胁也成了一个迫在眉睫的研究课题。基于以上背景,本文提出了一个能够在保证自动化、智能化检测恶意应用的同时,也确保了检测准确率的Android恶意检测系统。本文所做的工作包括以下几个部分:1.研究Android系统以及安全机制,对国内外现有的动态恶意应用检测以及静态恶意应用检测技术进行深入研究,分析其优点与不足;2.对静态恶意应用检测进行深入研究,提出并实现了基于应用N-gram特征的静态恶意检测模型,模型结合深度置信网络,能够快速而准确地学习训练。通过对1267个恶意样本和1200个善意样本进行测试,结果显示模型的检测整体准确率最高可以达到98.34%。另外本文也将敏感API和权限作为应用特征,结合机器学习算法对应用进行了静态恶意检测;3.深入理解Android动态恶意应用检测技术,实现了一个基于Xposed的动态检测工具。检测工具和一般的基于smali插桩的动态检测技术不同,不需要对应用程序做任何更改就可以检测应用在运行时的行为;4.利用大量的恶意和善意样本训练本文所设计和实现两个静态检测模块,验证所实现模型的有效性。同时,将静态恶意应用检测和动态恶意应用检测相结合,提出了一个在Android恶意检测系统。7.2展望在未来,本文还将对以下几类问题进一步研究和完善:1.本文所提出的静态恶意检测以及动态恶意检测只能对单个应用是否为恶意应用,但是多个应用组合同样可以表现出恶意行为,未来需要这方面做深入研究;2.正常的应用程序也可能会存在恶意行为,比如应用程序的第三方库在开发者未知的情况下在后台窃取用户隐私数据,如何检测出应用潜在的恶意行为也是一个需要研究的课题;3.收集更多的恶意和善意样本,加强对静态恶意应用检测模型的训练。66 致谢致谢时光总是匆匆,转眼间三年电子科技大学的学习生涯就要走到尽头,在旅途结束之际,我想对所有关心过我、帮助过我的人表达内心的感谢。首先我要感谢我的家人,他们至始至终在背后默默地支持、鼓励着我,无论是对我的生活还是学业都无微不至的关怀,是他们的支持让我在知识的道路上披荆斩棘,一路走到了现在。其次我要感谢我的导师罗蕾老师,她给我指引了研究生期间学习与研究的方向,让我在Android安全领域有所成就。同时,我要感谢桂盛霖老师,桂老师一直论文课题研究期间给我指导,帮助我解决课题研究中关键的问题。我还想感谢我同实验室的同学们,我的研究生学习生涯因为有你们才有难以磨灭的青春记忆。最后感谢各位评审老师对我的论文进行认真评审和批评指正。67 电子科技大学硕士学位论文参考文献[1]2017年Q1季移动App使用情况分析[OL].http://djt.qq.com/article/view/1553[2]腾讯安全2017年上半年度互联网安全[OL].https://slab.qq.com/news/authority/1632.html[3]张玉清,王凯,杨欢,方喆君,王志强,曹琛.Android安全综述[J].计算机研究与发展,2014,51(07):1385-1396.[4]CVE-2012-0056[OL].https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-0056[5]LiuJ,SunK,WangS.VulnerabilityanalysisoftheAndroidoperatingsystemcodebasedoncontrolflowmining[J].JournalofTsinghuaUniversityScienceandTechnology,2012,52(10):1335-1339.[6]ShabtaiA,FledelY,EloviciY.SecuringAndroid-poweredmobiledevicesusingSELinux[J].IEEESecurity&Privacy,2010,8(3):36-44.[7]BugielS,DaviL,DmitrienkoA,etal.Practicalandlightweightdomainisolationonandroid[C].Proceedingsofthe1stACMworkshoponSecurityandprivacyinsmartphonesandmobiledevices.ACM,2011:51-62.[8]SmalleyS,CraigR.SecurityEnhanced(SE)Android:BringingFlexibleMACtoAndroid[C].NDSS.2013,310:20-38.[9]卿斯汉.Android安全研究进展[J].软件学报,2016,27(01):45-71.[10]LiL,BissyandéTF,KleinJ.Simidroid:Identifyingandexplainingsimilaritiesinandroidapps[C].Trustcom/BigDataSE/ICESS,2017IEEE.IEEE,2017:136-143.[11]李挺,董航,袁春阳,杜跃进,徐国爱.基于Dalvik指令的Android恶意代码特征描述及验证[J].计算机研究与发展,2014,51(07):1458-1466.[12]杨欢,张玉清,胡予濮,刘奇旭.基于权限频繁模式挖掘算法的Android恶意应用检测方法[J].通信学报,2013,34(S1):106-115.[13]HouS,SaasA,YeY,etal.Droiddelver:Anandroidmalwaredetectionsystemusingdeepbeliefnetworkbasedonapicallblocks[C].InternationalConferenceonWeb-AgeInformationManagement.Springer,Cham,2016:54-66.[14]HintonGE,OsinderoS,TehYW.Afastlearningalgorithmfordeepbeliefnets[J].Neuralcomputation,2006,18(7):1527-1554.[15]YuanZ,LuY,XueY.Droiddetector:androidmalwarecharacterizationanddetectionusingdeeplearning[J].TsinghuaScienceandTechnology,2016,21(1):114-123.[16]BagheriH,SadeghiA,GarciaJ,etal.Covert:Compositionalanalysisofandroidinter-apppermissionleakage[J].IEEEtransactionsonSoftwareEngineering,2015,41(9):866-886.68 参考文献[17]YangZ,YangM.Leakminer:Detectinformationleakageonandroidwithstatictaintanalysis[C].SoftwareEngineering(WCSE),2012ThirdWorldCongresson.IEEE,2012:101-104.[18]GiblerC,CrussellJ,EricksonJ,etal.AndroidLeaks:automaticallydetectingpotentialprivacyleaksinandroidapplicationsonalargescale[C].InternationalConferenceonTrustandTrustworthyComputing.Springer,Berlin,Heidelberg,2012:291-307.[19]ArztS,RasthoferS,FritzC,etal.Flowdroid:Precisecontext,flow,field,object-sensitiveandlifecycle-awaretaintanalysisforandroidapps[J].AcmSigplanNotices,2014,49(6):259-269.[20]BoddenE.Inter-proceduraldata-flowanalysiswithifds/ideandsoot[C].ProceedingsoftheACMSIGPLANInternationalWorkshoponStateoftheArtinJavaProgramanalysis.ACM,2012:3-8.[21]OcteauD,McDanielP,JhaS,etal.Effectiveinter-componentcommunicationmappinginandroidwithepicc:Anessentialsteptowardsholisticsecurityanalysis[J].EffectiveInter-ComponentCommunicationMappinginAndroidwithEpicc:AnEssentialStepTowardsHolisticSecurityAnalysis,2013.[22]EnckW,GilbertP,HanS,etal.TaintDroid:aninformation-flowtrackingsystemforrealtimeprivacymonitoringonsmartphones[J].ACMTransactionsonComputerSystems(TOCS),2014,32(2):5.[23]HornyackP,HanS,JungJ,etal.Thesearen'tthedroidsyou'relookingfor:retrofittingandroidtoprotectdatafromimperiousapplications[C].Proceedingsofthe18thACMconferenceonComputerandcommunicationssecurity.ACM,2011:639-652.[24]SchrecklingD,KöstlerJ,SchaffM.Kynoid:real-timeenforcementoffine-grained,user-defined,anddata-centricsecuritypoliciesforandroid[J].informationsecuritytechnicalreport,2013,17(3):71-80.[25]WangC,DuanW,MaJ,etal.TheresearchofAndroidSystemarchitectureandapplicationprogramming[C].ComputerScienceandNetworkTechnology(ICCSNT),2011InternationalConferenceon.IEEE,2011,2:785-790.[26]FarukiP,BharmalA,LaxmiV,etal.Androidsecurity:asurveyofissues,malwarepenetration,anddefenses[J].IEEEcommunicationssurveys&tutorials,2015,17(2):998-1022.[27]FangZ,HanW,LiY.PermissionbasedAndroidsecurity:Issuesandcountermeasures[J].computers&security,2014,43:205-218.[28]FarukiP,BharmalA,LaxmiV,etal.Androidsecurity:asurveyofissues,malware69 电子科技大学硕士学位论文penetration,anddefenses[J].IEEEcommunicationssurveys&tutorials,2015,17(2):998-1022.[29]TripathiR,AgrawalS.Comparativestudyofsymmetricandasymmetriccryptographytechniques[J].InternationalJournalofAdvanceFoundationandResearchinComputer(IJAFRC),2014,1(6):68-76.[30]HousleyR,PolkW,FordW,etal.InternetX.509publickeyinfrastructurecertificateandcertificaterevocationlist(CRL)profile[R].2002.[31]YangS,YanD,WuH,etal.Staticcontrol-flowanalysisofuser-drivencallbacksinAndroidapplications[C].SoftwareEngineering(ICSE),2015IEEE/ACM37thIEEEInternationalConferenceon.IEEE,2015,1:89-99.[32]LiaoY,LiJ,LiB,etal.AutomatedDetectionandClassificationforPackedAndroidApplications[C].MobileServices(MS),2016IEEEInternationalConferenceon.IEEE,2016:200-203.[33]ChenQA,QianZ,MaoZM.PeekingintoYourAppwithoutActuallySeeingIt:UIStateInferenceandNovelAndroidAttacks[C].USENIXSecuritySymposium.2014:1037-1052.[34]CavnarWB,TrenkleJM.N-gram-basedtextcategorization[J].Annarbormi,1994,48113(2):161-175.[35]AndrieuC,DeFreitasN,DoucetA,etal.AnintroductiontoMCMCformachinelearning[J].Machinelearning,2003,50(1-2):5-43.[36]ZhangX,BreitingerF,BaggiliI.RapidAndroidParserforInvestigatingDEXfiles(RAPID)[J].DigitalInvestigation,2016,17:28-39.[37]HintonG.ApracticalguidetotrainingrestrictedBoltzmannmachines[J].Momentum,2010,9(1):926.[38]WangL,ZengY,ChenT.Backpropagationneuralnetworkwithadaptivedifferentialevolutionalgorithmfortimeseriesforecasting[J].ExpertSystemswithApplications,2015,42(2):855-863.[39]KhanejaN,ReissT,KehletC,etal.Optimalcontrolofcoupledspindynamics:designofNMRpulsesequencesbygradientascentalgorithms[J].Journalofmagneticresonance,2005,172(2):296-305.[40]HintonGE.Trainingproductsofexpertsbyminimizingcontrastivedivergence[J].Neuralcomputation,2002,14(8):1771-1800.[41]WittenIH,FrankE,HallMA,etal.DataMining:Practicalmachinelearningtoolsandtechniques[M].MorganKaufmann,2016.[42]ChopinN,SinghSS.OnparticleGibbssampling[J].Bernoulli,2015,21(3):1855-1883.70 参考文献[43]JinL,GongW,FuW,etal.Atextclassifierofenglishmoviereviewsbasedoninformationgain[C].AppliedComputingandInformationTechnology/2ndInternationalConferenceonComputationalScienceandIntelligence(ACIT-CSI),20153rdInternationalConferenceon.IEEE,2015:454-457.[44]ZhouY,JiangX.Dissectingandroidmalware:Characterizationandevolution[C].SecurityandPrivacy(SP),2012IEEESymposiumon.IEEE,2012:95-109.[45]Xposed框架[OL].https://github.com/rovo89/Xposed[46]刘晓明.基于KNN算法的Android应用异常检测技术研究[D].北京交通大学,2016.[47]BarrosRC,BasgaluppMP,AndréC.P.L.F.deCarvalho,etal.ASurveyofEvolutionaryAlgorithmsforDecision-TreeInduction[J].IEEETransactionsonSystemsMan&CyberneticsPartC,2012,42(3):291-312.[48]GuB,ShengVS,TayKY,etal.IncrementalSupportVectorLearningforOrdinalRegression[J].IEEETransactionsonNeuralNetworks&LearningSystems,2015,26(7):1403.[49]侯苏,杜彦辉,芦天亮,郭靖.基于K-means算法的Android权限检测机制研究[J/OL].计算机应用研究,2018(04)[2018-02-22].http://kns.cnki.net/kcms/detail/51.1196.TP.20170401.1739.088.html.[50]邵舒迪,虞慧群,范贵生.基于权限和API特征结合的Android恶意软件检测方法[J].计算机科学,2017,44(04):135-139.[51]杨欢,张玉清,胡予濮,刘奇旭.基于多类特征的Android应用恶意行为检测系统[J].计算机学报,2014,37(01):15-27.[52]Android-malwareproject[OL].https://github.com/ashishb/android-malware71 电子科技大学硕士学位论文攻硕期间的研究成果获奖情况:[1]2015年9月,研究生入学一等奖学金[2]2016年10月,研究生学业二等奖学金研究成果:[1]章宗美,桂盛霖,任飞.基于N-gram的Android恶意检测[J].计算机科学,2018,3月,已录用.72

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭