flowdroid 简介
1、整理自论文:
FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Apps
主页见:https://blogs.uni-paderborn.de/sse/tools/flowdroid/
下载见:https://github.com/secure-software-engineering/soot-infoflow-android
安装运行见:https://github.com/secure-software-engineering/soot-infoflow-android/wiki
下一篇写一个构建运行的博客。
已写完,见http://www.cnblogs.com/zlz099/p/6972805.html
2、基于污点的静态分析,目的是发现是否有从source到sink的路径
分析信息流所有可能的路径,但不需要运行app 生成控制流图CFG,追踪从source到sink的数据流
设置污点追踪敏感信息流的泄露路径。
敏感数据的source是账号密码、联系人、短信、数据库、IMEI sink是因特网、存储卡、进程通信、短信发送等
静态分析的难点主要在于安卓程序不是独立的封闭程序,而是在安卓framework中运行的。安卓的回调函数机制增加了app生命周期的复杂度。
3、上下文敏感,流、字段、对象敏感
apk文件作为静态污点分析的输入
模拟了完整的Android应用生命周期来处理回调
source、sink的检测通过解析从apk文件中抽取的manifest文件、dalvik虚拟机字节码文件和xml布局文件
生成一种dummy main函数,模拟activity生命周期,建立函数调用控制流图CFG
设计DroidBench测试高效性与准确性
不足是对于复杂的系统调用追踪困难,不能检测多线程引发的信息泄露
4、论文贡献:
- FlowDroid,学术界第一个context/object/flow sensitive的针对安卓全生命周期的污点分析方法。
- 基于上述方法的开源工具的实现。
- DroidBench,一个新的、开源的、全面的测试程序集。
- 将FlowDroid与商业工具AppScan和Fortify进行对比,比较这些工具在精确度precision和召回率recall。
5、activity生命周期
由此导致的结果是,分析安卓程序构建调用图时不能简单的从寻找main方法着手。必须对安卓生命周期中所有可能的传递关系进行建模。FlowDroid采用dummy main的方法来对生命周期进行仿真。然而生命周期并非这么简单。存在某些函数来保存和恢复状态。回调函数也可以造成额外的状态变化。
6、
7、multiple entry point:Android 没有main函数,但每个组件有lifestyle。
flowdroid生成一个dummy main方法精确模仿lifestyle。
asynchronously executing component:
一个app可能有多个activity和service,flowdroid假定所有的项都能异步执行,分析所有dummy main方法中提到的生命周期。
具有path不敏感性,不需要考虑所有可能的在lifecycle中的执行顺序。
callbacks:两种注册方式,
XML中注册:XML文件被映射到多个控件中,设定标识符,跟踪生成映射
用命令的方式:在class文件中跟踪函数调用路径,生成函数调用控制流图
8、
1) w作为被污染了的变量,被向前传递给了heap中的x.f。
2) 继续追踪x.f
3)每当heap中有成员被污染,使用向后分析找出相关对象的各种别名。如发现x和z.g是引用的heap中的同一位置
4-6)z是作为参数传递进来的,继续向后找看到caller的a即called的z,再往后发现b也是别名。
7)对b.f做前向分析,判断出其被传递到sink,从而展现了从source到sink的整个路径。
9、flowdroid框架:
Manifest.xml: 应用全局配置文件,
*.dex: Dalvik虚拟机字节码(应用程序)
layout xml 布局配置文件
Android在运行程序时首先需要解压apk文件,然后获取编译后的androidmanifest.xml文件中配置信息,执行dex程序。
解压apk文件后,flowdroid生命周期相关的函数、回调函数,以及作为source和sink的函数。
然后为生命周期和回调函数产生main方法。main方法用来产生调用图以及inter-procedural control-flow graph(ICFG)
1)unzipping apk文件,通过解析XML、dex、manifest文件,追踪activity,service的生命周期
2)flowdroid根据lifestyle和callback方法生成dummy main方法,建立ICFG控制流图
3)report所有从source到sink的流,包含整个路径的信息
4)忽略了动态加载的代码和反射机制,它将JNI代码当作黑盒来处理,信息跟踪比较困难
5)缺少对app之间和app内部组件通信的分析,对于多线程问题只能模拟成任意顺序序列,不能并行处理
10、DroidBench测试准确性与高效性:
flowdroid检测到93%的泄露,精确度高达86%
成功检测Google Play的500app中隐私泄露
识别大约1000种已知病毒库中的恶意软件
性能优于商业性检测工具AppScan Source和Fortify SCA
11、
RQ1 FlowDroid和商业的安卓污点分析工具在精度和召回率的比较情况?
RQ2 FlowDroid在Insecure Bank测试集上的效果如何?Insecure Bank是一个用来测试安卓分析工具的能力和性能的测试集。
RQ3 FlowDroid可以用于实际应用程序的泄漏检测吗?速度如何?
RQ4 FlowDroid在纯java程序的污点分析问题的效果如何?
1) 与商业污点测试工具的比较
由于没有专门针对安卓的测试集,因此,论文作者开发了DroidBench。该测试集包含了39个小的安卓应用程序,可用于安卓污点静态、动态分析的评估。
比较对象:
IBM AppScan Source v8.7
HP Fortify SCA
结论:
AppScan和Fortify为了降低误报,牺牲了回召率,因此漏报了一些实际存在的隐私泄漏错误。而FlowDroid回召率比上述两个工具有显著提高,精度上也有小幅优势。
2) RQ2: Performance on InsecureBank
InsecureBank是Paladion Inc.制作的用于评估分析工具水平的安卓程序。它包含了许多种与实际应用程序类似的漏洞和数据泄漏。
测试环境:
- Intel Core 2 Centrino CPU
- 4 GB 物理内存
- Windows 7
- Oracle JRE V1.7 64 bit
笔记本电脑
测试结果:
FlowDroid找到了所有的数据泄漏缺陷,既没有误报,也没有漏报。用时31s。
3) 在实际应用程序中的测试情况
GOOGLE PLAY
论文作者将FlowDroid应用于超过500个Google Play中的应用程序。
精度:
没有发现恶意软件。检测到的主要问题是敏感数据例如位置信息泄漏在logs或者是preference文件中。
效率:
绝大多数检测在1分钟内完成。用时最长的app是Sumsang’s Push Service,用时4.5分钟。
VIRUSSHARE
在VirusShare项目中测试。该项目包含了约1000个已知的恶意程序样本。平均运行时间为16s,最短用时5s,最长用时71s。大部分app含有2个数据泄漏问题(平均每个app含1.85个)。
12、Android隐私安全研究进展