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隐私安全研究进展

 

posted @ 2017-05-31 16:41  zlz099  阅读(10604)  评论(2编辑  收藏  举报