一、整理自论文:html
FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Appsjava
主页见:https://blogs.uni-paderborn.de/sse/tools/flowdroid/android
下载见:https://github.com/secure-software-engineering/soot-infoflow-androidgit
安装运行见:https://github.com/secure-software-engineering/soot-infoflow-android/wikigithub
下一篇写一个构建运行的博客。数据库
已写完,见http://www.cnblogs.com/zlz099/p/6972805.html安全
二、基于污点的静态分析,目的是发现是否有从source到sink的路径多线程
分析信息流全部可能的路径,但不须要运行app 生成控制流图CFG,追踪从source到sink的数据流app
设置污点追踪敏感信息流的泄露路径。框架
敏感数据的source是帐号密码、联系人、短信、数据库、IMEI sink是因特网、存储卡、进程通讯、短信发送等
静态分析的难点主要在于安卓程序不是独立的封闭程序,而是在安卓framework中运行的。安卓的回调函数机制增长了app生命周期的复杂度。
三、上下文敏感,流、字段、对象敏感
apk文件做为静态污点分析的输入
模拟了完整的Android应用生命周期来处理回调
source、sink的检测经过解析从apk文件中抽取的manifest文件、dalvik虚拟机字节码文件和xml布局文件
生成一种dummy main函数,模拟activity生命周期,创建函数调用控制流图CFG
设计DroidBench测试高效性与准确性
不足是对于复杂的系统调用追踪困难,不能检测多线程引起的信息泄露
四、论文贡献:
五、activity生命周期
由此致使的结果是,分析安卓程序构建调用图时不能简单的从寻找main方法着手。必须对安卓生命周期中全部可能的传递关系进行建模。FlowDroid采用dummy main的方法来对生命周期进行仿真。然而生命周期并不是这么简单。存在某些函数来保存和恢复状态。回调函数也能够形成额外的状态变化。
六、
七、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文件中跟踪函数调用路径,生成函数调用控制流图
八、
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的整个路径。
九、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内部组件通讯的分析,对于多线程问题只能模拟成任意顺序序列,不能并行处理
十、DroidBench测试准确性与高效性:
flowdroid检测到93%的泄露,精确度高达86%
成功检测Google Play的500app中隐私泄露
识别大约1000种已知病毒库中的恶意软件
性能优于商业性检测工具AppScan Source和Fortify SCA
十一、
RQ1 FlowDroid和商业的安卓污点分析工具在精度和召回率的比较状况?
RQ2 FlowDroid在Insecure Bank测试集上的效果如何?Insecure Bank是一个用来测试安卓分析工具的能力和性能的测试集。
RQ3 FlowDroid能够用于实际应用程序的泄漏检测吗?速度如何?
RQ4 FlowDroid在纯java程序的污点分析问题的效果如何?
因为没有专门针对安卓的测试集,所以,论文做者开发了DroidBench。该测试集包含了39个小的安卓应用程序,可用于安卓污点静态、动态分析的评估。
比较对象:
IBM AppScan Source v8.7
HP Fortify SCA
结论:
AppScan和Fortify为了下降误报,牺牲了回召率,所以漏报了一些实际存在的隐私泄漏错误。而FlowDroid回召率比上述两个工具备显著提升,精度上也有小幅优点。
InsecureBank是Paladion Inc.制做的用于评估分析工具水平的安卓程序。它包含了许多种与实际应用程序相似的漏洞和数据泄漏。
测试环境:
笔记本电脑
测试结果:
FlowDroid找到了全部的数据泄漏缺陷,既没有误报,也没有漏报。用时31s。
论文做者将FlowDroid应用于超过500个Google Play中的应用程序。
精度:
没有发现恶意软件。检测到的主要问题是敏感数据例如位置信息泄漏在logs或者是preference文件中。
效率:
绝大多数检测在1分钟内完成。用时最长的app是Sumsang’s Push Service,用时4.5分钟。
在VirusShare项目中测试。该项目包含了约1000个已知的恶意程序样本。平均运行时间为16s,最短用时5s,最长用时71s。大部分app含有2个数据泄漏问题(平均每一个app含1.85个)。
十二、Android隐私安全研究进展