Page 138 - 《软件学报》2021年第6期
P. 138
1712 Journal of Software 软件学报 Vol.32, No.6, June 2021
13. path=findPath(tv_c.stmt,tv_d.stmt); //前向路径搜索
14. if path!=null && checkOnPath(path,cleanSet)==false
15. cleanSet.addAll(tv_d.cleanStmts); //添加清除语句到 cleanSet
16. tv_c=tv_d; i++; tv_d=tv i ;
17. else return false;
18. end if
19. end if
20. else
21. path=findPath(tv_c.stmt,tv_d.stmt); //前向路径搜索
22. if path!=null && checkOnPath(path,cleanSet)==false
23. cleanSet.updateTo(tv_d.cleanStmts); //更新 cleanSet 的清除语句
24. tv_c=tv_d; i++; tv_d=tv i ;
25. else return false;
26. end if
27. end if
28. end while
29. return true;
4 实验及分析
为了验证工具 FastDroid 的精度和效率,我们在多个测试集上分别对 FlowDroid-2.5 [22] 和 FastDroid 进行了
实验及结果分析.实验使用了 FlowDroid-2.5 工具默认的参数设置,采用的机器配置是 Intel i7 CPU(4.0GHz)和
16GB RAM,操作系统采用 Ubuntu 16.04 系统.实验工具 FlowDroid-2.5 和 FastDroid 都使用项目管理工具 Maven
打包生成 Jar 文件,然后用 Shell 脚本运行 Jar 文件,逐一对测试集中的应用进行批处理并记录实验结果.
4.1 测试集
本文实验使用了 3 个测试集:(1) DroidBench-2.0 [27] ,一个专门检测 Android 应用污点分析工具精度的测试
[6]
集,该测试集是 DroidBench-1.0 的升级版,包含 119 个开源应用,应用中包含的污染流种类多样,能够有效测试
工具能否全面地识别各类污染流;(2) MalGenome [28] ,该测试集包含 49 种不同类型的 1 260 个 Android 恶意应用
样本;(3) 从 Google Play 应用商店随机下载了 1 517 个较为热门的应用,应用类型包括游戏类、社交类、视频音
频类、管理类等等,应用大小从 15KB~51MB 不等.
4.2 实验结果及分析
(1) 查准率(precision)和查全率(recall)
DroidBench-2.0 测试集的应用中一共存在 113 个污染流,FlowDroid 和 FastDroid 两个工具检测污染流的正
确数、漏报数和误报数的统计结果如表 2 所示.FlowDroid 的查准率和查全率分别为 84.7%和 73.5%,而 FastDroid
查准率和查全率均高于 FlowDroid,分别为 93.3%和 85.8%.综合来看,FastDroid 的统计量 F-measure 为 0.89,高于
FlowDroid 的 0.79.FastDroid 实现高精度的主要原因如下:首先,FastDroid 工具与 FlowDroid 工具一样能够支持
流敏感、上下文敏感、域敏感及对象敏感的分析;其次,我们对 DroidBench 测试集的源码进行了深入研究,对
FlowDroid 无法检测的一些复杂污染流的污染方式进行分析和抽象,制定了专门的特殊规则并加入到分析算法
中.例如:FastDroid 设计了针对隐式污染流(implicit flow)的特殊污染传播规则,对于隐式污染流类型的污点分析
FastDroid 结果明显好于 FlowDroid.由于测试集 DroidBench 的测试用例都是开源的,我们可以判断工具的检测
结果是否准确;而对于 Google Play 和 MalGenome 两个测试集,我们很难获取应用中准确的污染流信息,因此没
有统计这两个测试集上的查准率和查全率.