一种Android软件动态行为分析中的路径感知方法与流程

文档序号:11829395阅读:257来源:国知局
一种Android软件动态行为分析中的路径感知方法与流程

本发明属于信息安全技术、Android恶意软件检测技术领域,具体涉及一种Android软件动态行为分析中的路径感知方法。



背景技术:

随着移动互联网的发展和智能手机的普及,基于Android系统的各类应用出现爆发式增长,截至2014年底Google Play上最新应用数量已经达到了143万,非官方应用电子商店提供的应用数量更为庞大。但在增长的同时,Android软件的安全性问题也不容忽视。2014年Android恶意软件继续保持高速增长。据阿里巴巴移动安全年度报告显示,2014年第四季度Android恶意软件感染设备量月均涨幅高达45%,感染安卓设备高达1833万台,阿里聚安全查杀病毒高达2528万个。大多数情况下,Android恶意软件具有恶意扣费、隐私窃取、短信劫持等恶意行为,其目标主要是获取用户的金融信息。例如源自俄罗斯的手机版Carberp木马可以窃取用户发送给银行服务器的登录数据。由此可见,Android软件安全性问题日益凸显,Android恶意软件越来越严重地威胁着终端用户的隐私和权益。

当前,企业界和科研院所已经加强了对Android恶意软件检测方法的研究。动态检测因其检测准确率高的优势,在Android恶意软件检测过程中起了关键作用。动态检测主要是把Android应用软件安装到Android沙箱上运行,并观察应用软件在沙箱中是否会实际调用敏感API来表现出恶意行为。这里的敏感API是指需要显式申请操作权限的系统调用函数。Android沙箱是在Android模拟器的基础上,对一些系统敏感API进行劫持,如果应用软件运行过程中调用这些敏感API时,就会被实时记录下来,证实该软件具有相应的恶意行为。目前,虽然动态检测的准确率高,可以记录恶意行为的触发,但是却无法获取恶意行为的整个函数执行路径及上下文环境。

Android软件动态行为分析技术目前面临的一个问题是如何有效自动化的验证被测软件具有的恶意行为,即动态分析仅仅能够检测出软件具有的敏感行为,却无法自动化的溯源整个执行路径现场,也就无法有效的验证敏感行为。因为通过动态分析给出的Android软件的恶意行为可能是与该软件无关的其他程序在满足某一特定条件下触发的,例如:Android沙箱在检测某被测软件时,此时与该软件无关的一个后台服务读取了用户通讯录信息,则动态沙 箱检测结果误报该被测软件存在读取通讯录行为。对此,业界的解决方法主要有两种,一是对被测程序进行代码插桩;二是输出敏感函数执行的函数调用栈信息。第一种方法被测程序代码插桩,需要修改被测软件smali代码,并对软件进行二次打包,由于目前Android软件中加入的代码对抗机制,导致一旦插桩Android软件运行就会报错,所以该方法的成功率不高。第二种方法输出敏感函数执行的函数调用栈信息,通过打印函数调用栈,获取敏感操作的执行路径,但是这种方法只能输出敏感操作的单条执行路径,无法确定执行过程中的其他操作,丢失了上下文信息。例如对于将电话号码通过网络外发的恶意行为,第二种方法可以确认被测软件获取了电话号码,但却无法验证电话号码通过网络进行了外发。因此,设计出一种Android动态行为分析中的路径感知方法显得尤为重要。



技术实现要素:

鉴于以上问题,本发明的目的是提供一种Android动态行为分析中的路径感知方法,通过获取Android软件运行时函数调用关系,并通过路径过滤去除系统API调用信息,大大提高了执行效率,从而解决了在一个基于Android动态行为分析环境里,无法高效输出被测软件程序执行路径的问题。

本发明首先通过在Android程序执行端获取函数两两调用信息,包括被测软件函数调用和操作系统函数调用。操作系统函数调用关系数目庞大,如果记录大量系统调用信息会在很大程度上影响程序执行端的性能,所以需要通过路径过滤去除系统调用信息。由于通过被测软件包名过滤操作系统函数调用的方式,软件包名的数量无法估计,而且在程序执行端函数调用中操作系统函数调用的数量远大于第三方软件函数调用的数量,所以,通过被测软件包名匹配进行过滤的方式,匹配成功率很低,性能低下,实际应用中,该方法很难实施。为了真正提高Android程序执行端的性能,本发明基于已知的操作系统API的包名,对函数调用关系的输出采用二级包名前端匹配的方法,对于二级包名匹配成功的函数调用进行过滤,从而过滤掉操作系统函数调用信息。获取被测软件函数调用信息后,路径解析通过对函数两两调用日志进行分析,从而生成完整的函数执行路径。

本发明从结构上主要包括三个部分:路径获取、路径过滤、路径解析。路径获取负责截获Android软件的函数调用信息,即在软件运行过程中获取发生函数调用时的主调函数和被调函数信息。路径过滤通过对已知的操作系统函数包名进行二级包名前端匹配,实现对已知的系统函数调用进行过滤。经过路径获取与路径过滤,函数调用日志信息被输出到动态行为分析模块的指定文件中。路径解析负责解析指定文件中的函数两两调用关系,将直接的函数调用进行拼接,同时由于Android中可以使用AsyncTask和Handler两种方式来进行异步处理, 所以路径解析也需要对文件中函数的间接调用,即异步调用进行查找与拼接,从而生成函数执行全路径。

本发明提供的技术方案如下:

本发明是采用路径获取和路径过滤相结合的方式在程序执行端获取Android软件执行过程中的函数两两调用关系,通过路径获取得到程序执行时的函数调用信息,然后通过路径过滤去除操作系统函数调用信息,最后通过路径解析得到被测软件的执行全路径。具体步骤如下:

1)获取函数调用信息。在对被测软件进行动态行为分析过程中,从程序执行端截获被测软件程序在发生函数调用时的主调函数信息和被调函数信息。

Android操作系统在执行函数调用时dalvik虚拟机使用invokeXXX指令完成调用操作,包括了invokeVirtual指令、invokeSuper指令、invokeInterface指令、invokeDirect指令、invokeStatic指令、invokeVirtualQuick指令、invokeSuperQuick指令,这些指令的内部调用关系如图1所示,由于这些指令均会调用invokeMethod指令,同时该指令中包含有主调函数和被调函数,所以路径获取首先通过invokeMethod指令获取函数调用的主调函数和被调函数信息。

2)路径过滤判断主调函数是否是系统函数。由于Android操作系统API函数调用数目庞大,如果记录所有的函数调用关系会带来系统性能的严重下降,所以需要过滤主调函数是系统API的调用。基于已知的操作系统API的包名,对函数调用关系中的主调函数采用二级包名前端匹配的方法,若匹配成功,则认为该主调函数是系统函数,否则认为该主调函数为被测软件函数。

本发明所述二级包名为JAVA包名中第二个分隔符之前的部分,例如com.android.xxx中,二级包名为com.android。本发明所述二级包名前端匹配的方法是指:(圈定Android操作系统API二级包名种子列表,提取主调函数所在类的二级包名,将该二级包名与种子列表进行精确匹配)。

3)打印被测软件函数两两调用关系。对于主调函数为被测软件函数的函数调用,打印主调函数和被调函数信息;对于主调函数是系统函数的函数调用,过滤该函数调用信息。

4)路径解析分析日志文件,生成函数调用全路径信息。软件运行完成后,所有日志信息被输出到动态行为分析模块的指定文件中,路径解析读取日志文件中函数两两调用关系,对直接函数调用按照函数名进行拼接,对间接函数调用按照不同的异步处理方式进行拼接,最终生成函数调用全路径信息。

5)判定检测结果。如果动态行为分析检测出软件具有敏感行为,并且有该行为对应的函数调用路径上下文信息,则可以自动化的验证该敏感行为。

与现有技术相比,本发明的积极效果为:

本发明能够获取被测软件敏感行为的整个执行路径,从而自动化的验证Android软件存在的敏感行为,而目前已知的两种方法分别存在成功率不高和只能获取敏感行为单条执行路径信息问题,均无法有效地输出整个敏感行为的执行路径上下文信息。同时,由于该技术使用了路径过滤方法,通过采用二级包名前端匹配的方式过滤了已知的操作系统API调用信息,提高了Android程序执行端的执行效率。

附图说明

图1是Android dalvik虚拟机invoke指令调用及本发明方法框架图。

图2是本发明方法的逻辑流程图。

图3是实施例中采用本发明方法生成的执行路径图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。

污点跟踪是Android软件动态行为分析的重要方法,通过跟踪敏感数据源,可以检测被测软件是否具有隐私泄漏等恶意行为。但是,目前的污点跟踪只是单纯的数据流分析,无法提供Android软件程序执行的控制流信息,所以,现有的动态污点跟踪方法无法对被测软件存在的敏感行为进行有效的验证,无法溯源。基于此,本发明使用了一种Android动态行为分析中的路径感知方法,其逻辑流程图如图2所示。

在污点跟踪路径感知插件中,当Android软件启动后,程序执行端开始截获软件执行时的函数调用指令(包括:invokeVirtual指令、invokeSuper指令、invokeInterface指令、invokeDirect指令、invokeStatic指令、invokeVirtualQuick指令、invokeSuperQuick指令),这些指令的内部调用关系如图1所示,由于这些指令均会调用invokeMethod指令,同时该指令中包含有主调函数和被调函数,所以路径获取首先通过invokeMethod指令获取函数调用的主调函数和被调函数信息,例如:路径获取截获函数调用中某主调函数为Lcom/baidu/mapapi/Mj;e()V。

在获取函数调用信息后,需要判断主调函数是否是操作系统函数。根据Android的开源性可知,已知的操作系统API的包名一般以Lcom/android/、Lcom/google、Lorg/apache/等字符串开头,因此可通过二级包匹配的方法名前端对主调函数进行判定。当遇到主调函数是操作系统函数时,不对该调用进行其他操作;当遇到主调函数是被测软件函数时,需要劫持该函数调用信息,方法是在invokeMethod指令中加上Log函数,把函数调用中主调函数和被调函数的函数名、参数、返回值都用Log函数进行打印,如该方法打印的某条日志为: Lcom/baidu/mapapi/Mj;e()V->Landroid/content/ContextWrapper;getSystemService(Ljava/lang/Stri ng;)Ljava/lang/Object;,这条日志表明被测软件函数Lcom/baidu/mapapi/Mj;e()V调用了函数Landroid/content/ContextWrapper;getSystemService(Ljava/lang/String;)Ljava/lang/Object;。

被测软件在污点跟踪模块运行结束后,所有日志信息输出到模块的/tmp/anal.log文件中,部分日志信息如下:

D/VARAS_ASMA(1872):1|

Lcom/baidu/mapapi/BMapManager;init(Ljava/lang/String;Lcom/baidu/mapapi/MKGeneralList ener;)Z->Lcom/baidu/mapapi/Mj;<init>(Lcom/baidu/mapapi/BMapManager;Landroid/content/Con text;)V

D/VARAS_ASMA(1872):1|

Lcom/baidu/mapapi/Mj;<init>(Lcom/baidu/mapapi/BMapManager;Landroid/content/Context;)V->Lcom/baidu/mapapi/Mj;e()V

D/VARAS_ASMA(1872):1|

Lcom/baidu/mapapi/Mj;e()V->Landroid/content/ContextWrapper;getSystemService(Ljava/lang/String;)Ljava/lang/Object;

D/VARAS_ASMA(1872):1|

Lcom/baidu/mapapi/Mj;e()V->Landroid/telephony/TelephonyManager;getDeviceId()Ljava/lan g/String;

接着,路径解析读取/tmp/anal.log文件中函数两两调用关系,通过自上而下读文件的方式对两两函数调用进行拼接。对于直接函数调用,日志解析直接根据被调函数名向下查找与其相同的主调函数名。对于间接函数调用,日志解析根据不同的异步处理方式对函数调用进行拼接,如当遇到函数名中包含“;onPreExecute(”字符串时,可初步确定存在AsyncTask类的异步调用,所以需要向下查找相同类名下函数名中包含“;doInBackground(”字符串的函数进行拼接;当遇到函数名中包含“;start()V”字符串时,初步确定此处存在线程启动,路径解析则向下查找相同类名下函数名中包含“;run()V”字符串的函数进行拼接。拼接完成后,即得到完整的被测软件函数执行路径。

如果动态污点跟踪模块中初步确认被测软件有敏感信息泄露,如:<?xml version='1.0'encoding='utf-8'standalone='yes'?>.<map>.<string name="device_id">86404600],该信息表明被测软件可能存在泄露设备IMEI的敏感行为,则可通过检测函数执行路径中是否有该敏感操作对应的函数调用路径上下文信息,完成动态污点跟踪模块对被测软件的判定。

为了验证本发明动态路径感知方法对软件分析效率的影响微小,本实验对比了污点跟踪 模块使用路径感知方法记录函数调用前后的分析时间,结果如表1所示。对比显示,采用本发明方法记录函数调用关系并没有影响分析效率。

表1.使用路径感知方法记录函数调用前后的分析时间

由于Android操作系统API函数调用数目庞大,如果记录所有的函数调用关系会带来系统性能的严重下降,所以本发明采用了二级包名前端匹配的方法过滤主调函数为系统API的调用。表2显示了被测软件在采用二级包名前端匹配方法过滤前后的对比,结果表明由于本发明的二级包名前端匹配,被测软件函数调用关系的获取效率大大提高。

表2.采用二级包名前端匹配方法过滤前后的对比

使用动态路径感知方法,对函数调用关系进行解析提取,生成的执行路径图如图3所示,深色阴影所示的节点表示应用的敏感操作,浅色阴影所示的节点表示调用的函数名称。使用该方法能够高效的实时分析被测软件的函数执行路径信息,为软件敏感行为的检测提供了有力的证据。

表3是常用的Android动态路径执行信息获取的方法对比,结果显示本发明的动态路径感知方法相对其他方法具备一定的优势。

表3.常用的Android动态路径执行信息获取的方法对比

本发明可以应用于Android动态行为分析中,上述实施例仅是其中的一个示例。其他实施例还包括了动态行为沙箱的路径感知、动态手工分析的路径感知等方面。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

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