题目:
DeepFlow: Deep Learning-Based Malware Detection by Mining Android Application for
Abnormal Usage of Sensitive Data
单位:中国科技大学
摘要:
Android的开放性允许应用程序开发人员充分利用系统。虽然这种灵活性给开发人员和用户带来了好处,但也可能带来与恶意应用程序相关的重大问题。传统的基于签名或异常行为的恶意软件检测方法在处理新型恶意软件时是无效的。为了解决这个问题,机器学习算法被用来自动学习恶意软件和良性应用程序之间的区别。深度学习作为机器学习的一个新领域,由于其更好地表征了样本,正在迅速发展。我们因此提出一种基于深度学习的新方法,可以直接从Android应用程序的数据流中识别恶意软件。
我们在成千上万的善意软件和恶意软件上测试DeepFlow。实验结果表明,深度流能够获得较高的F1检测分值95.05%,优于传统的基于机器学习的方法,显示了深度学习技术在恶意软件检测中的优势。
关键词:Keywords-Android恶意软件检测;深度学习;数据流;特征。
介绍:
根据高那德的最近的一份报告,Android手机的出货量已经大大超过了16亿部。2016. 随着Android智能终端的普及,Android应用市场发展迅速。传感器报告Tower[15]显示,在2016年第一季度,用户从应用程序下载的数量(简称应用程序)Android应用市场,像谷歌Play Store和其他第三方市场一样,高达172亿。然而,Android的开放性使这些市场成为恶意软件攻击的热门目标。一种常见的攻击手段是上传恶意软件,窃取敏感数据到市场。什么使应用程序具有恶意?一个至关重要的因素是,恶意应用程序对待敏感数据的方式总是不同于良性应用程序。Avdiienko等人在[3]中发现,对于来自每个敏感源的数据,它总是以少量典型的汇聚结束,这在良性和恶意应用程序之间存在很大的差异。在这种情况下,我们可以首先从恶意软件和(或)benignware,然后分析这些数据流,以确定一个应用程序是否有恶意。
以前从应用程序中提取敏感数据流的对策主要是动态污染分析机制,它在运行时[7]、[9]期间标记敏感数据并跟踪其流。这种机制是相当无效的,因为分析可能会遗漏一些信息流,即如果没有触发或观察到信息流。针对这一问题,提出了一种静态数据流分析方法。分析将静态分析app程序,并报告是否存在导致信息泄漏的路径[2],[18]。从app中提取敏感数据流后,分析这些数据流特征,判断app是否有恶意。提出了几种基于机器学习的技术来训练从应用程序中提取的特征,包括静态特征[1]、[14]、[19],如所需权限、敏感api、静态数据流等,以及动态特征[11],例如可疑行为、网络流等。
用于区分恶意软件和良性软件的常用机器学习算法包括朴素贝叶斯算法(Naive Bayesian),支持向量机、MLP等。这些方法可以自动检测新的恶意软件。然而,传统的机器学习模型只有不到三层的计算单元。浅层结构会在一定程度上影响检测效率。
深度学习是机器学习的一个分支,它基于一组算法,这些算法通过使用具有多个处理层的深度图(由多个线性和非线性转换组成的[6])来尝试对数据中的高级抽象建模。它在人工智能领域得到了广泛的关注,在图像分类、自然语言处理等方面有着广泛的应用。由Guy Caspi和Eli David创立的Deep Instinct,是第一家将深度学习算法应用于安全领域[5]的公司。它可以检测结构和程序功能的指示
PC恶意软件通过使用深度学习模型。以前应用深度学习技术检测Android恶意软件的工作很少。在[20]中只有一项研究提取了192个特征,包括权限、api和动态行为,然后应用深度学习技术来区分恶意软件和良性应用程序。
设计师选择了DBN架构来构建深度学习模型,并对Android应用进行了特征描述。完成了96.76%的检测准确率,优于传统的机器学习模型。
在本文中,我们构建了一个名为DeepFlow的Android恶意软件检测工具。我们首先利用FlowDroid静态分析工具[2]从成千上万的良性和恶意应用程序中提取从所有敏感源到敏感汇的数据流。为了跟上恶意软件的进化,我们不断地从谷歌Play Store抓取良性应用程序,从知名恶意软件源[1]、[17]抓取恶意应用程序,[21]。然后,我们应用SUSI技术[12]将特征粒度从方法级转换为类别级。在此之后,我们通过应用深度学习技术自动标记具有可疑数据流特征的应用程序来实现一个分类器。我们的前提是,使用深度架构的深度学习可以演化出高级表示,从而更好地刻画Android应用程序的特征。据我们所知,
DeepFlow是第一个区分恶意软件和善意软件的方法,它利用深度学习技术来分析应用程序中的数据流。在大量真实应用程序上的实验表明,与基于传统机器学习模型的检测方法相比,使用深度学习技术显示了我们的优越性。根据我们的分析,我们发现深度学习在Android恶意软件检测中很有前途。
本文的提醒组织如下:在第二节中,我们将介绍FlowDroid的污染分析。在第3节中,我们使用FlowDroid和SUSI技术提取了总共323个数据流特征。在第四部分,给出了深度学习模型的体系结构,并介绍了深度流的检测框架。通过与第5节中基于传统机器学习模型的检测方法进行对比,我们找到了最佳的深度学习结构并展示了我们的优越性。最后,我们以第六部分的结论和未来的工作结束。
2用FLOWDROID进行污染分析
DeepFlow使用静态污染分析工具FlowDroid来识别Android应用程序中的敏感数据流。我们选择
因为它是完全上下文、流、字段和对象敏感的,同时精确地建模Android生命周期,包括在应用程序中正确地处理用户定义的UI小部件。一个Android应用程序包含多个组件,比如Activity、Service、Content Provider和Broadcast
接受者,其中活动是静态分析的主要入口。与普通的Java程序不同,Android应用程序没有主功能。与普通Java程序不同,Android应用程序中没有main函数。因此,我们无法通过main函数定位程序的入口和出口来构建控制流图。然而,每个Android组件都采用一些方法来反映其生命周期。FlowDroid通过对这些生命周期建模来构建Android应用程序的控制流图。我们可以从an的生命周期中发现活动组件[2]与传统的单入口和单出口结构不同,活动组件可以在任何节点上以任何顺序执行。除了onCreate()、onStart()、onDestroy()等生命周期函数之外,活动组件还包含各种回调,它们通知应用程序系统事件或GUI事件。要识别Android应用中的敏感数据流,首先,FlowDroid搜索生命周期和回调方法,以及对源和汇的调用。接下来,为了构建控制流图,FlowDroid创建了一个虚拟的main函数来模拟所有这些注册的事件处理程序和组件之间的交互。基于这个虚拟的主函数,FlowDroid分析可以访问的所有函数,并在这些函数之间构建控制流。在这种情况下,哑主函数被视为an的唯一入口
这大大简化了分析过程。
此外,FlowDroid将数据流分析形式化为IFDS框架[13]上的污染分析。对于每个敏感源,FlowDroid都将其作为基于控制流图的污染分析过程的起点。FlowDroid结合了前向污点分析和按需后向别名分析。最后,FlowDroid可以报告从敏感源到应用程序中的汇点的所有发现流量。
III. FEATURE EXTRACTION
单App特征提取
对于每个应用程序,我们所需要的只是安装文件。apk文件)。DeepFlow使用FlowDroid从所有敏感源提取所有敏感数据流到所有敏感汇。清单1显示了Android应用程序如何泄漏用户隐私数据的示例。然后,我们详细介绍了如何使用FlowDroid来获得数据流的特性。清单1所示的示例通过调用百度Map提供的API读取手机的位置信息(包括经度、纬度和详细地址),并通过SMS将其发送到常数电话号码“+1 11”。
真实世界恶意软件常见攻击模式的缩影,反映了来自LocationClient的敏感数据流。(源)到SMS API(接收器)。然而,在真实的恶意软件中,源和接收器之间的路径要复杂得多。FlowDroid中的数据流分析由两部分组成:跟踪污染值的正向污染传播和解决堆模型中的别名问题的按需向后别名分析。图1展示了FlowDroid如何在清单1所示的示例应用程序中,通过以下步骤提取从源到接收器的数据流:
步骤1~3:经度、纬度和细节,作为从来源获得的变量,被污染,并正向传播到方法loc(细节、纬度、经度);
步骤4~6:在调用被调用方法loc(detail, latitude, longitude)时,detail、latitude和longitude是形式参数。我们对调用者进行反向分析,发现a、b和c实际上是细节、纬度和经度的别名。污染他们。
第七步:继续跟踪a, b, c,然后污染l;
第8步:l,作为返回值,被映射回调用者。
因此,可变位置被污染了。分析可以识别出存在一个汇聚的位置。
FlowDroid是上下文敏感的,所以它可以用不同的参数区分对loc()方法的不同调用。
更重要的是,它使用特殊的手工编写的摘要来调用没有源代码可用的库方法。它适应了大量的优化,扩大了操作规模,减少了噪音,从而提供了大量高质量的输入数据,在此基础上训练了DeepFlow的深度处理方法。这样,DeepFlow可以从应用程序中提取所有敏感数据流。结果可以表示为一组对像:流(app) = {source1→sink1, source1→sink2,尀},这里每个sourcei sinki是一个敏感的Android API方法。