基于静态和动态分析的Android应用漏洞挖掘方法

 

摘要

由于Android应用静态分析和动态分析两种漏洞挖掘方法的优势和局限性,本文提出了一种基于动静结合的Android应用漏洞挖掘方法。首先采用静态分析法获得应用的基本漏洞分析结果,然后在此基A础上构建动态分析的输入测试用例。在实机环境下进行模糊输入测试,利用污点分析技术对应用安全漏洞进行验证,最后得到应用漏洞报告。实验结果表明,与静态分析结果相比,该方法可以显著提高漏洞挖掘的准确性。

 

第一节 导言

近年来,基于Android平台的应用开发呈现出快速增长的趋势,随之而来的安全问题也越来越引起人们的重视。由于开发者缺乏安全意识,在程序设计上存在各种漏洞[1]-[2][3]。同时,国内Android应用市场混乱,缺乏有效的统一管理机制,应用安全质量难以保证,安全漏洞数量逐年增加。

因此,Android应用漏洞挖掘引起了越来越多研究者的关注。一般来说,Android应用的漏洞挖掘可以分为静态分析和动态分析。论文 [4] 通过静态分析对大量应用进行分析,发现应用之间存在数据流分析改进漏洞,容易导致权限提升攻击。论文[5]对应用进行了逆向分析,静态分析了应用代码的数据流,跟踪了敏感数据的污点,获取了敏感数据在应用中的传播路径,对应用漏洞的检测起到了指导作用。TaintDroid[6]首次提出在Android系统中使用动态污点分析技术检测隐私泄露。TaintDroid是一种系统级的动态污点分析技术,因此不需要修改应用程序,应用程序内部和应用程序之间的隐私数据传输都可以被TaintDroid记录和跟踪。随着安全加固技术的发展,静态分析技术由于不能反编译应用源码,增加了漏洞挖掘的难度 [7]-[8][9][10]。而且应用程序没有实际的运行环境,所以漏洞结果中可能存在假阳性和假阴性。为了解决静态分析的问题,本文在静态分析的基础上引入模糊动态测试技术,提高了挖掘精度。

 

第二节 脆弱性挖掘过程

在分析android应用静态分析和动态分析的优势和局限性的基础上,提出了一种基于静态和动态分析相结合的漏洞挖掘方法。该方法首先对代码进行拆解分析,根据漏洞安全规则,利用类型推理和类型约束得到测试用例。然后,利用安全规则库对测试用例进行突变,利用污点跟踪的方法进行模糊测试。流程图如图1所示。

图1 漏洞挖掘流程

 

第三节 静态分析

A. 静态分析过程

Android漏洞静态分析通过自动化工具读取并分析程序的源代码,检测程序中可能存在安全漏洞的关键点。静态分析过程如图2所示。

图2静态分析过程

首先,对Android应用进行反编译和预处理,得到应用源文件。然后,通过特征提取得到应用特征向量。最后,根据漏洞规则库,利用扫描引擎进行分析匹配,得到静态分析结果。

B. 反编译

反编译的目的是为了获得应用程序的源代码,如Java源代码和AndroidManifest.XML。首先,对APK文件进行反编译,得到AndroidManifest.AXML、DEX文件、资源文件等。然后利用dex2jar工具进行反编译,将Dex文件转换为Jar文件,再利用jd-gui工具对得到的文件进行反编译,得到应用程序的Java源代码。利用AXMLPrinter2工具可以反转得到AndroidManifest.AXML文件。反编译过程如图3所示。

图3反编译过程

C. 漏洞规则提取

1)组件曝光

如果android应用组件暴露,攻击者可以通过构造一个符合应用组件定义的消息对象,劫持其组件进行相关操作。组件暴露的产生条件是,在manifest文件中申请组件时,导出的属性设置为 “true”,或者导出的属性未设置为 “false “时,应用程序为组件设置了意图过滤器,可能导致组件被其他应用程序调用。对此类漏洞的检测主要是通过静态分析得到的组件和权限等特征集进行匹配。

2)SQL注入

它常用于Web程序中。相关研究发现,Android应用在执行不安全的SQL语句时也会引入SQL注入漏洞。Android应用程序通常使用SQLLite来存储数据。最常见的SQL漏洞是应用程序使用原始SQL语句来操作。当SQL语句有外部输入参数时,可能会发起SQL注入攻击。

3)Webview远程代码执行

Webview组件中的addJavascriptInterface方法是用来实现本地Java和JavaScript之间的交互,但该函数并没有限制方法的调用,导致攻击者调用任何JAVA类,最终导致JavaScript代码对设备进行任意攻击。

4)证书弱化检查

在定制的x509trustmanager子类中,不对服务器端证书进行验证,默认接受任何服务器端证书,这可能会导致安全风险,并可能导致恶意程序利用中间人攻击绕过证书验证。

5)允许备份漏洞

当AndroidManifest.xml文件中的allow Backup属性值设置为true(默认为true)时,用户可以通过adb备份来备份应用数据,并导出应用中存储的数据,造成用户数据的泄露。所以需要将android:允许备份标志设置为false。

6)共享首选项存储风险

共享首选项文件没有使用正确的创建模式,可能会被其他应用程序访问并进行读写操作,从而导致敏感信息的泄露。通常需要避免使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE模式来创建共享首选项文件。

 

第四节 动态分析

A. 动态分析过程

动态分析的思路是在静态分析的基础上验证漏洞分析结果,提高漏洞挖掘的准确性。首先,根据静态分析结果生成测试用例,然后在安装应用程序的终端上执行测试数据,并进行污点分析,监控应用程序的异常行为,得到动态分析结果。动态分析过程如图4所示。

图4 动态分析流程图

B. 污点分析

污点分析是一种跟踪和分析程序中污点信息流向的技术。在漏洞挖掘中,首先将用户感兴趣的数据标记为污点数据。在程序执行过程中,这些污点数据的污点属性会被继承和传播。然后通过跟踪污点数据的相关信息流,分析这些数据是否会影响一些关键的程序操作,进而分析判断是否存在程序漏洞。

1)污点初始化

污点初始化主要是对污点进行标记。污点标记包含两个行为:一是查找污点信息在程序中产生的位置,二是标记污点信息。污点识别可以通过监控特定的系统函数来实现。如fgets()、fread()、recv()等。这些函数所获得的外部数据应设置为污点数据。关于污点标记,污点信息的产生点称为源点。相应地,识别源点的规则称为源点规则。

2)污点扩散

利用特定的规则对程序中污点信息的传播进行跟踪和分析,称为污点跟踪。在二进制层面上,是指根据污点标记,利用一定的算法解析不同的指令,解决污点标记的传播问题。

3)污点检查

污点检查是指制定具体的规则,判断传输的污染数据是否违反规则。如果是,则认为可能存在漏洞。一般来说,这些规则是在程序执行的关键操作上设置的。例如,一旦检测到污染数据作为跳转(jmp族指令)、调用(call、ret)和数据移动的目的地址,或者其他导致EIP寄存器被污染数据填满的操作,将被认为是非法操作。

4)污点清除

如果将未被污染的数据分配到标记为脏态的内存区或寄存器,则目标内存或寄存器的脏态将被清除。通过采用二进制插值技术,在每条机器指令执行前,获取指令各操作数的实际内容,查询其是否被输入数据污染。然后根据具体的指令类型,确定相应的撒播和清除污点的操作。

 

第五节 实验分析

为了验证漏洞挖掘方法的有效性,从第三方应用市场下载了290个应用进行实验验证。应用扫描引擎采用Python开发,通过USB连接进行动态分析,进行真机测试。测试平台为华为P20。实验中选择了常见的安全漏洞类型进行验证。实验结果与静态分析方法进行对比,通过人工分析判断最终的检测精度。实验结果如表一所示。

从实验结果可以看出,与静态分析法相比,该方法可以提高SQL注入、Webview远程代码执行、允许备份漏洞、共享首选项存储风险等安全漏洞的漏洞检测率。一方面,由于Android应用中存在外壳加固的情况,自动静态分析工具未能反向反编译,导致进一步的特征匹配失败,导致误报率较高。另一方面,静态分析方法无法模拟实际应用运行环境,导致部分漏洞检测的误报率较高。

 

第六节. 结论

本文设计并实现了一种针对android平台的动态和静态漏洞挖掘引擎。从静态分析和动态分析相结合的角度,对Android平台应用的安全问题进行了挖掘。实验证明,在大量样本的情况下,可以保持系统的稳定性和可用性,可以在短时间内完成扫描任务,并且可以将误报率控制在较低水平。下一步,将优化逆向分析技术的应用,扩大分析框架的应用范围。

 

引用

1.Qing Si-han “Research Progress on Android Security[J]” Journal of Software vol. 27 no. 1 pp. 45-71 2016.

2.Zhang Yuqing Fang Zhejun Wang Kai et al. “Survey of Android Vulnerability Detection[J]” Journal of Computer Research and Development vol. 52 no. 10 pp. 2167-2177 2015.

3.Zhang Yuqing Wang Kai Yang Huan et al. “Survey of Android OS security[J]” Journal of Computer Research and Development vol. 51 no. 7 pp. 1385-1396 2014.

4.Tang Junwei Liu Jiazhen Li Ruixuan et al. “Android application vulnerabilities static mining technology[J]” J. Huazhong Univ. of Sci. & Tch.(Natural Science Edition) vol. 2016 no. 44 pp. 20-24.

5.Yue Hongzhou Zhang Yuqing Wang Wenjie et al. “Android Static Taint Analysis of Dynamic Loading and Reflection Mechanism[J]” Journal of Cpmputer Research and Decelopment vol. 45 no. 2 pp. 313-327 2017.

6.Jian-Wei Wang Wei-Xin Jin and Zuo-Shun Wu “Taint Droid-based Dynamic Taint Detection Technology[J]” Communications Technology vol. 49 no. 2 pp. 221-226 2016.

7.Guowei Dong Meilin Wang Shuai Shao et al. “Android application security vulunerability analysis framework based on feature matching[J]” J tsinghua Univ (Sci & Technol) vol. 56 no. 5 pp. 461-467 2016.

8.Le Yang and Wen-Jun Yang Research on vulnerability detection data based on Android[J] vol. 35 no. 4 pp. 25-28 2019.

9.Li Fenglong The Design and Realization of Android Application Vulnerability Excavation Engine Based On Dynamic and Static Scanning Technology[D] JiNan:ShanDong University 2016.

10.B Reaves J Bowers Iii Sag et al. “*droid: Assessment and Evaluation of Android Application Analysis Tools[J]” ACM Computing Surveys vol. 49 no. 3 pp. 55 2016.

(完)