一种基于多运行环境行为比对的安卓恶意应用检测系统的制作方法

文档序号:14653816发布日期:2018-06-08 22:36阅读:188来源:国知局
一种基于多运行环境行为比对的安卓恶意应用检测系统的制作方法

本发明属于网络安全技术领域,特别涉及一种基于多运行环境行为比对的安卓恶意应用检测系统。



背景技术:

当今互联网快速发展已经具有相当的规模。近些年随着智能移动终端设备的兴起,移动互联网也随之得到了快速发展,智能手机与平板电脑正在人们的生活中大量普及。随着智能移动终端操作系统的逐渐普及,Android系统平台凭借其操作的方便易用、优秀的可改造与扩展性以及系统开源等诸多优点,受到了众多移动设备研发与制造厂商的欢迎,同时也逐渐拥有了一批庞大的系统爱好者与用户群体。

也正是因为Android系统极高的用户占有率与其特有的开源性特点,Android系统成为了很多恶意软件制作者及黑色产业从事者的攻击目标,大量针对Android平台的恶意代码也随之出现。因此,研究对恶意代码实现快速而有效检测的成熟技术,不但能够对广大用户隐私与财产安全实施保护,减少用户的利益损失,而且也能够在很大程度上保护Android应用开发者的利益。目前对Android恶意代码进行检测的技术主要可以分为静态和动态两类。

传统的静态检测方法大多是针对在恶意代码中大量存在的重打包现象和针对恶意代码中的权限滥用现象进行分析,需要对Android应用程序的APK安装包进行分析,反编译其中可执行文件并分析其他资源文件来获取基础数据,然后进行进一步的挖掘和分类从而判定应用程序的性质。但是随着加密技术和混淆技术的不断发展,静态分析的方法很难获取到有效的信息细节。

现有的恶意代码动态检测技术主要是通过在各种模拟环境中真正地运行待检测的应用程序,在监控应用程序表现出的真实动态特征信息的基础上对恶意代码进行检测。目前的动态检测系统广泛使用的模拟运行环境主要基于QEMU、Virtual Box、VMWare等虚拟化技术,而无论采用哪种技术,其模拟运行环境与真实的物理设备始终存在一定的差别,而应用程序在运行的过程中可以从运行环境中获取到这些能够表明运行环境的信息。因此如果一个恶意的应用程序对运行环境十分敏感,发现其当前运行于一个模拟环境中,而且这种模拟环境有可能是一种动态检测系统的组成部分,那么该恶意应用就不会直接执行它的敏感行为,从而达到逃避检测的目的。这种检测模拟运行环境并改变运行状态的行为被称为反模拟器行为,这种情况是限制动态检测方法检测效果的一个重要因素。因此,目前需要一种能够应对应用程序的反模拟器行为,有效检测对环境敏感恶意应用程序的方法,来应对动态检测技术在这些方面所存在的不足。



技术实现要素:

为了克服上述现有技术的缺点,本发明的目的在于提供一种基于多运行环境行为比对的安卓恶意应用检测系统,它依托动态分析隔离沙箱技术,通过检测应用程序运行过程中的运行环境检测行为,并采取针对性的对抗措施,将实际的运行环境伪装为多种不同的运行环境,把应用程序置于在这些不同运行环境中,采用应用行为动态捕捉方法,对应用在不同运行环境中的具体行为进行记录,分析对比应用程序表现行为,比对其在不同环境下的运行行为差异性,从而捕捉到应用程序的行为差异情况,并检测是否有恶意行为,适用于识别现有检测技术无法有效检测的环境敏感恶意应用程序。

为了实现上述目的,本发明采用的技术方案是:

一种基于多运行环境行为比对的安卓恶意应用检测系统,包括:

信息提取模块,对被检测的APK安装文件进行反编译,分析反编译后生成的smali文件中各个类的相关信息,为后续的日志分析提供数据支持;

动态分析模块,使用沙盒技术对Android应用程序进行动态分析,包括基于安卓原生系统修改的具有系统调用记录功能的系统运行镜像和经过定制的模拟器运行文件系统,组合成模拟器沙箱运行环境,并对应用程序运行过程中所执行的一系列行为进行记录,由对被检测应用程序运行时所表现行为进行记录的子模块组成;

环境检测对抗模块,实时检测应用程序运行过程中的环境检测行为,并针对不同层次的检测行为进行对抗,将应用程序中运行环境检测的结果修改为伪装的运行环境特征,包括分别对应用层、安卓系统层、Linux系统层和模拟器体系结构层特征进行动态修改的动态修改子模块;

行为记录分析模块,在某一待测应用程序多次重复运行全部结束后对所有的行为日志进行统一处理与分析,包括应用行为日志预处理子模块,行为序列提取子模块,行为分析对比子模块和报告生成子模块;

系统运行调度模块,在系统运行过程中控制整个运行流程,包括模拟器运行调度子模块、待分析应用管理子模块、系统事件模拟子模块以及用户接口事件触发子模块。

所述系统运行镜像为在Android系统源码基础上进行二次修改后编译得到的可执行文件,修改内容为对应用动态分析模块中所述的6类行为中每个具体系统调用API的执行流程,目的在于使得应用程序执行过程时,动态分析模块能够记录到应用程序的各种行为。

所述经过定制的模拟器运行文件系统为在初始配置的Android模拟器文件系统镜像文件中中增添了通讯录信息、通话记录信息、短信信息、照片信息等用户使用行为数据后的文件系统镜像文件。

所述动态分析模块包括网络通信操作记录子模块、文件操作记录子模块、加解密操作记录子模块、系统Shell操作记录子模块、隐私行为获取记录子模块、敏感操作记录子模块等。

与现有技术相比,本发明的有益效果是:

1、采用动态分析方法,有效避免了静态分析难以解决的应用加壳、混淆等对抗检测的方法。

2、采用在多种运行环境中重复运行应用程序,分析比对其行为表现的方法,能够准确检测出应用程序的反模拟器行为,并且判断其是否存在隐藏恶意行为,标明其是否为恶意应用程序。

3、采用简单、高效的数据分析算法,能够实时记录应用真实行为,高效处理大量行为数据。

4、采集的应用行为数据具有可靠性和准确性,且不需要获取待检测的应用程序任何额外的其他信息。

5、动态生成的运行环境可灵活定制其各种环境特征,能够方便的对整个系统进行更新升级和拓展。

6、可以作为现有各种安卓应用分析平台的一种拓展,增强安卓恶意应用分析平台整体的分析检测能力。

附图说明

图1为本发明系统整体运行流程图。

图2为本发明动态分析模块中各子模块结构图。

图3为本发明系统运行调度模块流程图。

图4为本发明动态分析模块流程图。

具体实施方式

为了使本发明的目的、技术方案以及优点更加清楚明白,以下结合附图及示例性实施例,对本发明进行进一步详细说明。应当理解,此处所描述的示例性实施例仅用以解释本发明,并不用于限定本发明的适用范围。

首先,本发明的基于行为比对的安卓恶意应用检测系统整体运行流程如图1所示。其中画出的4个主要模块分别为信息提取模块、动态分析模块、环境检测对抗模块和行为记录分析模块,系统运行调度模块在该流程图中未有画出。系统运行调度模块负责在系统运行过程中控制整个运行流程,将同一待检测应用程序重复运行多次:首先将动态分析模块中的模拟器沙箱运行环境恢复为预设的初始状态;然后安装启动待检测应用程序,在应用程序运行时,由环境检测对抗模块分别对应用层、安卓系统层、Linux系统层和模拟器体系结构层的环境特征进行伪装对抗,同时由动态分析模块会将应用程序运行时的系统调用行为记录下来,保存在一系列的行为日志文件中;在同一应用程序多次运行全部结束后,行为记录分析模块将会对该应用产生的一系列运行日志进行处理分析,并计算相互之间的一致性,根据计算得到的一致性矩阵判断该应用是否存在特定运行环境中隐藏的恶意行为,标明其恶意性,并输出检测报告。

各模块详细功能内容如下:

1、信息提取模块

由于后续的行为比对模块中需要获取应用程序中所有类文件的信息,所以首先对原始的APK安装文件进行反编译,分析反编译后的smali文件中各个类的信息,为后续的行为日志分析做准备。

在每个应用程序被运行在动态分析环境中之前,使用安卓APK安装文件反编译工具apktool将该APK文件反编译,获得一系列的smali格式文件,通过扫描反编译得到的smali文件提取其中所有源代码中类文件的信息,并保存在数据库中,待后续的行为比对模块使用。

2、动态分析模块

本系统的动态分析模块使用沙盒技术对Android应用程序进行动态分析,该模块主体为基于安卓原生系统修改的具有系统调用记录功能的系统运行镜像和经过定制的模拟器运行文件系统二者组合成的模拟器沙箱运行环境,具体运行流程如图4所示。

该模块中应用的系统运行镜像为在Android系统源码基础上进行二次修改后编译得到的可执行文件,修改内容为对动态分析模块中所述的6类行为中每个具体系统调用API的执行流程,目的在于使得应用程序执行过程时,动态分析模块能够记录到应用程序的各种行为。

该模块中应用的经过定制的模拟器运行文件系统为在初始配置的Android模拟器文件系统镜像文件中中增添了通讯录信息、通话记录信息、短信信息、照片信息等用户使用行为数据后的文件系统镜像文件。

主要流程如下:

步骤1:启动模拟器,等待模拟器启动完毕后解锁屏幕。

步骤2:如果当前分析状态下bugNum小于2则继续从正在分析的应用程序列表或者待分析队列中获取APK文件。

步骤3:设置模拟器状态为busy,安装应用程序,打开应用程序,将应用程序在前后台间进行切换,调用模拟系统事件操作,关闭并卸载应用程序。如果这整个过程中出现任何错误,则直接将bugNum加1,进入下一步骤。

步骤4:取消模拟器busy状态后,使用telnet命令优雅的关闭模拟器,如果失败,则使用kill命令直接关闭模拟器进程。

其中,只有在模拟器完全启动完毕后才能够对其进行包括安装应用程序等各项操作。而简单判断系统内自动设定的sys.boot_completed系统属性是否为1不足以准确判定模拟器启动完毕的。因此,在发现sys.boot_completed系统属性已经为1之后,还需要判断目前模拟器屏幕是否还仍然为全黑,如果仍然黑屏说明还没有启动完全;当模拟器屏幕出现画面之后还需要判断系统中进程数目是否还在增加,当进程数目在一段时间内都不再增加后则表明模拟器完全启动完成。

恶意应用激活其恶意行为大多是通过在系统中注册接收特定系统事件的广播接收器来实现的,而且它们所利用的系统事件大多属于能够反映系统运行状态的几类事件,具有一定的规律性,比如系统启动完成广播、用户交互行为广播、WIFI网络状态变化广播、SIM卡网络状态变化广播等。因此在模拟器完全启动,向其中安装被检测的应用程序并设定运行环境特征之后,就需要启动应用程序,并输入一系列前述的系统事件来触发应用程序的响应行为。

而且为了保证用一个应用程序在几次不同的运行过程中输入信息完全相同,需要记录第一次发送系统事件序列的顺序以及间隔时间,后续运行时按照这个记录在相同的时间点发送相同的系统事件。除此之外,恶意应用程序在接收到系统事件之后,可能会启动Service组件在后台隐蔽的进行运行环境检测以及敏感行为执行,也可能将应用程序中的某个Activity组件弹到前台,通过钓鱼界面诱使用户进行操作,从而获取其他的权限或用户隐私信息。所以需要使用UI(User Interface)触发技术来对应用程序的用户界面进行操作,这部分用户界面操作有系统运行调度模块进行处理。

同时,该模块还负责将应用程序运行过程中所执行的一系列行为进行记录,主要记录功能包括如下6个方面,如图2所示:

(1)网络通信行为记录:包括TCP通信记录、UDP通信记录、HTTP通信记录、DNS通信记录和网络通信流量记录。

(2)文件操作行为记录:包括文件操作记录和sqlite数据库操作记录。

(3)加解密操作行为记录:包括加密操作记录和解密操作记录。

(4)系统shell操作行为记录:包括提权命令、mount命令、chown命令、chmod命令记录。

(5)隐私信息获取行为记录:包括获取系统信息行为记录、获取phone/call/email信息行为记录、获取browser信息行为记录和获取位置信息行为记录。

(6)敏感操作行为记录:包括动态加载行为记录、Android组件操作行为记录和敏感操作行为记录。

动态分析模块会在待检测的应用程序运行过程中对以上所有行为进行监控与记录,并保存在日志文件中,在该待测应用程序的一次运行结束后从模拟环境中提取出来,保存在待分析的日志文件目录中,等待行为记录分析模块的处理。

所有的监控信息输出在Android系统的日志系统中,通过其自带的日志工具可以将系统日志按照标签过滤提取,并记录在磁盘文件中。但是如果对所有被监控系统API的调用情况都进行记录,那么系统应用执行的大量行为也都需要经过额外的磁盘记录操作,会导致系统运行的效率大大降低,严重影响动态分析的执行速度。因此被监控的API被调用时会判断调用者的进程号是否等于被监控应用程序的进程号,如果相等才会进行真正记录的磁盘操作,否则不对其进行记录,这样可以将对系统运行速度的影响降到最低的程度。

由于安卓应用程序经常存在多线程执行的情况,因此本模块使用了一种适应多进程应用程序执行特点的行为记录生成技术和行为记录比较技术来应对上述问题。在记录应用程序运行过程中所调用的系统API时会将这个API调用者所在的进程号以及API调用者所在线程的调用栈一同记录下来,最终保存在磁盘文件中。应用程序在模拟器中运行结束后,动态分析模块会将该行为记录文件从模拟器中提取出来,并对其中的每条记录按照其运行调用者的类名称和进程编号进行分类汇总,按照记录的时间戳进行排序,最终形成一个应用程序运行过程中每个进程各自的Android系统API调用序列。

3、环境检测对抗模块

该模块会实时检测应用程序运行过程中的环境检测行为,并针对不同层次的检测行为进行对抗,将应用程序中运行环境检测的结果修改为伪装的运行环境特征。按照应用程序检测模拟运行环境方法的不同,这些能够表明运行环境类别的特征分别属于4个不同的层次:

(1)应用层

应用层的反模拟器方法主要是通过检测该设备中是否存在联系人记录,通话记录,短信记录等使用痕迹特征来判断该运行环境为模拟环境还是真实环境。

(2)安卓系统层

Android系统层的反模拟器方法主要是通过检测设备状态信息(包括IMSI、ICCID、IMEI、电话号码等)、设备硬件信息(包括电池电量信息、WiFi模块Mac地址信息、GPS定位信息等)、系统属性信息(包括调用安卓设备系统属性获取方法、读取build.prop文件等)等特征来判断运行环境为模拟环境还是真实环境

(3)Linux系统层

Linux系统层的反模拟器方法主要是通过检测设备驱动信息、设备特征文件、getprop命令等来判断运行环境为模拟环境还是真实环境。

(4)模拟器体系结构层

模拟器体系结构层的反模拟器方法主要是检测设备CPU信息特征文件、设备特征进程等方法来判断运行环境为模拟环境还是真实环境。

除了以上列出的4类中所包含方法,环境检测对抗模块还可以根据需要对其他的特征进行修改,生成新的运行环境,从而达到欺骗待检测应用程序的目的。

对于具有以上特征运行环境的动态伪装,可以通过修改Android系统源码来实现,也可以通过其他方法来实现。修改Android系统源码的实现,主要使用以下三种方法来对各个特征进行动态定制。

首先,属于系统属性的环境特征会在模拟器启动后使用特制的系统属性修改工具修改系统内核中的属性值,同时增加一些自定义属性用来控制对于Android系统API特征和文件特征的伪装。之所以需要对该工具进行修改是因为有一部分只读属性在系统默认情况下是不可以修改的,因此需要通过修改内存的方法实现修改。系统属性中还有一类特殊情况就是Android系统中的Build静态变量,如上文提到过的Build.DEVICE属性等。这类属性属于修饰为static final的Java对象,无法直接通过修改内存改变其数值,需要通过进程注入的方式向zygote初始化进程注入代码,通过反射方式修改其修饰符,然后修改其数值。由于Android系统中zygote进程是所有其他应用程序的父进程,所以对其进行修改之后,后续启动的应用程序中Build静态变量的数值都与之相同。

其次,对于通过调用Android系统API获取其返回值作为判断运行环境信息的特征,应用程序调用该API时,Android框架会从系统属性中获取之前添加的与该API对应的自定义属性值,并将该自定义属性的值作为API调用的返回值返回给应用程序,而不是返回其真实值。由于Android系统运行过程中许多系统应用程序也会通过调用API获取部分系统属性的值,而如果其获得的返回值与实际情况不相符,则有可能会导致系统运行不稳定甚至直接导致系统崩溃。所以在这些Android框架中这些API运行时会判断当前调用来自哪个进程,只有来自被检测应用程序所在进程的调用才会被返回伪装后的值。

再次,对于属于文件特征的检测方法,应用程序会检测运行环境中特征文件是否存在或者文件中是否存在特征字符串的方法来判断运行环境。因此在打开文件时Android框架会判断调用该打开文件操作的进程是否为被检测的应用程序所在的进程,然后再判断要打开的文件是否为能够体现运行环境的特征文件,如果两个条件都符合的话则将这个文件操作重定向到预先准备好的伪装文件,从而实现对运行环境文件特征的伪装。

4、行为记录分析模块

该模块在某一待测应用程序多次重复运行全部结束后会对所有的行为日志进行统一处理与分析,包括应用行为日志预处理子模块,行为序列提取子模块,行为分析对比子模块和报告生成子模块四个子模块。

行为日志预处理子模块对原始的行为日志文件进行整理,提取出所有该日志中出现的系统调用,并整理为一个列表,每个系统调用对应一个唯一的整数编号;然后行为序列提取子模块会根据上一步生成的系统调用与编号的对应关系转换为将每一个单独的行为日志行为序列;行为分析对比子模块采用比对算法对各个行为序列进行比较,计算两两之间的相似度,生成一致性矩阵,同时统计各个行为记录中API调用的数目;报告生成子模块根据一致性矩阵的特征判断该应用是否存在隐藏的恶意行为,标明其恶意性,并输出检测报告。

其中行为分析比对子模块在对用一个应用程序在不同运行环境中所得到的两个行为记录进行比较时,首先按照两个行为记录中的线程编号分别计算两个行为记录中对应线程间的系统API调用序列相似度。为了准确反映两个调用序列之间的相似度,计算二者之间的编辑距离来衡量二者之间相似度,得到一个介于0到1之间的实数作为相似度的度量,相似度越大表示二者越相似。在计算得到每个线程对之间的相似度之后,按照各个线程中系统API调用序列中API调用记录的数目在整个行为记录中API调用记录总数中所占的比例将这些单独的相似度加总为一个总体的相似度,作为应用程序两个行为记录相似度的最终结果。将所有行为记录之间的相似度比较完成之后就组成了该应用程序运行时行为的一致性矩阵。除了统计应用程序行为记录之间的相似度之外,该子模块还会统计两个对应线程之间具体调用系统API函数种类和数目上的差别,得到行为分类统计结果。如果两个行为记录中某一对对应线程中的行为记录不是完全相同,而且其中一个线程中调用了敏感API函数,另外一个线程则没有调用该API函数,则表明该应用程序根据其收集到的运行环境信息对这部分敏感行为进行了隐藏。

报告生成子模块综合一个应用程序在几次动态运行后输出行为记录间的一致性矩阵,使用判决算法判该应用程序是否存在行为差异。如果在某一类伪装后运行环境中的行为记录与原始模拟运行环境中的行为记录之间的比较结果小于阈值,则证明该应用程序存在行为差异,且其使用的检测模拟运行环境方法为属于该类别,从而判断出应用程序所使用的反模拟器行为所属类别。另外,判决算法还会根据行为分类统计结果的差别分析其是否在某些运行环境中隐藏了敏感行为,如果存在隐藏的敏感行为则判定这个应用程序为使用了反模拟器方法的恶意应用程序应用程序。最后,该子模块将所有的分析结果汇总为分析检测报告并输出给用户。

6、系统运行调度模块

该模块控制整个系统的运行过程,包括模拟器运行调度子模块,待分析应用管理子模块,系统事件模拟子模块以及用户接口事件触发子模块4个子模块。

模拟器运行调度子模块在系统初始化时会根据输入的启动模拟器数量启动模拟器,然后启动各个模拟器的控制线程,如图3所示。模拟器控制线程提供对模拟器的一系列控制操作:运行停止、应用获取、应用安装运行、应用停止卸载等。

待分析应用管理子模块监控待分析应用保存目录,维护一个待分析应用队列,一个正在分析应用队列和一个分析完成应用队列。每次模拟器运行调度子模块从待分析应用队列中取到一个待分析应用进行分析,并将其置于正在分析应用队列,待分析完成后置于分析完成应用队列。

系统事件模拟子模块负责在正在检测的应用程序运行过程模拟一些真实设备使用过程中会发生的系统事件,以触发待检测应用程序对这些系统时间可能的响应行为,包括模拟boot complete事件、锁屏与解锁操作事件、接收与发送短信、拨打与接收电话、位置变化等。

用户接口事件触发子模块模拟用户操作应用程序,以触发应用程序针对这些用户操作所产生的响应行为,同时该子模块还会自动启动应用程序中所存在的各种组件,包括暴露组件和非暴露组件。用户接口交互模拟时按照深度优先算法遍历UI Tree。在遍历UI Tree中的UI控件时,用户接口交互模拟功能根据UI控件类型的不同,触发不同的UI组件事件,实现用户操作的模拟。UI Tree遍历采用深度优先遍历。遍历时,先启动应用程序,接着遍历所有的UI界面。每遍历一个UI界面时,需要先获得此界面的所有有效UI控件,然后遍历所获得的所有的UI控件,并根据UI控件类型的不同,触发不同的UI组件事件。如果触发某控件的UI组件事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,然后遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历其他的控件。

当一个应用程序完成在检测系统中的全部重复运行过程之后,结束阶段输出检测报告。

由于存在明确的反模拟器行为的应用程序中恶意应用占了相当大的比例,而且结合对应用程序敏感行为的记录分析与比对,本发明中的安卓恶意应用检测系统的输出结果可以判定该应用程序是否为存在反模拟器行为的恶意应用程序,即该应用程序会在特定运行环境中隐藏其敏感的恶意行为。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

综上,本发明提供的一种基于多运行环境行为比对的安卓恶意应用检测系统,通过对APK程序在不同运行环境中所表现出的行为进行分析,检测其恶意行为,从而进一步确认是否为恶意应用。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1