论文分享_08_06

FlowDroid——安卓应用程序的精准的内容、流、域,对象敏感以及生命周期感知的污点分析

       今天分享的文章是FlowDroid——安卓应用程序的精准的内容、流、域,对象敏感以及生命周期感知的污点分析。

摘     要

        如今智能手机应用广泛,但是用户很有可能无意地被插装了恶意软件并泄漏个人信息。现有的静态污点分析工具在分析安卓程序时无法获得较高的准确率。本文提出了FlowDroid工具,可以在静态污点分析中获得较高准确率。同时提供了一个数据集DroidBench,其中包括39个手工构建的应用程序。

本文主要贡献:

  1. FlowDroid是第一个全内容、域、对象和流敏感的污点分析工具;
  2. 提供了一个开源的工具FlowDroid;
  3. 提供了一个开源的可供进行流分析的安卓应用程序数据集DroidBench;
  4. 对比AppScan、Fortify SCA工具,在DroidBench数据集上的准确率、召回率等指标表现都为最好。

一、准确的生命周期建模

       不同于Java程序,安卓应用程序是没有main函数的,安卓系统对所有组件定义了完整的生命周期,可以根据环境需求进行启动、停止、暂停以及恢复行为。本工作针对这种特性构造了一个“dummy main” 方法,该方法根据不同的组建的生命周期流程进行建模,然后将用户自定义函数插入其中。

二、准确的流敏感分析

污点分析:

对于赋值语句的污点转移函数规则定义如下:

  1. 如果赋值语句的右值为污点,那么他的左值也为污点。
  2. 如果赋值语句的右值为污点,左值是一个数组元素,那么整个数组也为污点。
  3. 如果讲新的值赋值给一个污点变量,那么这个变量的污点将被移除。

别名分析:

当一个污点值被赋值给一个堆位置(域或者数组),FlowDroid将反向寻找目标变量的别名并且污染他。

三、算法实现

    FlowDroid是在Soot框架上进行扩展,使用了Heros,一个多进程实现的IFDS算法框架,进行流敏感的污点分析与别名分析。

四、实验结果

        在本工作中提出的DroidBench数据集上进行实验,通过实验,可以发现FlowDroid在准确率、召回率等指标上都是三种工具中最好的,能够发现更多真实存在的污点问题,同时错误报告最少。
        在真实世界的安卓应用分析上,FlowDroid分析了GooglePlay上使用度最高的500个应用,没有发现存在信息泄露以及威胁行为的情况。在Virus项目中的1000已知威胁应用程序的数据集中,FlowDriod在该数据集上的表现良好,平均运行时间为16秒,最小时间为5秒。大部分应用程序被发现了2个信息泄露的风险。