安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此外,很多研究只是针对单进程的分析,在安卓平台多个应用进程协作完成事务的情境下,则无法进行很好的分析。
目录
1 绪论
1.1 研究背景
1.2 当前分析技术及难点
1.3 本文的解决方案
1.4 本章小结
1 绪论
随着智能手机的普及,Android 系统作为主要的移动操作系统平台,有着广泛的应用。安卓平台的火爆也吸引了大量的开发者和应用,用户越来越离不开移动系统以及上面的丰富的应用。然而由于安卓市场的开放性,第三方市场的存在,安卓应用的质量良莠不齐,用户的体验和数据安全受到了不小的挑战。程序分析作为一种有效的技术,一直被广泛采用在软件领域。作为程序分析重要的一种,动态分析因为能够在运行时检测应用程序,分析应用程序行为和状态,以及对目标进行丰富而灵活的诊断,一直是研究领域一个重要的课题。
本文通过对 Android 系统的研究和开发,实现了一个高效、可扩展,同时支持多进程分析的分布式的动态分析框架,能够使分析者方便的进行动态分析。框架为用户提供丰富的事件,使得用户能够通过编写高层语言的 Java 代码即可方便的进行动态分析的开发。本文通过两个案例实验验证本框架的正确性,并充分展现出本框架的研究以及实用价值。
1.1 研究背景
自发布以来,Android 系统凭借开放源代码的方式以及其丰富的应用市场,迅速获得消费者的青睐。Android 系统在智能手机市场中占有很大的比例。在享受应用带来的便利的同时,用户也在不断追求更好的交互体验和安全保障。然而用户也要面对随之而来的安卓系统的安全问题 [1, 2] 。不严格的安全审查以及第三方市场的合法性,导致 Android 恶意应用程序广泛存在,严重威胁用户的手机安全和隐私。安卓手机安全迅问题速成为业界和学术界的研究焦点。
1.2 当前分析技术及难点
当前对一般程序进行分析的技术,主要包含静态分析和动态分析两种。
静态分析,是指在不运行程序的情况下,从程序的静态源代码或者二进制文件入手,利用词法分析、语法分析、程序控制流分析等手段对程序进行分析并研究程序行为的技术。能够被用来检测程序的规范性、安全性、可靠性等指标,广泛被用于测试和程序验证。静态程序分析不需要在执行时进行,因而与运行平台独立,不依赖于运行时环境;且静态分析往往具有很高的执行效率,能够进行快速的检测。尽管如此,静态分析由于缺乏运行时的信息,在很多分析场合下往往不能够精确地分析程序的行为,造成较高的误判或者漏判。因而一般来说,单纯的静态分析不能完全满足程序分析的需要。因此,实现一个高效、易用、功能强大的动态分析框架,有很大的研究价值。
1.3 本文的解决方案
针对 1.2 节提出的难点,本文提出了一个针对安卓多进程进行全面分析的高可用、灵活可靠、易扩展、分布式的基于字节码注入的分析框架,该框架通过将安卓系统中不同虚拟机进程的分析事件收集到影子虚拟机(ShadowVM [13] )里解析,并保证事件执行的顺序性,从而实现一个全面的安卓平台的异步动态分析。
主要贡献包括:
(1)为了能够让安卓系统提供 JVMTI 类似的接口,以完善动态分析需要的虚拟机事件,本文修改了 Dalvik 虚拟机的实现,提供了动态分析需要的虚拟机事件;
(2)为了解决字节码注入的难题,提高字节码注入的可靠性,本文采取了一个间接注入的策略。通过开源的 dex2jar 把 DVM 的字节码转换成 JVM 的字节码,再利用 JVM 上成熟的框架 DiSL 来进行注入,最后再转回 DVM 字节码,并为所有注入开辟了一个注入通道,使得实现全覆盖的注入成为可能;
(3)为了能够在目标虚拟机与分析服务建立通信,在安卓系统增加一个系统服务 ACS(Analysis Communication Service),来实现原先通过 Java Agent 实现的通信模块;
(4)为了能够实现多进程的分析,本文继续拓展了 ShadowVM 框架,扩展了其原先的单进程模型,并针对安卓跨进程调用(Inter process call,简称 IPC)Binder 系统库进行扩展,在影子虚拟机中实现了 Binder 相关的事件,从而能够将影子虚拟机分析与安卓系统的 IPC 调用事件结合。这些 Binder 事件能够将不同进程的事件联系起来,极大丰富了本文动态分析框架的功能;
(5)此外,本文还针对发送事件采用共享内存的方式来降低性能开销,使得系统更具有实用性。
1.4 本章小结
本章首先介绍了安卓平台的发展,以及当前安卓应用市场的问题,说明了当前为安卓应用程序进行程序分析的必要性和重要性。接着结合主流的程序分析技术,介绍了静态分析以及动态分析的特点,通过对比 Dalvik 虚拟机与 JVM 的差别,分析了在安卓进行动态分析的难点。最后,简单介绍了本文解决上述难点的思路和技术要点,阐述了本文的主要贡献。
接下来的文章内容按如下方式进行组织:第二章通过详细描述本文依赖的主要技术点,并通过与已有工作的比较来进一步说明本文框架的创新点和实用意义;第三章介绍了本文框架的宏观设计;第四章则结合实现来描述本文框架是如何被构建起来的;第五章为实验的实例部分,结合两个实例来介绍框架的运行模式以及强大功能。第六章对文章进行了总结,并展望了未来可以继续完成的工作。