Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

TaintART: A Practical Multi-level Information-Flow Tracking System for Android RunTime

论文下载

ART替换Dalvik之后,传统的基于Dalvik的动态污点分析工具(TaintDroid及一些基于它开发的工具)都不再适用新的系统。而新的ART是直接在CPU上执行本地指令,很难像之前在解释器中插桩来直接监控执行。本文提出TaintART,通过修改编译器(dex2oat)来实现数据流分析的系统。

Fig

  • 在APK安装时,首先会进行编译(AOT),编译器(dex2oat)是基于LLVM开发的。

    • 首先将Dalvik字节码转化为中间语言,之后进行优化。
    • 优化后,TaintART会在代码中插入taint记录的逻辑。
    • 最后再编译成native code。
  • TaintART用寄存器来存储taint标记:

    • Nexus5 32-bit RAM 处理器有16个寄存器。TaintART选择R5作为专门存储taint的寄存器,在编译时,不会为R5分配其他存储任务。利用R5来存储其余寄存器内变量的标记。当寄存器的值转入内存时,相应的标记值也会紧跟变量值存入内存。
    • 对于一些特殊的存储在堆中的Objects,TaintART也特别的添加了一部分空间来存储taint标记。
  • taint标记的传递逻辑也不复杂。

    • 寄存器内部运算,会利用R12(临时寄存器)来配合taint的传递。
    • 在方法之间传递就是通过R1,R2,R3来传递参数。针对IPC,TaintART修改了binder的结果。
  • 针对JNI,TaintART没处理,但是可以利用NDroid。


  • 效果方面,和tanitdroid做了对比,tanitdroid能发现的数据泄漏,TaintART都能找到。特别地,有几个APP只能5.0以上版本运行,所以tanitdroid用不了。
  • 效率方面,用几个bench app测了效率。编译时间,JAVA执行,内存,IPC等几个方面都做了测评. 整体上来讲,带来的损耗并不大。