恶意应用识别方法及装置与流程

文档序号:11878585阅读:250来源:国知局
恶意应用识别方法及装置与流程

本发明涉及网络应用安全技术领域,尤指一种恶意应用识别方法及装置。



背景技术:

随着互联网技术的发展,网络应用也越来越繁多,各种各样的应用程序大大的便利了人们的日常生活,同时,也出现了大量的恶意应用程序,为用户的网络安全带来了隐患。为了减少和避免恶意应用程序对用户造成的各种威胁和隐患,也会采用一些技术手段对恶意应用进行检测和拦截。

目前常用的检测恶意应用的方法有基于钩子(hook)的恶意应用检测方案和基于自定义安卓(Android)的恶意应用检测方案,这两种方案都是通过模拟加载应用程序,截获日志信息来实现检测结果的获取。其中:

基于hook的恶意应用检测方案,主要是通过利用hook框架给Android模拟器对应的系统链接库添加日志纪录,并截获处于特定操作流程下的相关hook函数反馈的日志信息,进而根据截获的日志信息生成检测结果。例如:根据用户输入的操作流程信息生成相应的日志信息,并根据日志信息生成检测结果,与机器随机点击模拟输入的操作相比,输入行为更符合用户操作习惯,能够一定程度上锁定Android应用处于特定操作下所触发的恶意行为。

该方案需要hook的Android模拟器所对应的系统链接库需要积累,因恶意应用所涉及的代码层面种类繁多,利用手段也不断演变,如需全面详尽的获取恶意应用在特定操作流程下的日志信息,需要针对其所采用的相关函数均进行hook操作,否则所截获的日志不全,会影响检测的准确性。此外,因该方案偏向于应用层面,存在刻意绕过的编码手段可以采用,导致无法获取该到恶意应用在特定操作流程下的日志信息,也会影响检测的准确性。

基于自定义Android的恶意应用检测方案,主要通过修改Android开源代码,在一些敏感操作函数中加入日志输出功能,比如短信发送函数(sendTextMessage)等,然后在Android模拟器的运行环境下通过机器随机点击生成模拟操作流程,并通过分析模块操作流程形成的日志文件来识别Android恶意程序。该方案在模拟运行获取日志信息时,采用的是系统级的实现方式,也就是自定义Android系统,在一些敏感操作函数中加入日志输出功能,与上述hook方式处于应用层级的获取方式相比,具备更好的稳定性,不会受hook框架,或者反hook操作的影响。

但该方案的模拟操作流程采用的是机器随机点击的方式生成,因此对于需要执行特定操作而触发的恶意行为则检测不到,导致检测的准确性比较低。且该方案涉及修改Android系统源代码,不仅源码量大,而且源码结构复杂,对技术实现要求较高,技术实现成本也高。该方案既要修改源码层面,也要修改源码编译层面,因此修改代码的时间成本也较高,针对不断的Android版本升级,相应的代码调整也是必须的,因此,也导致维护成本高。



技术实现要素:

本发明实施例提供一种恶意应用识别方法及装置,用以解决现有技术中存在的恶意应用识别准确性低,技术实现和维护成本高的问题。

一方面,本发明实施例提供了一种恶意应用识别方法,包括:

获取待检测的应用程序文件,在模拟器中运行所述应用程序文件;

获取所述应用程序文件运行时的内存映像;

对获取的内存映像进行动态内存审查,根据动态内存审查结果确定是否是恶意应用程序。

在一些可选的实施例中,获取所述应用程序文件运行时的内存映像,具体包括:

按照指定的时间序列导出dump选定时间段内的全部内存映像;

根据内存映射存储地址,从选定时间段内的全部内存映像中获取所述应用程序的内存映像。

在一些可选的实施例中,所述对获取的内存映像进行动态内存审查,根据动态内存审查结果确定是否是恶意应用程序,具体包括:

根据获取的所述应用程序文件的内存映像中包含的由内存处理的动态信息,审查所述应用程序的行为足迹是否有非法行为足迹,和/或审查所述应用程序传输的数据中是否包含敏感信息;

当行为足迹中有非法行为足迹或传输的数据中包含敏感信息时,认为是恶意应用程序。

在一些可选的实施例中,审查所述应用程序的行为足迹是否有非法行为足迹,具体包括下列操作中的至少一种:

审查应用程序的网络传输操作,是否有非用户启动的或应用程序自启的网络传输操作;

审查应用程序的启动时间是否早于用户启动该应用程序的时间;

审查网络连接状态,是否有用户未启用的网络连接被启用。

在一些可选的实施例中,所述审查所述应用程序传输的数据中是否包含敏感信息,具体包括:

从所述应用程序文件的内存映像中包含的由内存处理的动态信息中获取出应用程序所传输的数据;

判断所传输的数据中是否包含有与预设的敏感信息相匹配的信息。

本发明实施例还提供一种恶意应用识别装置,包括:

文件获取模块,用于获取待检测的应用程序文件;

加载运行模块,用于在模拟器中运行所述应用程序文件;

映像获取模块,用于获取所述应用程序文件运行时的内存映像;

内存审查模块,用于对获取的内存映像进行动态内存审查;

结果生成模块,用于根据动态内存审查结果确定是否是恶意应用程序。

在一些可选的实施例中,所述映像获取模块,具体用于:

按照指定的时间序列导出dump选定时间段内的全部内存映像;

根据内存映射存储地址,从选定时间段内的全部内存映像中获取所述应用程序的内存映像。

在一些可选的实施例中,所述内存审查模块,具体用于:

根据获取的所述应用程序文件的内存映像中包含的由内存处理的动态信息,审查所述应用程序的行为足迹是否有非法行为足迹,和/或审查所述应用程序传输的数据中是否包含敏感信息;

结果生产模块,具体用于当行为足迹中有非法行为足迹或传输的数据中包含敏感信息时,认为是恶意应用程序。

在一些可选的实施例中,所述内存审查模块,具体用于执行下列行为足迹审查操作中的至少一种:

审查应用程序的网络传输操作,是否有非用户启动的或应用程序自启的网络传输操作;

审查应用程序的启动时间是否早于用户启动该应用程序的时间;

审查网络连接状态,是否有用户未启用的网络连接被启用。

在一些可选的实施例中,所述内存审查模块,具体用于:

从所述应用程序文件的内存映像中包含的由内存处理的动态信息中获取出应用程序所传输的数据;

判断所传输的数据中是否包含有与预设的敏感信息相匹配的信息。

上述技术方案具有如下有益效果:在获取应用程序文件后,根据对应用程序文件模拟运行的内存映像,对应用程序进行动态内存审查,从而在不需要累积日志信息的情况下,实现准确的恶意应用识别,以动态内存映像作为审查目标,其获取的数据更全面更可靠,且不容易被应用级别的代码绕过,提高了识别的准确性;该方法无需大量修改Android系统源代码,降低了开发维护成本和时间成本。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例中恶意应用识别方法的流程图;

图2是本发明实施例中恶意应用识别方法的原理示意图;

图3是本发明实施例一中恶意应用识别方法的流程图;

图4是本发明实施例二中恶意应用识别方法的流程图;

图5是本发明实施例三恶意应用识别方法的图;

图6是本发明实施例中恶意应用识别装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决现有技术中存在的不能准确有效的识别恶意应用,开发维护成本高等若干问题,本发明实施例提供一种恶意应用识别方法,通过对应用程序文件模拟运行时的动态内存映像的审查,实现准确有效地恶意应用识别。

本发明实施例提供的恶意应用识别方法,其流程如图1所示,其原理如图2所示。该方法包括如下步骤:

步骤S101:获取待检测的应用程序文件。

获取待检测的应用程序文件,例如被检测应用的Android应用程序的安装包(AndroidPackage,apk)文件,以便于加载运行模块加载运行应用程序。如图2中所示的获取应用程序文件。

步骤S102:在模拟器中运行获取的应用程序文件。

通过安卓(Android)模拟器加载获取的应用程序文件,可以使用Dalvik虚拟机作为Android应用所运行的载体,它可以支持转换为Android系统可执行文件类型(比如:.dex格式)的Java(佳沃)文件的运行。如图2中所示的应用程序加载。

由于有些Android应用程序存在着模拟器的检测行为,能够判断所处环境是否为模拟器,如为模拟器,则停止一切的应用行为并退出,这对检测日志的获取是极其不利的。本发明中采用hook方式,对常见的模拟器躲避接口进行了隐藏,让应用程序即使处于Android模拟器,依旧如处于真机版一样释放其行为。

步骤S103:获取应用程序文件运行时的内存映像。

获取应用程序的内存映像时,按照指定的时间序列导出(dump)选定时间段内的全部内存映像;根据内存映射存储地址,从选定时间段内的全部内存映像中获取应用程序的内存映像。如图2中所示到的动态内存dump,通过动态内存dump可以获取到选定时间段的动态内存映像。如图2中所示时间线上,表示出的选定时刻某状态的动态内存映像。可以按照设定的内存映像获取规则,来获取内存映像,比如上边所说的按时间序列导出,当然也可以按不同应用导出。

具体的,根据应用程序文件模拟运行时由内存处理的动态信息,按照指定的时间序列dump应用程序文件运行时的内存映像;其中,动态信息为应用程序模拟运行时所触发的应用行为相关的动态信息。

当应用程序在Android模拟器中运行的时候,通过自动化的模拟用户操作脚本,应用的行为被大量触发,相关的动态信息均会通过内存来处理。此时动态内存dump模块将按照一定的时间序列dump出运行时的内存映像,用于后续的内存。此时可以将应用程序运行时,内存中所有的内存映像都dump出来,然后再从中获取应用程序相关的内存映像。

步骤S104:对获取的内存映像进行动态内存审查。

获取到动态内存映像后,可以有内存审查模块进行动态内存分析。

动态内存审查时,根据获取的应用程序文件的内存映像中包含的由内存处理的动态信息,审查应用程序的行为足迹是否有非法行为足迹,和/或审查应用程序传输的数据中是否包含敏感信息。如图2中所示的动态内存审查。

其中,行为足迹可以是应用程序的网络传输、操作应用程序的启动时间、应用程序所在设备的网络连接状态中的一个或几个。

应用程序传输的数据中包含的敏感信息,可能是远程控制、扣费操作、垃圾广告等相关信息中的至少一种。

步骤S105:根据动态内存审查结果确定是否是恶意应用程序。

根据上述动态内存分析的结果可以生成最终的审查结果报告。

当行为足迹中有非法行为足迹或传输的数据中包含敏感信息时,认为是恶意应用程序,否则认为不是恶意应用。如图2中所示的,根据审查结果以日志反馈的方式生成识别结果,可以通过用户界面的方式向用户展示审查结果。

该技术方案与现有技术方案之间的区别在于其分析的素材是某一时刻具备某一状态的内存映像,而不是hook库函数所得的日志文件或者自定义Android系统的日志输出,这一分析素材的显著优点是能够最大化的获取应用在运行时的轨迹,并为分析程序提供最全面,最可靠的依据,进而提高恶意应用程序审查的准确性。

如图2所示的,其核心动态内存dump模块以及内存审查模块,通过dump实时的动态内存映像,获得应用所有行为相关的内存动态,进而通过内存审查,可以清楚的得知某一应用程序在某一时刻的内存足迹,比如,连接网络,发送短信等,进而达到应用审查的效果。

实施例一

本发明实施例一提供上述恶意应用识别的一种具体实现方法,其流程如图3所示,包括如下步骤:

步骤S301:获取待检测的应用程序文件。

步骤S302:在模拟器中运行获取的应用程序文件。

步骤S303:获取应用程序文件运行时的内存映像。

获取内存映像时,可以采用预设的脚本插件实现,定义Dalvik虚拟机相关变量的内存映射存储地址,比如常见的静态变量,类的对象等等,以便于处理过程中的变量获取及定位(即从何处可获取分析所需的变量),通过编写的脚本可以获取全局变量DvmGlobals对象的内存地址偏移,从而实现从指定的进程中获取应用程序文件的内存映像。

步骤S304:根据获取的应用程序文件的内存映像中包含的由内存处理的动态信息,审查应用程序的行为足迹是否有非法行为足迹。

对于动态内存映像的审查,可以从选定的至少一个维度进行审查,例如:从应用程序的行为足迹的维度。包括网络传输的操作、网络连接的状态信息、进程的启动时间等等。对于内存映像中包含的网络传输的操作、网络连接的状态信息、进程的启动时间等动态信息可以分别通过预设插件的方式获取,例如:通过网络(Net)插件获取网络传输的操作,通过进程(Process)插件获取进程的启动时间,通过状态(State)插件获取网络连接的状态信息等等。

审查应用程序的行为足迹是否有非法行为足迹,具体包括下列操作中的至少一种:审查应用程序的网络传输操作,是否有非用户启动的或应用程序自启的网络传输操作;审查应用程序的启动时间是否早于用户启动该应用程序的时间;审查网络连接状态,是否有用户未启用的网络连接被启用。

比如:网络传输操作可以是自动发送短信或其他消息,网络连接状态比如无线局域网(Wireless Fidelity,WiFi)或通用分组无线服务技术(General Packet Radio Service,GPRS)或蓝牙是否连接等等。

步骤S305:认为是恶意应用程序。

当行为足迹中有非法行为足迹时,认为是恶意应用程序。

例如当应用程序的内存映像中有非用户启动的或应用程序自启的网络传输操作时,或应用程序的启动时间早于用户启动该应用程序的时间,或网络连接状态发现有网络连接未经用户启用而自动连接时,都认为应用程序为恶意应用程序。

步骤S306:认为不是恶意应用程序。

当行为足迹中没有非法行为足迹时,认为不是恶意应用程序。

实施例二

本发明实施例二提供上述恶意应用识别的一种具体实现方法,其流程如图4所示,包括如下步骤:

步骤S401:获取待检测的应用程序文件。

步骤S402:在模拟器中运行获取的应用程序文件。

步骤S403:获取应用程序文件运行时的内存映像。

步骤S404:根据获取的应用程序文件的内存映像中包含的由内存处理的动态信息,审查应用程序传输的数据中是否包含敏感信息。

对于动态内存映像的审查,可以从选定的至少一个维度进行审查,例如:从应用程序传输的数据中是否包含敏感信息的维度。对于内存映像中包含的传输的数据中的信息的获取,也可以通过预设插件的方式获取,例如:通过私有(Private)插件获取传输的数据中的信息。

审查应用程序传输的数据中是否包含敏感信息,具体包括:从应用程序文件的内存映像中包含的由内存处理的动态信息中获取出应用程序所传输的数据;判断所传输的数据中是否包含有与预设的敏感信息相匹配的信息。

步骤S405:认为是恶意应用程序。

当传输的数据中包含敏感信息时,认为是恶意应用程序。例如包含有远程控制、扣费操作、垃圾广告等相关信息中的至少一个时。

步骤S406:认为不是恶意应用程序。

当传输的数据中没有包含敏感信息时,认为不是恶意应用程序。

实施例三

本发明实施例三提供上述恶意应用识别的一种具体实现方法,其流程如图5所示,包括如下步骤:

步骤S501:获取待检测的应用程序文件。

步骤S502:在模拟器中运行获取的应用程序文件。

步骤S503:获取应用程序文件运行时的内存映像。

步骤S504:获取的应用程序文件的内存映像中包含的由内存处理的动态信息。

获取应用程序文件的内存映像中包含的动态信息,这些动态信息中可能包含应用程序的行为足迹、应用程序传输的数据等等。

步骤S505:审查应用程序的行为足迹是否有非法行为足迹。若是,执行步骤S508;若否,执行步骤S506,进一步审查。

对于动态内存映像的审查,可以从选定的至少两个维度进行审查,例如:从应用程序的行为足迹的维度和从应用程序传输的数据中是否包含敏感信息的维度这两个维度进行审查。以先审查行为足迹这一维度为例,可以参照实施例一的相关描述。

步骤S506:审查应用程序传输的数据中是否包含敏感信息。若是,执行步骤S508;若否,执行步骤S507。

以继续审查是否包含敏感信息的维度,参照实施例二的相关描述。

由于具体的恶意行为多种多样,但归结至一点还是对用户造成的危害,类似于远程控制、扣费操作、垃圾广告这一系列恶意行为的根基在于能够获取到用户的敏感信息并加以利用,故第一个维度的多方面审查最终都会汇总至第二个维度的审查,一旦捕捉到用户的敏感信息被泄漏,无论是什么样的方式,该应用都被归类于恶意应用(至少从行为层面是可以这样断定的)。而这些作为多维度审查的信息都是基于内存定位,并利用相应的插件代码,对定位到的信息进行整理而得到。

步骤S505和步骤S506的执行顺序不分先后,可以交换。

步骤S507:认为不是恶意应用程序。

当行为足迹中没有非法行为足迹且传输的数据中没有包含敏感信息时,认为不是恶意应用程序。

步骤S508:认为是恶意应用程序。

当行为足迹中有非法行为足迹或传输的数据中包含敏感信息时,认为是恶意应用程序。

基于同一发明构思,本发明实施例还提供一种恶意应用识别装置,该装置可以设置在网络设备或终端设备中,用以识别恶意应用程序。该装置的结构如图6所示,包括:文件获取模块601、加载运行模块602、映像获取模块603、内存审查模块604和结果生成模块605。

文件获取模块601,用于获取待检测的应用程序文件。

加载运行模块602,用于在模拟器中运行获取的应用程序文件。

映像获取模块603,用于获取应用程序文件运行时的内存映像。

内存审查模块604,用于对获取的内存映像进行动态内存审查。

结果生成模块605,用于根据动态内存审查结果确定是否是恶意应用程序。

优选的,上述映像获取模块603,具体用于按照指定的时间序列导出(dump)出选定时间段内的全部内存映像;根据内存映射存储地址,从选定时间段内的全部内存映像中获取应用程序的内存映像。

优选的,上述内存审查模块604,具体用于根据获取的应用程序文件的内存映像中包含的由内存处理的动态信息,审查应用程序的行为足迹是否有非法行为足迹,和/或审查应用程序传输的数据中是否包含敏感信息;

结果生产模块,具体用于当行为足迹中有非法行为足迹或传输的数据中包含敏感信息时,认为是恶意应用程序。

优选的,上述内存审查模块604,具体用于执行下列行为足迹审查操作中的至少一种:

审查应用程序的网络传输操作,是否有非用户启动的或应用程序自启的网络传输操作;审查应用程序的启动时间是否早于用户启动该应用程序的时间;审查网络连接状态,是否有用户未启用的网络连接被启用。

优选的,上述内存审查模块604,具体用于从应用程序文件的内存映像中包含的由内存处理的动态信息中获取出应用程序所传输的数据;判断所传输的数据中是否包含有与预设的敏感信息相匹配的信息。

本发明实施例提供的上述恶意应用识别方法,由于采用了动态的内存映像作为审查的目标,故而是一个更全面、更稳定、更可靠、更高效的Android恶意应用审查方法。由于采用了动态内存映像作为审查的目标,不容易被应用级别的代码绕过,可以获得更全面,更可靠的数据,识别结果更准确。

其部署安装简单,不需修改Android系统源码,采用自带的模拟器即可实现,只需要在Android内核上安装上自实现的内存dump模块,用于Android动态内存的导出即可,环境架设方便,无需耗费较高的时间成本,开发成本,维护成本。本方案能够自动化的模拟用户操作脚本,提高了处理速度和效率;建立在动态内存映像导出的基础上,编写脚本程序对某一时刻,某一状态下的内存映像进行审查,通过实时的内存映像分析,可获得更全面的检测数据。本发明方案通过动态的广播Android系统中的状态信息,让处于其中的应用程序暴露其行为,不仅如此,自动化脚本的实现方式,大大提高了执行效率。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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