多层级Android系统恶意行为监控方法与流程

文档序号:11251272阅读:505来源:国知局
多层级Android系统恶意行为监控方法与流程

本发明涉及一种在android系统中对恶意行为进行监控的方法,属于计算机与信息科学技术领域。



背景技术:

随着智能手机的快速普及,移动互联网逐渐成为人们的主流上网媒介,正是因为其使用人数众多,传输于移动互联网上的信息量大且重要,因此移动互联网的安全已成为目前的主流安全威胁之一。在目前的移动智能平台中,苹果公司的ios系统和谷歌公司的android系统是最主流的智能手机操作系统,其中当属android系统占有率最高,因此成为众多恶意代码攻击的目标。恶意代码产生的危害巨大,不仅对用户造成巨大的经济损失,而且可能会使用户的隐私、密码等关键信息遭到泄露。

自从谷歌公司2010年发布android系统以来,其市场占有率迅速上升,现已超过八成份额。由于系统的开放性和应用的不规范性,导致大量恶意代码有机可趁,而且这些恶意代码的开发成本和难度往往都比较低。在android系统自身方面,存在着一些内核漏洞、系统库和应用框架层缺陷,而且由于系统本身的碎片化问题和厂商处理问题的滞后性,导致这些潜在的安全问题会长期存在。其中,资费消耗、恶意扣费和隐私窃取等安全问题呈上升趋势。

在对移动互联网设备的安全保护过程中,对android系统恶意行为的监控是保护设备用户的重要手段。移动终端的安全审计是对用户尝试的错误操作次数和与设备相关的安全事件进行分析的过程。当恶意代码向android系统设备发起安全攻击时,系统安全审计将会阻止恶意代码的运行,同时将相关安全行为记录日志并通知用户告警。这样就能在很大程度上阻挡恶意代码,避免用户造成巨大的财产损失。

目前对android系统中恶意行为监控的研究主要有五类方法,分别是系统定制法、字节码重构和重打包法、进程注入法、linux内核法和虚拟化法。这些方法都能检测出恶意代码对于android系统中某一层的攻击,有些能监控应用程序内部和跨应用的恶意行为,或者通过分析记录日志来监控恶意行为。

但目前常见的android系统恶意行为监控方法都或多或少有一些不全面性或难以操作性。对于基于系统定制的行为监控方法,由于需要对android系统进行一些改动,因此很难将其直接部署到已深度定制的android系统中。对于字节码重构和重打包法,由于需要修改被监控软件,因为会对其运行造成不稳定,同时也无法对系统预装软件和系统native层代码进行监控,等等。而且均存在反制技术对抗以上行为监控功能。



技术实现要素:

本发明的目的是:针对目前android系统恶意行为监控方法中的需要修改系统源码、需要修改被监控软件、监控全面性差、无法分析恶意代码的隐藏行为等问题,提出一种基于多层次交叉视图分析的android系统恶意行为监控方法,该方法能够在不修改系统源码和被监控软件的基础上对恶意行为实施监控。

本发明的设计原理为:在android系统的java层、native层、kernel层分别对系统函数调用实施监控。其中,在java层和native层都采用进程注入技术,分别通过拦截dalvik虚拟机和拦截binder通信数据包方法监控恶意行为;在kernel层采用可加载内核模块技术分析系统调用的参数,进而监控恶意行为。在对这三层进行恶意行为监控过程中,不仅阻止恶意行为的发生,记录安全日志并向用户告警,同时输出监控到的恶意行为监控列表1、2、3,而且还可通过相邻视图间的两两对比分析出存在的隐藏行为,输出隐藏行为列表。

本发明的技术方案是通过如下步骤实现的:

步骤1,采用进程注入技术监控处于java层的恶意行为,输出恶意行为列表1,具体实现方法为:

步骤1.1,将自定义的动态库注入到系统进程中,执行动态库中的自定义函数。

步骤1.2,该自定义函数获取所要拦截的函数的对象。

步骤1.3,设置该函数对象的标志位。

步骤1.4,修改该函数对象的成员变量值。

步骤1.5,最后构建行为列表1。

步骤2,采用进程注入技术监控native层的恶意行为,输出恶意行为列表2,具体实现方法为:

步骤2.1,将自定义动态库注入到系统进程中,执行动态库中的自定义函数。

步骤2.2,执行的自定义函数将进程中替换函数地址以及动态库中待替换的新函数地址信息传给注入程序。

步骤2.3,注入程序再次附加进程,定位,将待替换的新函数地址替换掉原始函数地址,最后解除附加目标进程让其重新运行。

步骤2.4,该新函数通过解析所拦截的binder数据包,判断恶意行为,进而起到监控作用。

步骤2.5,最后构建行为列表2。

步骤3,采用可加载内核模块技术对恶意行为进行监控,输出恶意行为列表3,具体实现方法为:

步骤3.1,首先将自定义模块动态地加载到linux内核中。

步骤3.2,该模块先获取到系统调用表的入口地址,然后替换内核系统调用。

步骤3.3,用户态的程序调用内核系统调用时,内核会优先执行替换后的系统调用,解析新系统调用解析的参数便可识别内核层的恶意行为。

步骤3.4,最后构建行为列表3。

步骤4,两两对比相邻恶意行为列表视图,分析出存在的隐藏行为,具体实现方法为:

步骤4.1,先比较列表的长度,再对比不同视图中的不同项。

步骤4.2,将列表中存在的不同行为输出成隐藏行为列表。

步骤4,通过两两比对通过上述步骤生成的相邻恶意行为列表视图,分析出存在于可信视图而不在非可信视图中的隐藏行为,具体实现方法为:

步骤4.1,首先对比相邻视图中恶意行为列表的长度,若相等,则不存在恶意隐藏行为,若不相等,则存在恶意隐藏行为,进入下一步骤。

步骤4.2,若某一个恶意行为出现在恶意行为列表2但未出现在恶意行为列表1,则此恶意行为称作java层隐藏行为;若某一个恶意行为出现在恶意行为列表3但未出现在恶意行为列表2,则此恶意行为称作native层隐藏行为。

有益效果

相比于目前的重打包技术、动态污点跟踪等方法,本发明提出的基于多层次交叉视图分析的android系统恶意行为监控方法,通过在java层、native层、kernel层分别监控输出恶意行为列表,根据相邻视图分析出隐藏恶意行为,从而在不修改系统源码,不修改被监控软件的情况下监控android不同层次上的恶意行为,而且支持攻击维度的检测,为用户提供更加细粒,更加全面的分析结果。

附图说明

图1为本发明提出的dalvik虚拟机的运行流程图;

图2为本发明提出的binder进程间通信模型;

图3为本法明提出的正常的系统调用执行链;

图4为本法明提出的被劫持的系统调用执行链;

图5为本法明提出的交叉视图分析模块设计;

图6为本发明提出的行为监控方法原理框图。

具体实施方式

为了更好的说明本发明的目的和优点,下面结合附图和实施用例对本发明方法的实施方式做进一步详细说明。在此,本发明的示意性实施用例及其中说明用于解释本发明,但并不作为对本发明的限定。

实施用例中包括1台智能手机,采用android系统。

第一环节

本环节的目的是监控java层的恶意行为,用dalvik虚拟机拦截技术来对java层的恶意行为进行监控,并输出恶意行为列表1,如附图1所示。具体实施步骤如下:

步骤1.1,以拦截phonewindowmanager类中的成员函数用于处理手机按键的interceptkeybeforequeueing函数为例,该成员函数在系统进程中被调用。首先使用进程注入技术,将自定义动态库注入到系统进程system_server中,执行该动态库中的自定义函数。

步骤1.2,该自定义函数截取java核心类phonewindowmanager中函数interceptkeybeforequeueing的对象method。

步骤1.3,设置函数interceptkeybeforequeueing的对象的标志位set_method_flag(method,acc_native)。

步骤1.4,修改method对象的成员变量nativefunc的值,使得method->nativefunc=&hookedmethodcallback,最后构建行为列表1。

第二环节

本环节的目的是监控native层的恶意行为,通过拦截并解析binder通信数据包方法来实现,并输出恶意行为列表2,如附图2所示。具体实施步骤如下:

步骤2.1,将自定义动态库注入到/system/bin/mediaserver系统进程中,执行动态库中的自定义函数。

步骤2.2,动态库中的自定义函数将动态库中的新函数ioctl地址信息和进程中ioctl函数地址信息输入注入程序。

步骤2.3,注入程序使用ptrace函数再次附加系统进程/system/bin/mediaserver,寻找到libbinder.so中扩展名为.got的section,将ioctl函数的新函数地址替换ioctl函数的原始地址,解除附加目标进程并重新运行。

步骤2.4,ioctl新函数在解析binder数据包时,若数据包的binder_transaction_data结构体里code的值为9,data.ptr.buffer的数据为“android.hardware.icamera”,则判断某应用调用了takepicture函数。如果该应用存在恶意行为,则阻止该应用的函数调用并通知用户,同时记录日志,最后构建行为列表2。

第三环节

本环节的目的是监控kernel层的恶意行为,对于该层的恶意行为监控通过劫持与替换系统调用方法来实现,并输出恶意行为列表2。具体实施步骤如下:

步骤3.1,利用动态可加载模块机制,在linux内核中动态地加载自定义模块,如附图3所示。

步骤3.2,该自定义模块获取系统调用表的入口地址,替换ioctl系统调用,如附图4所示。

步骤3.3,内核优先执行新的系统调用,并在该调用中解析参数,根据该参数可判断应用试图使用的系统服务,如果该应用是恶意程序,则阻止该应用的函数调用并通知用户,同时记录日志,最后构建行为列表3。

第四环节

本环节的目的是分析出隐藏的恶意行为。具体实施步骤如下:

步骤4.1,首先对比相邻视图中恶意行为列表的长度,若相等,则不存在恶意隐藏行为,若不相等,则存在恶意隐藏行为,进入下一步骤。

步骤4.2,若某一个恶意行为出现在恶意行为列表2但未出现在恶意行为列表1,则此恶意行为称作java层隐藏行为;若某一个恶意行为出现在恶意行为列表3但未出现在恶意行为列表2,则此恶意行为称作native层隐藏行为,如附图5所示。

下面以监控native层时,恶意代码调用系统拍照行为过程为例,说明本发明在上述实施用例中的整体运行流程:

1.将自定义动态库注入到/system/bin/mediaserver系统进程中,执行该动态库中的自定义函数。

2.执行的自定义函数将进程中ioctl函数地址以及动态库中待替换的ioctl新函数地址信息传给注入程序。

3.注入程序通过ptrace函数再次附加/system/bin/mediaserver进程,定位libbinder.so中名为.got的section,并搜索其项寻找ioctl的原始地址,将其替换为ioctl的新函数地址,最后解除附加目标进程让其重新运行,完成拦截。

4.该ioctl新函数通过解析binder通信数据包,发现数据包中binder_transaction_data结构体里code为9,data.ptr.buffer的数据为“android.hardware.icamera”,判断此应用程序调用了takepicture函数,即发生了拍照行为。

5.判断出该应用是不被信任的恶意程序,通知用户、阻止该函数被调用并记录日志,最后构建行为列表2。

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