孙骁永,王伟,霍玮,周建华
1.中国科学院信息工程研究所,北京100195
2.中国科学院大学网络空间安全学院,北京100190
动态事件序列制导的Android应用漏洞验证技术
孙骁永1,2,王伟1,霍玮1,2,周建华1
1.中国科学院信息工程研究所,北京100195
2.中国科学院大学网络空间安全学院,北京100190
CNKI网络出版:2017-06-22,http://kns.cnki.net/kcms/detail/11.2127.TP.20170622.1849.006.html
智能手机由于其越来越丰富的功能和便捷性,逐渐成为人们生活中不可缺少的一部分。除了基本的语音通话、短信收发等功能外,人们对社交通讯、购物、游戏等功能有了更大的需求,这使得智能手机数量出现了快速增长,得到了广泛的推广和应用。而Android系统由于其开源和免费的特性,占据了大量的智能手机市场份额。IDC数据显示,截止2015年第二季度,搭载了Android系统的智能手机市场份额达到82.8%,远远高于第二名Apple的市场份额13.9%[1]。
但是现在Android应用市场上的应用良莠不齐,市场上存在很多黑客开发并上传的恶意应用或者是存在安全隐患的应用。网蛙科技检测结果显示,截至2015年底,超过95%以上应用含有不同类型的安全漏洞,高危漏洞比例达到16%。
目前Android应用漏洞的检测技术主要采用静态检测和动态检测[2]。静态检测是针对漏洞模式制定好规则,通过对应用源码直接进行静态分析来发现漏洞的方法。静态检测的优点是代码覆盖率高、能够自动化挖掘漏洞,缺点是针对性不强,误报率较高。动态检测是在虚拟机、沙箱等受控系统环境中实际运行待测应用,记录其各项行为和对系统以及其他应用造成的影响,鉴别应用是否具有漏洞或恶意行为。动态检测方法的优点是可以绕过静态检测技术遇到的native层代码、反射或代码混淆等问题,缺点是效率和代码覆盖率较低。
本文针对以上方法的局限性,首次提出了动态事件序列制导的Android应用漏洞验证技术,自动化检测Android应用漏洞,并对漏洞是否真实存在进行验证,提高了输出漏洞的准确率。该技术基于静态嫌疑漏洞触发路径的入口函数,使用自动化UI触发的方法生成Activity跳转关系图,对漏洞嫌疑路径进行精确制导,并输出相关API的序列,以此验证漏洞触发嫌疑路径是否执行,提高了输出漏洞的有效性,可以显著提高应用漏洞分析效率,提高分析工具的可用性。
动态事件序列制导的Android应用漏洞验证技术输入是目标应用,输出是验证后的应用漏洞信息以及触发漏洞的事件序列。
首先,使用静态分析方法根据漏洞的特征对应用程序源代码进行切片和特征提取,最后获得漏洞触发的嫌疑路径。
然后,使用基于回退机制的UI遍历算法对应用进行自动化UI遍历,生成Activity跳转关系图和触发条件信息。由于部分应用存在模拟器对抗问题,当运行环境为模拟器时可能造成应用崩溃或无法操作等情况,为了解决这种问题,本方法同时部署在真机和模拟器上,采用策略调度算法智能调配真机和模拟器。同时,存在登录等情况,需要输入特殊字符才会引发组件跳转,这会造成部分应用组件不可达的问题,为了解决这种问题,开发了界面输入条件构造模块,根据每个应用组件直接触发所需的关键参数信息,构造合适输入强制触发执行这些应用组件,以此提高覆盖率。
最后,本文根据静态分析获得的漏洞入口函数和Activity跳转关系图获得漏洞的触发路径,然后根据触发信息对漏洞进行触发,并输出相关API序列,最后对漏洞触发嫌疑路径是否执行进行验证,以保证输出的漏洞嫌疑路径信息的准确性。
本方法通过实验对10 122个应用进行了检测。实验结果表明本文提出的方法在覆盖率、准确性和效率上都有良好的表现。
本文的主要创新点和贡献如下:
(1)提出了基于回退机制的UI遍历算法,能够减少现有算法中的冗余跳转,提高自动化UI遍历的效率。
(2)从两方面考虑提高覆盖率:交互性问题造成的应用组件执行缺失情况和模拟器对抗情况。为了解决第一个问题,开发了界面输入条件构造模块,构造合适的输入,系统触发强制执行这些应用组件。对于第二个问题,将算法部署在真机和模拟器上,然后智能调配两者。
(3)根据提出的动态事件序列制导的Android应用漏洞验证技术实现了一个检测系统,并对现实中的应用进行漏洞检测。
Google play和第三方Android应用市场上的应用可能存在漏洞,导致手机中保存的用户敏感信息发生泄露或恶意扣费等问题,所以Android应用漏洞检测成为当下研究热点。
现有的国内外Android应用漏洞检测技术大致分为两类:静态检测和动态检测。同时,随着应用数量逐年递增,应用漏洞检测技术越来越强调对海量应用的检测,而大规模自动化分析应用的一个关键问题是如何快速有效地触发应用的各种潜在行为[3-4]。
AndroidLeaks[5]工具能够大规模分析应用,查看应用是否存在隐私泄露问题,它将Dalvik字节码转换为Java字节码,然后使用WALA进行静态污点跟踪。FlowDroid[6]工具是一个针对Android应用的高精度静态污点跟踪系统,它通过分析待测应用的字节码和配置文件,找出潜在的漏洞。EdgeMiner[7]工具静态分析整个Android框架,自动生成描述隐式控制流转换的API概要,能够帮助现有的静态分析工具更好地处理回调。IccTA[8]工具是一个静态污点分析系统,能够检测应用组件间的隐私泄露。但是,这些静态分析工具不适用于分析GUI组件,比如按钮,而且这些工具不能获得运行时信息,同时静态分析很难分析加密加壳应用。本文提出的方法结合了动静态分析方法,而且可以分析GUI组件,获得应用运行时信息。
现在的Android应用开发大量采用native层代码、反射和代码混淆等技术,这些技术使得静态分析工具很难全面分析应用。研究人员为了克服这种限制,更全面地分析应用行为,经常结合动态分析技术和UI自动化触发技术来分析应用。SmartDroid[9]工具采用动静态分析结合的方法,通过自动化的UI交互,触发特定的行为。但是SmartDroid使用静态分析指导动态分析的方法,这使得动态分析极度依赖于静态分析结果,而静态分析不能全面分析各类UI又有高误报率的特点,而且SmartDroid使用的动态分析存在较多冗余跳转,降低了分析效率。TaintDroid[10]工具是一个高效的、全系统动态污点跟踪和分析系统,可以同时跟踪多个敏感数据来源。但是,TaintDroid是一个被动检测方法,它需要提前知道触发敏感信息泄露的触发条件,然后进行手动触发,确定敏感信息泄露行为。当面对一个未知的恶意样本时,TaintDroid的检测能力大大降低,这使得Taint-Droid很难用于大规模自动化分析。而本文的方法可以自动化地遍历UI路径,比TaintDroid更适用于自动化分析。SMV-HUNTER[11]工具是一个大规模自动化识别SSL/TLS证书验证不规范漏洞的系统,结合了动静态分析方法。SMV-HUNTER的动态分析方法使用的UI自动化触发方法还较为简单,很多交互操作没有完成。
UI触发技术常用于自动化分析应用,可以发现应用是否存在潜在的恶意行为、信息泄露等行为。现有的UI触发技术面临的挑战是如何产生有效的输入,以提高应用触发的覆盖率。Android应用是事件驱动的,UI触发技术常常模拟UI事件,如:点击、滚动和文本输入等,或者系统事件,如通知或接收短信等。UI触发技术常常采用不同的策略来产生这些输入,策略可分为三类:随机的触发策略、基于模型的触发策略和系统化的触发策略[12-13]。
(1)随机的触发策略:使用随机触发策略的UI触发技术常用于测试应用的健壮性,而且可以很有效地测试应用是否有拒绝服务漏洞。Monkey是一个黑盒测试,用户使用时需要首先确定Monkey测试的事件个数,然后Monkey进行随机触发,当测试事件个数达到这个数字时结束分析。Dynodroid[14]虽然也采用随机触发策略,但是它使用的策略更智能,它可以根据语境信息,忽略一些发生概略较低的事件,更多地选择上下文相关的事件,以此提高触发的有效性。VanarSena[15]工具是构建在云端的,用户将应用上传上去,该工具的Monkey Manager模块会管理一批Monkey去分析应用,然后收集应用的崩溃信息。使用随机触发策略可用于进行压力测试,但是它不能很好地产生有效输入,而且不能明确对应用行为的覆盖率是高是低。
(2)基于模型的触发策略:一些测试工具通过建立应用的GUI模型来生成事件序列,并系统化地探测应用行为。PUMA[16]是一个可编程的框架,包含了一个通用的UI自动化技术和脚本语言PUMAScript。用户可以使用PUMAScript自定义想处理的事件,然后这个脚本会驱动UI自动化技术去搜索。该工具可以很方便地扩展到其他动态分析上。基于模型的触发策略一般也只关注于UI交互,然而一些事件可能只会改变应用的内部状态但是不会造成GUI的变化,对于这些事件,基于模型的触发策略不能处理。
(3)系统化的触发策略:一些应用行为需要特定的输入才会触发,为此一些测试工具结合了其他技术如符号化执行和启发式算法以指导搜索哪些未覆盖到的代码。SIG-Droid[17]是一个系统化测试Android应用的框架,使用从应用源码中自动化提取的GUI模型,并结合符号化执行技术去推断测试输入,确保覆盖程序中的每个访问分支。采用系统化的触发策略比随机策略有更高的应用覆盖率,但是这种方法的可扩展性较差。
本文提出的动态事件序列制导的Android应用漏洞验证技术,能够快速有效地触发应用的漏洞,并对漏洞进行验证。系统框图如图1所示,该系统由3部分组成:静态分析模块、触发信息收集模块和漏洞验证模块。
(1)静态分析模块:根据漏洞的特征对应用程序源代码进行切片和特征提取,最后获得漏洞触发的嫌疑路径。该模块主要对已知漏洞模式的漏洞进行分析。
(2)触发信息收集模块:该模块采用智能有规律的UI遍历算法获取应用的Activity跳转关系进而生成Activity跳转关系图,同时为了解决部分应用组件触发缺失的情况,构造UI的输入条件,系统触发应用组件,补全Activity跳转关系图。该模块为后续的漏洞验证模块提供支持,包含两个子模块:基于回退机制的UI遍历和界面输入条件构造。
①基于回退机制的UI遍历:本文在现有的应用UI触发技术的基础上,模拟用户自动化执行应用程序有序触发Activity跳转,当执行到叶子节点后执行回退,减少冗余跳转,最后实现了基于回退机制的UI遍历算法。本系统将该算法同时部署在真机和模拟器上,采用策略调度机制智能调配真机和模拟器,以解决模拟器对抗问题。
②界面输入条件构造:对于由于交互性问题造成的UI执行序列缺失情况,本文通过使用IC3[18]工具分析各应用组件直接触发所需要的参数信息,然后根据参数信息构造合适的输入条件,为漏洞验证模块系统触发应用组件提供信息支持。
(3)漏洞验证模块:该模块根据静态分析模块获得的漏洞信息和触发信息收集模块生成的Activity跳转关系图,获得从应用入口点到漏洞入口函数的路径,然后根据触发条件信息对漏洞进行触发。如果路径获取失败,则系统触发漏洞所在组件,最后根据应用运行过程中输出的日志信息验证漏洞是否真的触发,以此提高输出的漏洞信息的准确率。该模块包含两个子模块:触发和验证。
①触发:包括UI触发和系统触发两个功能,优先使用UI触发。UI触发功能根据静态分析模块获得的漏洞入口函数在触发信息收集模块生成的Activity跳转关系图上进行遍历,获得从应用入口Activity到漏洞入口函数的调用路径,然后根据Activity跳转的触发信息进行UI触发,直至触发到漏洞入口函数。如果Activity跳转关系图上没有这条路径,那么根据界面输入条件构造的结果,利用系统触发的方式强制执行目标入口。系统在Android Framework上对应用运行过程中涉及的各个关键函数添加了日志输出,在触发应用Activity跳转时,会有关键日志信息输出,这些日志信息会提供给验证模块对漏洞是否真的执行进行验证。
②验证:对触发子模块输出的日志信息进行控制流分析,获取应用运行时函数调用关系,通过路径过滤去除系统API调用信息,高效输出应用执行路径信息。然后和静态分析生成的嫌疑路径进行对比,输出可执行的嫌疑路径,以此对是否触发到漏洞进行验证,提高输出漏洞信息的准确率。
最后输出漏洞相关信息以及漏洞触发的时间序列,方便研究人员对漏洞进行人工分析。
图1 动态事件序列制导的Android应用漏洞验证技术系统框图
3.2.1 基于回退机制的UI遍历算法
现有的应用输入生成技术都是静态分析辅助动态UI遍历,但是静态分析难以精准获得Activity跳转路径。UI遍历算法采用的策略有随机触发和基于模型的触发和系统化触发等,其中随机触发策略效果可能很好也可能很差,并不受人为的控制,而基于模型的触发策略可能存在冗余Activity跳转,降低了分析效率,比如SmartDroid,在分析完一条嫌疑路径后,会重启模拟器从应用入口Activity重新遍历,这会造成部分路径重复遍历了多遍,而且该系统使用的Activity限制方式是对Activity跳转关系进行限制,比如Activity A->Activity B和Activity B->Activity A就是两种情况,这会造成路径上可能存在环,导致冗余Activity跳转,降低了分析效率。系统化触发策略常常使用符号化执行等方法,目的是有效触发所有的漏洞嫌疑路径,而目的是证明漏洞是存在的,不需要验证所有的漏洞嫌疑路径,所以采用基于模型的触发策略就足够了。
为了解决上述问题,本文提出的基于回退机制的UI遍历算法,使用动态UI遍历的方法获得应用Activity跳转关系图,并在遍历到叶子Activity时执行回退,返回到上一个Activity继续进行遍历,以此减少冗余跳转。
基于回退机制的UI遍历算法包含两个部分:Android客户端和服务端。Android客户端是一个经过修改的Android系统,通过在Framework层上修改Android源码,对Android关键API进行插桩,实现Activity限制、UI交互模拟和信息收集三个功能。服务端实现初始化Activity限制、启动模拟器、启动应用、回退、日志记录和解析日志等功能。基于回退机制的UI遍历算法的流程图如图2所示。算法流程分为三个阶段:准备阶段、遍历阶段和解析阶段。
(1)准备阶段
准备阶段包括获取应用所有的Activity,并用之初始化Activity限制。然后启动模拟器启动应用,为遍历阶段做准备工作。
服务端首先获取应用声明的所有Activity,然后将这些Activity传给客户端作为Activity限制的初始值,Activity限制中存储的是允许跳转的目标Activity,当UI交互模拟引发应用Activity跳转时,会在Activity限制中查询,如果Activity限制中存在目标Activity,那么说明之前没有遍历过目标Activity,允许执行这个跳转,同时将目标Activity在Activity限制中删除,以免以后再次跳转到该Activity,如果Activity限制中没有目标Activity,那么说明目标Activity之前已经遍历过了,禁止执行该跳转可以避免造成冗余跳转。
初始化Activity限制后,服务端启动Android模拟器,然后启动应用。因为现在的应用经常含有一个欢迎界面,应用一般会在欢迎界面停留几秒钟,然后自动跳转到入口Activity。为此,启动应用后判断应用处于入口Activity时进行自动化UI遍历。
(2)遍历阶段
遍历阶段分为三个步骤:观察、交互和回退,在观察阶段算法有序遍历当前Activity上的所有控件,然后进入交互阶段,对这些控件进行自动化触发,在回退阶段对当前Activity进行判断是否是叶子Activity,即在Activity限制下已经对该Activity上的所有控件都进行了模拟交互,并且没有引发Activity跳转,那么该Activity为叶子Activity。如果是叶子Activity执行回退,然后进入新一轮的观察、交互和回退。这三个步骤循环执行,直到应用入口Activity为叶子Activity时退出。
观察阶段会获取当前界面上的所有可见控件。Android应用的UI被组织成Hierarchy Viicewer的形式,每一个Activity都是一组UI元素的布局集合。首先获取当前Activity上的根视图,以此获得当前界面的所有控件句柄。
交互阶段有序地对观察阶段获得的控件句柄进行UI交互模拟,进行的模拟交互操作包括:点击、滑动、文本输入、选择、长按等,通过这些操作促使Activity发生跳转。然后根据Activity限制的规则判断是否允许该跳转,图3为单个Activity的UI遍历策略。
回退阶段会判断当前Activity是否是叶子Activity。如果当前Activity是叶子Activity,那么在服务端执行回退功能,回退功能成功执行后会回退到当前Activity的前一个Activity,然后在前一个Activity上进入新一轮的观察和交互阶段,因为已经在Activity限制中删除了当前Activity,所以在前一个Activity上执行UI交互模拟不会引发跳到当前Activity的跳转。如果回退功能发生错误导致回退失败,比如开发者对回退事件进行了重写,此时服务端会对Activity限制进行修复,将入口Activity到前一个Activity路径上的所有Activity重新添加到Activity限制中,同时重新启动应用入口Activity,进入观察和交互阶段,保证应用分析不会产生执行序列缺失的情况。
图2 基于回退机制的UI遍历算法流程图
图3 Activity遍历策略
(3)解析阶段
解析阶段通过对应用自动化运行过程中的日志记录功能输出的日志信息进行解析,最后生成Activity跳转关系图及跳转条件。
通过修改Android源码对关键API进行插桩,服务端的日志记录功能可以记录应用分析过程中的所有日志信息,然后获取到发生跳转的Activity关系信息,同时也对因为Activity限制而禁止的Activity跳转信息进行记录,因为这也是一条跳转关系,只是为了减少冗余跳转才对其进行禁止的,所以也需要记录禁止的Activity跳转,这样才不会造成Activity跳转关系缺失,最后通过解析日志文件即可生成该应用的Activity跳转关系图。
3.2.2界面输入条件构造
使用基于回退机制的UI遍历算法获取应用的Activity跳转关系可能存在部分应用组件不可达的情况,比如登录等需要输入特定字符串才会触发跳转,这些情况会导致漏洞验证模块无法获取到漏洞触发路径,进而导致漏洞验证失败。
为了解决这些问题,开发了界面输入条件构造模块,添加了与人交互的接口,当遇到登陆问题时可以使用该接口由人输入特定字符串。同时,该模块使用工具IC3获取每个Activity、服务和广播启动需要的参数信息,然后根据这些参数信息构造合适的输入,系统触发强制执行应用组件,以此提高漏洞触发成功率,其流程图如图4所示。
3.2.3 算法通用性
论文提出的基于回退机制的UI遍历算法可以同时部署在模拟器和真机上,具有较强的通用性。
将基于回退机制的UI遍历算法部署在模拟器上大规模自动化分析应用,发现Android模拟器对系统环境要求较高,在低配置环境下运行模拟器运行速度十分缓慢,甚至会有模拟器启动失败的情况发生。此外,发现部分应用会对运行环境有要求,比如请求SD卡、摄像头等,这需要在创建模拟器时对其进行相关配置,这又使得模拟器对系统环境有更高的要求,甚至有些应用会检测运行环境是否为模拟器,如果是模拟器的话就会运行报错。为了解决模拟器对抗问题,扩展算法,使其同样可以部署在真机上,然后采用策略调度机制智能调配真机和模拟器,提高了应用分析成功率。
在真机上动态分析Android应用需要解决的问题是应用对真机环境的影响。有一些应用的删除方法会较为复杂,难以用通用的方法将其删除,或删除后仍然遗留部分文件影响真机环境。引入了环境恢复的方法,当分析完应用使用通用的方法未能删除应用,或存在残留文件时,启用环境恢复,将真机环境恢复为最初的状态。
图4 界面输入条件构造流程
本文通过实验来评估动态事件序列制导的Android应用漏洞验证技术的有效性,并与SmartDroid工具的动态分析模块进行对比分析。
系统的服务端主要由Python脚本语言实现,Android客户端是通过修改Android Framework层定制的Android系统。所有的实验都是在内存为8 GB的虚拟机上完成。
4.2.1 实验:证明基于回退机制的UI遍历算法的有效性
评估一个UI遍历算法是否是有效的,需要从时间消耗、覆盖率和输出跳转条件是否准确这三方面进行确认。为此从百度移动应用、安智市场、应用宝等15家国内电子市场和Google Play上选取了10 122款应用。
(1)时间消耗
由于基于回退机制的UI遍历算法和界面输入条件构造这两部分没有先后顺序,可以同时进行,所以算法总的时间消耗是这两部分的最大值。其中IC3工具分析一款应用的平均时间消耗约为2 min,而基于回退机制的UI遍历算法分析一款应用的时间消耗基本都在2 min以上,所以引入界面输入条件构造功能,并不会给算法带来更多的时间消耗。
将基于回退机制的UI遍历算法和不使用回退机制的UI遍历算法(扩展自SmartDroid的动态分析部分)进行对比,测试集为10 122款应用。在相同配置的虚拟机上运行这两个动态分析算法,分析对比遍历获得的Activity跳转数量和算法运行时间的关系。
对比基于回退机制的UI遍历算法和不使用回退机制的算法结果,由于篇幅有限,仅截取部分应用进行展示见图5,可以看到基于回退机制的UI遍历算法在效率上比SmartDroid的算法平均提升59.21%,其中效率最高提升达到了83.33%。效率提升是通过平均每跳时间来计算的,即运行的总时间除以生成的总跳转数量。同时,在实验结果中发现有128个应用效率降低了,经分析是由于回退失败造成的,这些应用在实现过程中对回退事件进行了重写,导致算法分析进行回退时发生失败,但这部分应用只占测试集的1.26%,并且效率降低最高为22.22%。统计实验中回退失败的比例为5.78%,对整体分析效果来说在可以容忍范围内。从实验结果来看,基于回退机制的UI遍历算法采用的回退机制和Activity限制方式确实能够减少分析中的冗余跳转,提高分析效率。
(2)Activity跳转关系覆盖率
由于交互性问题或模拟器对抗问题,导致自动化UI遍历不能够有效触发应用所有组件,比如有些跳转需要特定字符串才能成功触发等等,还有部分应用在模拟器上运行时根本无法操作,为此引入的界面输入条件构造模块,并采用策略调度机制智能调配真机和模拟器。对比基于回退机制的UI遍历算法和SmartDroid算法,分析10 122款应用,仅截取部分应用进行展示见图6,Activity跳转关系覆盖率平均提升了42%,其中最高提升了225%,没有发现覆盖率降低的应用。其中,使用基于回退机制的UI遍历算法输出的Activity跳转数减去SmartDroid算法输出的跳转数,然后除以Smart-Droid算法输出的跳转数,该结果作为Activity跳转关系覆盖率提升百分比。
(3)输出跳转条件的准确率
使用基于回退机制的UI遍历算法对测试集中应用进行了分析,根据其输出的Activity跳转条件信息进行手动确认。算法获取Activity跳转触发条件的方法是通过修改Android Framework层源码,当模拟的交互引发Activity跳转时,会记录该操纵类型,比如点击、滑动等,同时会获取相应控件的句柄,然后Android本身会记录控件的相对位置,据此通过遍历父控件可以计算出控件的中心坐标,之后将操作类型和控件坐标信息交给外部的控制端,最后外部控制端会采用adb shell input的方式根据坐标信息执行相应的操作。因此只要外部控制端在执行操作的时候没有弹出框的遮挡,执行的操作就会成功。通过以上分析,修改了Android Framework层源码,屏蔽了应用弹出框,所以理论上基于回退机制的UI遍历算法获得的Activity跳转触发条件准确率应该是100%。对分析输出的2 000款应用的路径信息进行手工确认,结果也是全部执行成功。
4.2.2 实验:证明嫌疑路径验证的有效性
静态分析方法输出的嫌疑路径准确率较低,很多路径都是不可达的,使用系统对10 122个应用进行自动化分析,静态分析共发现大约300万条嫌疑路径,本文系统成功验证了大约190万条路径,验证成功率为64%。采用随机触发策略的Monkey对嫌疑路径进行UI触发,路径验证成功率只有31%,远远低于本文系统。实验结果见表1。
图5 算法效率对比实验
图6 算法覆盖率对比实验
表1 嫌疑路径验证功能有效性实验结果
4.2.3 实验:证明系统检测漏洞的有效性
选取10 000个应用作为测试集,包括通过360APP漏洞扫描平台和人工确认的方式,选取5 000个包含WebView远程代码执行漏洞、拒绝服务漏洞、文件目录遍历漏洞、Https空检验漏洞等已知漏洞模式的应用和5 000个无漏洞的应用,然后使用系统对该测试集进行漏洞检测。
其中T为包含漏洞的应用个数,即5 000;A为确认含有漏洞的应用集合;B为系统输出的含有漏洞的应用集合。实验结果见表2。从结果来看召回率为96.12%,误报率为2.66%,从实验结果来看,系统能够有效检测应用漏洞。
表2 系统检测漏洞有效性实验结果
本文提出的动态事件序列制导的Android应用漏洞验证技术主要优点有以下几方面:
(1)本文提出的UI遍历算法较其他遍历算法在效率上有较好的提升,同时引进了界面输入条件构造,能够解决输入问题,很好地提高应用覆盖率,并且输出准确的跳转触发条件,能够确保后续验证时能够准确触发漏洞。
(2)能够有效验证静态分析生成的嫌疑路径。
(3)对现实世界中的大量应用进行的自动化分析,输出漏洞信息准确率也很高,达到96.12%。
第4章介绍了动态事件序列制导的Android应用漏洞验证技术的主要优点。本篇论文提出的基于回退机制的UI遍历算法和界面输入条件构造在分析效率和覆盖率上有所提高,而且能够输出准确的跳转条件信息,最后输出的漏洞触发路径由于经过了验证,其准确率也很高,极大地提高了分析人员的分析效率。但是该技术的实现还有一些局限性,这需要在下一步工作中加以解决:
(1)系统的界面输入条件构造模块使用的工具IC3不仅能够分析应用组件直接触发所需要的输入信息,还可以分析组件之间交互时传递的信息,为了获得这些信息,IC3在分析应用时会进行大量的递归操作,这使得IC3对机器内存要求较高,分析复杂应用时耗时较长,甚至存在分析失败的可能。下一步工作需要对IC3进行简化,只保留其分析获取组件直接触发所需要的输入信息功能。
(2)漏洞验证模块验证应用漏洞时会在触发信息收集模块生成的Activity跳转关系图上遍历获得漏洞触发路径,或者是界面输入条件构造系统触发服务或广播接收,对于一些系统事件如短信接收等引起的应用漏洞,系统暂时还不能进行验证。下一步工作需要扩展Activity跳转关系图,将系统事件的触发方式添加到Activity跳转关系图上。
(3)静态分析模块还不能够分析native层的代码,但是应用开发者很可能会将漏洞或敏感行为隐藏在native层代码中,这会导致系统分析应用漏洞存在漏报。下一步工作需要将native层代码分析功能加入静态分析模块。
(4)由于使用了静态分析,使得系统难以分析加壳应用,为此在系统中可以引入判断应用是否经过加壳的功能,以此决定系统流程。当应用经过加壳后,直接进行动态UI遍历算法生成Activity跳转关系图,然后验证模块触发所有路径,查看输出的日志信息是否包含漏洞的关键API序列,以此完成加壳应用的漏洞检测。
本文采用动静结合的方法提取Android应用静态嫌疑触发路径的入口条件,然后使用基于回退机制的UI遍历算法生成Activity跳转关系图,根据该图使用自动化UI触发的方法对嫌疑路径进行精确制导,同时对是否真的执行漏洞触发函数进行验证。一方面能够对海量应用进行自动化分析,并能稳定准确输出漏洞信息,另一方面提高了动态UI自动化触发的效率。使用该系统对10 122个应用进行分析,实验结果表明系统在效率和大规模分析上都有良好的表现。下一步工作将研究简化界面输入条件构造所用工具,加入符号化执行等技术提高应用覆盖率,扩展Activity跳转关系图,加强静态分析,使其能够分析native层代码。
[1] Smartphone OS Market Share.2015 Q2(IDC)[EB/OL].(2015-08).http://www.idc.com/prodserv/smartphone-os-marketshare.jsp.
[2] 唐宇敬.Android平台下软件安全漏洞挖掘方法研究[D].河北邯郸:河北工程大学,2013.
[3] 张玉清,方喆君,王凯,等.Android安全漏洞挖掘技术综述[J].计算机研究与发展,2015,52(10):2167-2177.
[4] 彭国军,程德智,赵豪东,等.面向Android软件动态行为监测的UI自动化触发与测试方法[J].保密科学技术,2014(10):29-35.
[5] Gibler C,Crussell J,Erickson J,et al.AndroidLeaks:Automatically detecting potential privacy leaks in android applications on a large scale[C]//Proceedings of the 5th International Conference on Trust&Trustworthy Computing(TRUST’12),Vienna,Austria,2012:291-307.
[6] Arzt S,Rasthofer S,Fritz C,et al.Flowdroid:Precise context,flow,field,object-sensitive and lifecycle-aware taint analysis for android apps[C]//Proceedings of the 35th Annual ACM SIGPLAN Conference on Programming Language Design and Implementation(PLDI 2014),Edinburgh,UK,2014,49(6):259-269.
[7] Cao Y,Fratantonio Y,Bianchi A,et al.EdgeMiner:Automatically detecting implicit control flow transitions through the Android framework[C]//Proceedings of the ISOC NetworkandDistributedSystemSecuritySymposium(NDSS 2015),San Diego,California,USA,2015.
[8] Li L,Bartel A,Bissyandé T F,et al.IccTA:Detecting intercomponent privacy leaks in Android apps[C]//Proceedings of the 37th International Conference on Software Engineering(ICSE 2015),Firenze,Italy,2015:280-291.
[9] Zheng C,Zhu S,Dai S,et al.Smartdroid:An automatic system for revealing ui-based trigger conditions in android applications[C]//Proceedings of the Second ACM Workshop on Security and Privacy in Smartphones and Mobile Devices(SPSM 2012),Raleigh,NC,USA,2012:93-104.
[10] Enck W,Gilbert P,Han S,et al.TaintDroid:An informationflow tracking system for realtime privacy monitoring on smartphones[C]//Proceedings of the 9th USENIX Conference on Operating Systems Design and Implementation(OSDI 2014),Berkeley,CA,USA,2014:1-29.
[11] Sounthiraraj D,Sahs J,Greenwood G,et al.Smv-hunter:Large scale,automated detection of ssl/tls man-in-themiddle vulnerabilities in Android apps[C]//Proceedings of the 21st Annual Network and Distributed System Security Symposium(NDSS 2014),San Diego,California,USA,2014.
[12] Choudhary S R,Gorla A,Orso A.Automated test input generation for android:Are we there yet?(E)[C]//Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering(ASE 2015),Lincoln,Nebraska,USA,2015:429-440.
[13] Moran K,Linares-Vásquez M,Bernal-Cárdenas C,et al.Automatically discovering,reporting and reproducing android application crashes[C]//Proceedings of the IEEE International Conference on Software Testing,Verification and Validation 2016(ICST’16),Chicago,USA,2016:33-44.
[14] Machiry A,Tahiliani R,Naik M.Dynodroid:An input generation system for Android apps[C]//Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering(ESEC/FSE 2013),New York,USA,2013:224-234.
[15] Ravindranath L,Nath S,Padhye J,et al.Automatic and scalable fault detection for mobile applications[C]//Proceedings of the 12th Annual International Conference on Mobile Systems,Applications,and Services(MobiSys’14),Bretton Woods,New Hampshire,USA,2014:190-203.
[16] Hao S,Liu B,Nath S,et al.Puma:Programmable uiautomation for large-scale dynamic analysis of mobile apps[C]//Proceedings of the 12th Annual International Conference on Mobile Systems,Applications,and Services(MobiSys 2014),New York,USA,2014:204-217.
[17] Mirzaei N,Bagheri H,Mahmood R,et al.Sig-droid:Automated system input generation for android applications[C]//Proceedings of the 26th IEEE International Symposium on Software Reliability Engineering(ISSRE 2015),Washington DC,USA,2015:461-471.
[18] Octeau D,Luchaup D,Dering M,et al.Composite constant propagation:Application to android inter-component communication analysis[C]//Proceedings of the 37th InternationalConferenceonSoftwareEngineering-Volume 1(ICSE’15),Piscataway,NJ,USA,2015:77-88.
SUN Xiaoyong,WANG Wei,HUO Wei,et al.Dynamic event sequence guidance forAndroid application vulnerability verification technology.Computer Engineering and Applications,2018,54(6):86-94.
SUN Xiaoyong1,2,WANG Wei1,HUO Wei1,2,ZHOU Jianhua1
1.Institute of Information Engineering,ChineseAcademy of Sciences,Beijing 100195,China
2.School of Cyber Security,University of ChineseAcademy of Sciences(UCAS),Beijing 100190,China
At present,Android application vulnerability detection methods have static analysis and dynamic analysis.The static analysis has high rate of false positive.Although dynamic analysis reduces the rate of false positive,its operating efficiency and coverage are low.In order to solve the problem of dynamic analysis,this paper proposes the dynamic event sequence guidance for Android application vulnerability verification technology.This technology generates the activity jump graph by using the method of automated UI trigger.Then precisely guiding the suspicious path of vulnerability.Finally,verifying the suspicious path of vulnerability is whether executing.Automatically analyzing 10,122 applications,the recall rate is 96.12%and false positive rate is 2.66%.The results show that the dynamic event sequence guidance for Android application vulnerability verification technology has good effective on automatically analyzing application.
dynamic event sequence;automated UI trigger;guidance verification;Android
目前Android应用漏洞检测方法分为静态分析和动态分析。其中,静态分析存在误报率较高的问题,动态分析降低了误报率,但是存在运行效率和覆盖率较低的问题。针对动态分析存在的问题,首次提出了动态事件序列制导的Android应用漏洞验证技术,该技术使用自动化UI触发的方法生成Activity跳转关系图,然后对漏洞嫌疑路径进行精确制导,最后对漏洞触发嫌疑路径是否执行进行验证。经过对10 122个应用进行自动化漏洞分析,结果为召回率96.12%,误报率2.66%。实验结果表明,动态事件序列制导的Android应用漏洞验证技术对于自动化分析应用漏洞有很好的效果。
动态事件序列;自动化UI触发;制导验证;Android
2016-11-09
2017-01-23
1002-8331(2018)06-0086-09
A
TP393
10.3778/j.issn.1002-8331.1611-0187
中国科学院百人计划[人字(2013)46号];北京市科委重点项目课题(No.D161100001216001);中国科学院战略性先导科技专项(No.XDA06010703)。
孙骁永(1991—),男,硕士研究生,研究领域为Android应用漏洞挖掘;王伟(1979—),男,工程师,主要研究领域为移动终端安全分析、软件安全脆弱性分析,E-mail:wwei@iie.ac.cn;霍玮(1981—),男,博士,副研究员,主要研究领域为软件漏洞挖掘和安全评测、基于大数据的软件安全分析、智能终端安全分析;周建华(1986—),女,工程师,主要研究领域为移动终端安全分析。
◎模式识别与人工智能◎