基于程序分析的应用程序恶意行为检测_第1页
基于程序分析的应用程序恶意行为检测_第2页
基于程序分析的应用程序恶意行为检测_第3页
基于程序分析的应用程序恶意行为检测_第4页
基于程序分析的应用程序恶意行为检测_第5页
已阅读5页,还剩1页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于程序分析的应用程序恶意行为检测

1基于程序分析的恶意行为检测近年来,移动互联网的快速发展导致了智能设备的需求和日益增长。根据Gartner提供的数据,智能终端数量在2011年第三季度已达1.49亿丰富的智能终端应用程序也是智能终端流行的一大原因。为了便于应用程序开发者发布应用程序和用户下载安装应用程序,出现了很多应用程序商店,其中最著名的两个应用程序商店为Google的AndroidPlayPiOS针对使用Android系统提供的内部机制所开发的恶意应用程序,本文提出一种基于程序分析的方法,对未知的应用程序进行恶意行为检测,进而分析应用程序的安全性。通过对应用程序在不同粒度上的模拟执行,对应用程序进行分析。在指令级别上的模拟执行计算函数摘要,针对不同的函数设计原子函数摘要和组合函数摘要来满足分析需要。在函数级别上的模拟执行进行应用程序的恶意行为检测,通过恶意行为检测完成对应用程序的安全性评估。2设计了众多的机制,引起研究利用。在现代管理Android系统为了简化应用程序的开发以及各种软硬件资源和权限的管理,设计了很多的机制,例如广播与监听机制、服务机制等等。从开发和管理的角度上说,这些机制的确使开发和管理变得简单;但是,从用户安全的角度上说,这些机制却将使用应用程序的用户暴露于极大的安全隐患之中。2.1广播监听器的使用在Android系统中存在各种各样的广播,比如电池的使用状态的改变、电话的接听和短信的接收都会产生一个广播,应用程序开发者可以监听这些广播并做出相应的处理。应用程序在安装时便会向Android系统注册所使用的广播监听器,Android系统接收到广播时便通知注册了该广播的应用程序执行相应的广播监听器。恶意应用开发者可以在开发的应用程序中注册比较常用的广播监听器,比如电话和短信的广播,当监听到Android系统发送这类广播时,就可以在广播处理事件中做一些有害于用户的行为,例如获取用户的通讯录信息,并通过网络发送出去。使用这种方法的应用程序的恶意行为比较隐蔽,只有在监听到特定广播才会触发,而此时已对用户造成了损失。2.2本地服务(actity)服务是不可见的,主要是在后台运行。服务机制一般用于支持比较耗时或者长时间运行的操作。服务分为两种:本地服务和远程服务。本地服务一般用于应用程序内部一些耗时的任务,比如查询升级信息等,并不占用应用程序比如Activity服务可以提供很多方式供恶意应用程序开发者开发恶意应用。例如,一个恶意应用程序在运行时并不需要任何与外界交互的权限,比如发送短信或访问网络的权限,而只要通过一个具有以上权限的服务,就可以将非法收集到的用户隐私信息发送出去。2.3)基于高效的id系统在Android系统中主要存在三种本地代码:shell命令、本地库文件(.SO)以及字节码文件(.JAR和.DEX)。Android系统为shell命令提供了exec接口;为将本地库加载到当前应用程序内存中提供了load和loadLibrary两个接口,本地库文件可以使用NDK(NativeDevelopmentKit)本地代码的执行具有极大的灵活性,且方式多样。应用程序开发者可以在发布应用程序时,不将存在恶意代码的文件放入安装文件中,而是在用户使用时再将这些代码文件从网络上下载,这加大了对应用程序进行检测分析的难度。3函数调用图构建针对上述Android系统提供的机制存在的安全问题,本文给出了一种恶意行为的检测方法。本方法不需要安装应用程序,直接在PC上对应用程序的字节码文件进行静态分析,主要包括如下四个步骤:程序结构恢复、函数调用图重构、函数摘要构建以及恶意行为检测,如图1所示。程序结构恢复是在内存中对当前应用程序中类的结构的恢复,恢复的结构信息主要包括类的继承关系、类中的属性以及类中的方法等;函数调用图重构是针对Android系统以消息为驱动方式以及使用面向对象的Java编程语言设计的,完成函数调用的唯一性确定以及控件消息处理事件的调用,重构出近似于函数运行时的调用图;函数摘要构建是结合恢复的程序结构和重构的函数调用图,对函数中字节码指令进行模拟执行,求解出函数的输入与输出之间的语义逻辑关系;恶意行为检测通过在已计算出的函数摘要信息上使用静态污点传播算法,检测函数调用路径上的恶意行为。Android应用程序主要使用Java语言开发。Java是一种面向对象的语言,存在大量的类和对象。但是,与一般的Java程序相比,Android应用程序不存在主入口函数main,例如存在界面的Android应用程序的主入口函数一般是一个Activity组件的onCreate函数,该信息可以从AndroidManifest.xml文件中获取。AndroidManifest.xml文件中定义了本应用程序需使用的Activity组件、Service组件、Receiver组件以及所需要的权限列表等。这些组件的启动函数都可以作为分析的入口。在Android系统中,应用程序的运行是以消息为驱动的。在对应用程序进行分析检测的时候,对于应用程序分析过程中存在消息响应的控件,在该控件对象生成时,就对该控件的消息处理事件进行分析。因为大部分的事件是与用户交互形成的,而这些控件对象初始化之后,就已经具备了完成相应消息处理事件所必须的信息。3.1)对方法名和属性名进行反汇分析Android应用程序一般是用Java语言开发的,存在着大量的类和对象。在对函数进行分析的过程中,需要确定被调用函数以及属性的归属,这些都需要程序结构的支撑。结构的恢复需要依赖应用程序安装包中的.DEX文件。对该文件进行反汇编,目前已有很多可以使用的Dalvik字节码的反汇编工具,例如baksmali类中的方法和属性的恢复是通过对方法名和属性名进行解析完成的。IDAPro对方法名和属性名反汇编出的命名是规则的。方法名一般格式为:包名$类名$内部类名.函数名@返回值及形参列表类型。返回值及形参列表的类型一般用一个字母表示一种类型,例如void用V表示。属性名一般格式为:包名$类名$类部类名_属性名。根据这些命名规则,可以解析出方法和属性的类名,再根据解析出的类名将这些方法和属性划分到各自原本的类中。默认情况下,所有类的父类为Object类,而构建类的继承关系,主要是构建类直接继承过来的父类。直接继承的父类需要通过分析特定的指令获取,Dalvik字节码中有两个指令(INVOKE_SU-PER和INVOKE_SUPER_RANGE)指定调用父类中同名的函数,从而可以分析出该函数所在类的父类。Dalvik字节码指令是通过INVOKE_XXX指令进行函数调用的,可以根据这类指令信息构建出整个应用程序的函数调用图。3.2)android应用程序组件Android系统中存在组件的生命周期、消息的驱动以及类的继承等,使得“程序结构恢复”阶段构建函数时得出的函数调用图不完整或存在错误,因此必须进行修复和重构。Android应用程序由Activity、Service以及Receiver等组件组成,这些组件是Android应用程序所特有的,每个组件各有一个完整的生命周期,不同组件的生命周期差别很大,在整个生命周期使用的函数都是由系统进行调用的,它们在函数调用图中是没有前驱节点的,在系统实际运行中遵循一定的调用顺序,该调用顺序可以从Android应用程序开发文档中获取。以ActivityAndroid应用程序存在大量的控件,例如按钮、输入框等。控件的事件处理函数是由Android系统确定调用的,在对应用程序进行分析的过程中需要适当地调用这些函数。例如,按钮控件有个点击事件,即onClick事件,当用户点击按钮时才会触发,而在静态分析过程中不存在与用户的交互,可以根据前述方法,将点击事件处理函数在按钮初始化。3.3数调用函数函数摘要是对函数的一种抽象解释。Android应用程序中存在类的继承、接口的实现等面向对象编程特征,基于这些特征可以将函数的摘要分为两类,即原子函数摘要和组合函数摘要。定义1原子函数摘要:所摘要的函数不存在子函数调用,或者虽然存在子函数调用,但这些子函数调用都是可以唯一确定的。定义2组合函数摘要:所摘要的函数存在子函数调用,且至少有一个子函数调用在该函数体内不能唯一确定。函数摘要构建是在指令级别上对函数体中的指令进行模拟执行的过程。算法1是函数摘要构建的算法,语句5~8处理函数调用指令,从重构的函数调用图callGrpah中获取被调函数function信息,并在局部参数localVariables中查找该被调函数的实参,存放到实参列表arguments中,最后将实参列表arguments和被调函数function信息保存到函数摘要summary,即在函数摘要中构建一条函数调用信息(下称函数调用点);语句9~14处理函数间的调用关系,将被调函数对形参funParameters的影响传递给主调函数中的实参arguments;语句15~16处理函数返回指令(包括抛出异常的指令),合并所有影响形参值的变量信息,将结果保存到形参中;语句17~19处理既不是函数返回指令又不是函数调用指令的指令,对这种指令根据Dalvik字节码的语义进行模拟,并更新相应局部变量的状态。例如,指令new-instancev6,〈t:Sms〉是新建一个Sms对象,将该对象放入v6中。在模拟执行过程中,则会构建一个与Sms相对应的对象保存Sms的信息。算法1函数摘要构建算法3.4被调函数的确定Android应用程序没有像Java应用程序存在一个统一的入口函数main,在对存在多个组件的Android应用程序进行分析时会带来不便。为了解决这个问题,在对应用程序进行分析之前,对应用程序先构建一个虚拟的main函数,将每个组件按其生命周期构建函数的执行序列,同一个组件共享同一个this对象。恶意行为检测是建立在已经构建好的函数摘要基础上的。从上述虚拟main函数开始,在计算的函数摘要上进行函数级别上的模拟执行,在执行过程中组合摘要中的占位函数需要结合已恢复的程序结构和函数调用时所传入的this对象来确定。在检测过程中,需要用到源函数模式库和危险函数模式库,以及恶意行为模式库,这些模式库都是来源于人工分析的经验积累。源函数模式库包含引入污染数据的函数,这可以是访问手机中的隐私数据,比如用户的通讯录等,也可以是启动手机的某个功能模块,比如地理位置定位系统等。危险函数模式库包含可以与外界交互的函数,例如访问网络、发送短信等。恶意行为模式库包含源函数与危险函数相结合后所产生的危害行为模式,例如启动地理位置定位系统与发送短信结合,则可能属于远程控制设备的行为。检测恶意行为的步骤主要如下:(1)设置分析入口。广播与监听机制和服务机制有特定的入口函数,可将其构建到虚拟main函数中。然而本地代码执行机制并没有固定的入口函数,则根据已重构好的函数调用图,在某个图中如果存在本地调用特征的函数,则将这个函数调用的真实入口加入到虚拟main函数中。(2)标记污染信息。从虚拟main函数开始,根据每个函数已构建的函数摘要,将函数调用点的函数信息与源函数模式库匹配,标记出污染变量中的污染信息。(3)污染信息传播。将污染信息通过函数的实参传入被调函数中,计算传入信息对被调函数各个函数调用点的影响,依次递归进行。(4)恶意行为匹配。在过程(3)中结合危险函数模式库,若匹配到一个危险函数时,并且污染信息也传播到这个危险函数,再根据恶意行为模式库中的恶意行为信息进行匹配,如果匹配成功,则报告一条危险行为及其相关信息。4数据的导入结果根据上述方法,本文实现了一个原型系统。系统包含2.2万行Java代码和1650行python代码,可以直接对Android应用程序安装包的字节码进行静态分析。主要包含三个模块:预处理、核心分析引擎以及检测结果,如图3所示。预处理模块将Android应用程序安装包中的字节码信息导入数据库中。快速过滤部分,通过分析应用程序安装包中的AndroidManifest.xml文件中的权限列表,快速筛除肯定不存在恶意行为的应用程序。由于不同应用程序的安装包存在相同的字节码文件,在将字节码信息导入数据库之前,首先计算DEX文件的MD5值,如果数据库中不存在该MD5值的应用程序,才会将应用程序的字节码通过IDAPro进行反汇编,再导入到数据库中。反汇编和导入数据库功能使用脚本自动实现的,不需要人工参与。-核心分析引擎通过对导入数据库中的字节码信息进行分析,恢复出应用程序结构以及近似运行时的函数调用图,并进一步构建出每一个函数的摘要信息,最后通过恶意行为检测分析出应用程序的恶意行为。检测结果模块根据恶意行为检测获取的信息,剔除恶意行为中存在与用户交互的恶意行为,将没有与用户交互的恶意行为作为最终的检测结果(即Android系统机制相关的恶意行为)输出。我们使用了文献[18]中使用的恶意应用程序数据库,含有1260个恶意应用程序样本。我们将这些恶意程序样本导入数据库,由于样本中存在DEX文件的MD5值相同,最终导入数据库的恶意样本数为866个。使用上述原型系统对数据库中的样本进行分析,其中有650个样本在使用系统机制时添加恶意行为;而有216个样本在使用系统机制时没有添加恶意行为,但是不排除在非系统机制代码部分添加了恶意行为,但是本文不关注这个方面,分析结果如图4所示。在这650个样本中,总共检测出4313条恶意行为,广播与监听机制中出现恶意行为的个数为380,占9%;本地代码执行机制中出现恶意行为的个数为464,占11%;服

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论