Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Information-Flow Analysis of Android Applications in DroidSafe

论文下载:http://www.internetsociety.org/sites/default/files/02_1_2.pdf

Abstract

DroidSafe一个静态的信息流分析工具,结合一个模拟Android系统模型,通过分析APK或源码,找到APP潜在的敏感信息泄漏问题。 相较原有的静态分析工具,如Flow-Droid+IccTA,准确率与精确度有较大提升。

Fig

Droidsafe’S Android Device Implementation(ADI)

可以理解为用JAVA实现的软件版Android设备,没有实现所有功能,只能用来辅助静态分析。模拟出了很多复杂的功能包括回调, 组件生命周期, 数据流,堆栈, 本地方法, 混淆。

  1. ADI Core 主体是Android源码(AOSP),缺少的Android Runtime部分自己模拟实现——Accurate Analysis Stubs。包括native methods,callback,component life-cycle events,runtime保存的关于APP一些状态信息,系统与APP之间的交互。全部用JAVA模拟实现。
  2. Event and Callback Dispatch 对于组件生命周期事件:将runtime中相应的方法HOOK到组建创建,销毁等相应方法中。 对于回调:举例:APP通过系统API注册一个回调的handler,如果对应的数据库发生变化,就开个新的线程。 ADI会实现向系统的注册handler的API,在注册后马上就执行线程。
  3. Identifying and Classifying Sources and Sinks
  4. Harness 每个APK都会生成一个特定的套件将源码相应的接口HOOK到这个模拟的系统中

Object-sensitive points-to analysis

由于Android存在异步的回调,复杂的组件生命周期,数据流,信息流很难确定,因此通过POINTS-TO ANALYSIS来实现Object-Sensitive,Flow-Insensitive的分析,生成整个程序的callgraph,准确的定位并区分所有object,能够全面考虑到所有可能的调用顺序,提高准确率。同时能够将系统模型加入到整个分析中来,提高分析的效果。

Improving the precision of ICC modeling

JSA String Analyzer:JSA is a flow-sensitive and context-insensitive static analysis that includes a model of common operations on Java’s String type. 通过JSA找到作为制定方法参数的String,并转化为一个统一的形式,最后通过匹配预先定义的规则,确定intent的目的地。再实现代码逻辑的连接。

Information-flow analysis

计算出整个程序在运行时的内存状态,结合之前points-to-analysis生成的callgraph,并在内存上标记taint,进行数据流分析。

Evauation

Red Team organizations: droidsafe:69/69 flowdroid+iccta:6/69 DROIDBENCH(94): accuracy/precision: droidsafe:94.3% and 87.6% 40app: droidsafe:100% flowdroid+iccta:34.9% and 79.0%

不足

  1. 不能针对动态加载代码
  2. 不能针对隐式传递
  3. 不能针对通过hook敏感API拿到的敏感数据
  4. 不能保证针对所有反射代码