基于Android平台的隐私泄漏静态检测工具分析
2018-04-15赵静
赵静
(新乡市牧野区卫生计生监督所,河南郑州,453000)
0 引言
针对andriod平台应用程序引发用户隐私泄露问题,相关研究人员研发了多种检测方法,主要分为两类,一类是动态检测方法,一类是静态检测方法。后者无需在智能手机等移动设备上安装,即可实现运行,对应用程序进行直接分析,并判断其是否存在恶意倾向。当前,各类隐私泄露静态检测工具具有各不相同的应用场景以及使用技术,且检测侧重点以及相关性能也不相同。因此,有必要对各类静态检测工具进行分析比较,促进andriod平台隐私泄露检测工作进步。
1 隐私泄露概述
1.1 隐私泄露概念
隐私泄露,是指在未得到用户许可的情况下,应用程序恶意获取用户隐私信息,并将之向外发送[1]。通常,隐私信息通过敏感信息相应的源点,对敏感信息相应的汇点进行传播,并基于汇点,从应用程序将隐私信息泄露出去。
1.2 隐私泄露源点及汇点
隐私泄露源点,是指能实现隐私信息返回的相应API调用。用户隐私信息主要包括如下内容,隐私泄露源点即为与如下信息返回相关的API调用。(1)联系人信息,主要是手机通讯录中所包含的姓名、号码以及邮件等。(2)短信以及手机通话记录。(3)手机硬件相关信息,诸如本机号码、手机IMEI码以及SIM卡IMSI码。(4)手机所在地地理位置信息。(5)安装软件信息,诸如用户手机安装软件列表及版本信息等。(6)多媒体信息,诸如用户音频文件、照片等。
隐私泄露汇点,是指能向网络以及文件传送用户隐私信息的API调用,或者能借助短信将用户隐私信息向外发出的API调用。(1)网络。网络,是对用户隐私信息进行泄露最为常见的途径。例如,应用程序可声明ACCESS-INTERNET对网络连接权限进行获取,并将用户隐私信息添加入OutputStream中,实现对用户隐私信息的泄露。(2)短信。恶意软件能借助短信方式将用户隐私信息发送至指定号码。(3)文件。恶意软件可借助文件形式在手机内部对用户隐私信息进行存储,然后借助网络将之向外泄露。
2 隐私泄露静态检测工具比较
2.1 检测工具
2.1.1 ScanDal
ScanDal作为一种分析器,其设计以抽象解释框架为基础。该分析器将apk文件作为输入,对Dalvik字节码进行转换,使之成为Dalvik Core,在此基础上,对程序控制流图进行构建。Dalvik指令在220条以上,其中有诸多指令具有相近功能,Dalvik Core可对指令进行简化,使之精简到15条,且具备同等的表达能力。为对隐私泄露所有的可能情况进行检测,ScanDal对应用执行过程中各机器可能发生的状态进行了充分考虑,并计算各类状态的估计值,对生成于源点处的值进行收集,并借助程序计数器对之进行记录,若生成值借助汇点实现流出,则可判定为隐私泄露[2]。
2.1.2 LeakMiner
LeakMiner遵循如下步骤对隐私泄露进行检测:预处理→对敏感信息进行确认→信息流传播。在预处理过程中,它对dex字节码进行转换,使之成为Java字节码,并对Manifest中相应的权限配置信息进行提取。基于权限以及API调用二者间存在的映射关系,在使用的全部API中,仅分析相应权限被申请的API。LeakMiner对各类依赖于敏感信息原点的相关指令进行检测,并对源点可能存在的传播路径进行分析,若敏感信息对网络进行传播,则相应的泄露路径即会对用户进行报告。
2.1.3 AndroidLeaks
AndroidLeaks能实现对规模较大应用的快速检测。它需对dex字节码实施反编译,使之成为Java文件,对应用申请的相应权限进行分析,基于应用相应的API调用以及权限之间存在的映射关系,借助API调用相应的子集,当作隐私信息数据流具备的分析源点以及汇点二者的集合。AndroidLeaks能实现对函数调用图的生成,进而对源点调用点进行确定,并对污点分析进行执行,进而判断敏感数据是否经由源点实现了对汇点的传输,若检测发现存在隐私泄露路径,则对相应报告进行生成。
2.1.4 AppIntent
AppIntent能对隐私泄露进行检测,并判断其传播是否与用户意图相符合。若在用户未知状态下,信息完成传播,则判定属于隐私泄露。它借助污点分析方法对数据传输的全部可能路径以及相关事件进行提取,并对事件空间约束图进行构建,获取一组对应于数据传播过程的事件执行序列。在此基础上,它借助Instrumentation TestRunner 对该序列进行自动执行,并利用可视化的敏感数据传播,方便分析人员对敏感数据传输进行直观判断,确定其是否与用户意图相符合]。
2.1.5 FlowDroid
FlowDroid作为一种动态污点分析技术,具有较高精度,能实现对Android生命周期精确模型的构造,并据此对系统回调函数进行分析,并对上下文敏感、对象敏感、字段敏感以及流敏感进行分析,以实现对误报的有效消除。FlowDroid实现了对Soot框架的扩展,它对应用程序相应的生命周期以及回调方法进行搜索,并对源点以及汇点进行调用;通过分析获取主函数,并对CG以及ICFG进行生成,从源方法开始,借助遍历ICFG对污点进行跟踪。最后,生成相关赋值语句图,该图包含全部隐私泄露。
2.1.6 IccTA
IccTA能实现对Android应用组件间存在的隐私泄露的检测分析。首先,它需对DaLviK字节码进行转化,并采用Jimple对之进行表示;其次,需对ICC连接进行提取,并在数据库中对其以及ICC调用参数进行存储;然后,对Jimple进行修改,直接与组件进行连接,进而对组件间存在的数据流进行分析;最后,基于FlowDroid以及组件间相应的污点分析工具,对控制流图进行构造,使上下文值实现组件间的传播,并对数据流实施精准分析。
2.1.7 PCLeaks
PCLeaks能对ICC缺陷实施相应的数据流分析,并找到组件利用相关泄露点的可能方式,并对之实施验证。PCLeaks对Manifest文件进行提取,并对可达组件列表进行获取,并对FlowDroid进行更改,针对可达组件对控制流图进行建立。基于源点与汇点相应的方法集合对污点进行分析。将全部组件相应的入口点当作源点方法,将全部组件相应的出口点当作汇点方法。
2.1.8 AppCaulk
AppCaulk结合了动态分析方法以及静态分析方法对应用程序中存在的数据泄露进行检测和有效消除。它首先对数据泄露进行定义,进而对应用程序实施反编译,并对数据流进行分析。该分析需对代码遍历两次,第一次,获取后向切片,对通向汇点的相应传播路径进行确定,并对于汇点传播无关的各类语句进行消除;第二次,获取前向切片,并对未从源点开始的全部传播路径进行消除。最后,将动态代码插入程序中,对数据流进行跟踪,并对数据泄露进行处理。
2.1.9 APPContext
AppContext借助安全敏感行为相应的上下文对恶意及良性应用进行区分。它对CG进行构建,并借助安全敏感方法对安全敏感行为进行定位,然后对CG进行转换,使之成为扩展调用图,针对各安全敏感方法相应的调用构建较为精简的RICFG,即过程间控制流图,遍历RICFG对条件语句集进行查找,并借助数据流分析对上下文因素进行寻找,最后实现对完整上下文的生成。
3 误报
各类静态检测工具均会在不同程度上产生误报。ScanDal产生误报,是因为在调用分析库的过程中,对实际泄露造成了扩大。在隐私泄露相应路径上,需对库函数进行调用,在估计隐私信息的过程中,即可能误报。LeakMiner产生误报,是因为应用内存在长传播路径。在污点分析过程中,若缺乏充分的上下文信息,将导致误报,对此类误报,可借助上下文敏感进行消除。另外,程序中相应的调试辅助代码也会导致误报,可对调试辅助代码进行消除,实现对此类误报的减少。AndroidLeaks大约存在35%的误报率,它认为在广告库中,共享Activity可能导致隐私信息泄露,然而,实际情况并非完全如此,由此可能导致误报产生。
4 结论
9种静态检测工具均能良好实现对Android平台隐私泄露的静态检测,但在关注侧重点、功能特性以及局限性等方面均存在较大差异。例如,Android-Lesks能实现对规模较大的应用程序的快速检测;AppIntent着重关注分析用户意图;IccTA主要对ICC隐私泄露进行检测等。泄漏报告相应的查全率、准确率以及各类特性处理,诸如本地代码、多线程以及反射等均会对检测工具选取造成影响。