FlowDroid:领域对象敏感和生命周期为Android应用程序感知的污点分析
今天的智能手机是一个无处不在的私人和保密的数据源。在同一时间,智能手机用户的困扰,不小心编程的应用程序,泄漏重要数据的意外,并通过恶意应用程序,利用他们的特权,故意复制这些数据。而现有的静态污点分析方法检测这些数据提前泄露时间的潜力,Android使用一些粗粒度的近似值,可以产生大量的漏漏和假警报的所有方法。
在这项工作中,我们提出一个新的Android应用FlowDroid,高精度静态污点分析。一个精确的模型,安卓的生命周期允许分析,以妥善处理回调的Android框架,调用上下文,流域和对象的分析灵敏度可以减少假警报的数量。新的点播算法帮助FlowDroid保持高的效率和精度的同时。我们还提出了droidbench,开放测试的有效性进行评估和污点分析工具准确专为Android应用程序。我们通过一组使用securibench微,droidbench实验,一组知名Android测试应用中,发现数据泄露FlowDroid非常高的分数而使误报率低。在droidbench,FlowDroid达到93%的查全率和86%的精度,大大超越了商业工具IBM AppScan的话源和加强SCA。成功地找到漏洞FlowDroid从谷歌播放的一个子集的500个应用程序和1000的恶意软件的应用程序。
从virusshare项目许可,以使个人或课堂使用的所有或部分的数字或硬拷贝的许可,无需收取的费用,该副本是不作或分发的利润或商业优势,该副本承担此通知和第一页的全部引用。这项工作的组成部分,拥有比别人要尊重版权ACM。对信用证的提取是允许的。另外复印,或重新发布,发布的服务器上或分配清单,需要事先特定的权限和或费用。从permissions@acm.org请求权限。
简介
根据最近的一项研究[ 9 ],安卓已经看到了一个不断增长的市场份额,在手机市场,这是现在的81%。随着安卓手机的无处不在,他们成为了一个有价值目标的攻击,对用户隐私敏感的数据。感觉等。分类不同的安卓恶意软件[ 12 ],发现恶意的安卓应用构成的主要威胁之一是隐私侵犯,泄漏敏感信息,如位置信息,接触数据,图片,短信等向攻击者。但即使是没有恶意的应用程序,并小心编程可能会遭受这样的泄漏,例如,当他们包含广告库[ 16 ]。许多应用程序开发人员包括这样的库,以获得一些报酬,他们的努力,但很少有人完全了解他们的隐私问题,也不是他们能够完全控制这些库过程中的数据。公共图书馆提取私人信息标识的人进行有针对性的广告如独特的标识符(例如,IMEI、MAC地址、等)、国家或位置信息。
污点分析解决这个问题,通过分析应用和提出潜在的恶意数据流对人类的分析师或自动的恶意软件检测工具,就可以决定是否泄漏其实是违反政策。这些方法跟踪敏感的“污点”的信息,通过应用程序开始在一个预先定义的源(例如,返回位置信息的方法),然后跟踪数据流,直到它达到一个给定的接收器(例如,一个方法写的信息到插座),提供精确的信息,数据可能会被泄露的地方。分析可以检查的应用程序,动态和静态。动态程序分析,虽然,需要许多测试运行,以达到适当的代码覆盖。此外,目前的恶意软件可以识别动态监测分析的应用程序的执行,导致该应用程序在这些情况下,构成一个良性的程序。
虽然静态代码分析不共享这些问题,它们运行的风险是不准确的,因为它们需要从程序的输入和近似的运行时对象的抽象。精确建模的运行时执行是特别具有挑战性的安卓应用程序,因为这些应用程序是没有独立的应用程序,但实际上是插件到安卓框架。应用包括不同的组件,具有不同的生命周期。一个应用程序的执行过程中,框架调用不同的回调函数在应用程序中,系统事件通知它,它可以启动/暂停/恢复/关机程序等[ 17 ]。为了能够有效地预测应用程序的控制流,静态分析不仅要模拟这种生命周期,但必须整合进一步回调系统事件处理(例如,手机传感器如GPS),UI交互,和其他。正如我们在这项工作中,认识到回调不是微不足道的,需要专门的算法。另一个挑战是由敏感信息,如用户界面中的密码字段的来源构成。无法检测到相应的返回其内容的接口。
基于程序代码的单独。相反,他们的检测需要一个模型的辅助信息存储在清单和布局的XML文件。最后但并非最不重要的,就像其他任何应用程序用java写的,Android应用程序也包含混叠和虚拟调度结构。对于java典型静态分析处理这些问题通过一定的上下文对象的敏感性。安卓系统的框架性质使得这个问题比以往更难,因为我们发现它揭露了非常深的混叠关系。过去的数据流分析方法为安卓[ 14,15,24,40 ]处理以上的挑战,在不令人满意的方式使用粗粒度的,以及在近似。underapproximations,通常由一个忠实的生命周期模型的不足引起的,可以引起这些错过重要的数据流分析。在实践中更糟糕的是,工具的过度近似可能会导致许多虚假的警告,很容易压倒安全分析师的点,他们停止使用的分析工具。
在这项工作中,我们提出一种静态FlowDroid,污点分析系统专门定制的Android平台,并基于新的点播算法,产生高精度的同时保持可接受的性能。分析应用程序的字节码FlowDroid和配置文件,找到潜在的隐私泄露,要么是由粗心造成的或创建的恶意。相对于早期的分析FlowDroid是第一。静态污点分析系统,充分的背景下,流动场和对象敏感而精确建模的完整的Android的生命周期,包括正确处理回调函数和自定义UI控件在程序。这种设计最大限度地提高精度和召回,即,旨在最大限度地减少错过的泄漏和错误的警告。获得深刻的背景和对象的灵敏度的同时保持可接受的性能,采用了一种新的点播FlowDroid别名分析。分析算法的灵感来自仙女座[ 37 ],但提高了仙女座的精确度。我们有开源FlowDroid夏季2013。该工具已经由几个研究小组拿起我们与一个杀毒工具的领先生产商联系,他们计划在分析后端FlowDroid的有效使用。
我们和别人能够衡量科技进步在这一重要领域的研究,它要求研究者能够进行Android污点分析工具的比较研究。不幸的是,到现在为止还没有一种可以允许系统研究的基准。作为这项工作的另一个贡献,因此我们可以droidbench,一种比较有效的污点分析Android开源微基准套件。我们已经取得了droidbench 2013春季网上知道几个研究小组已经用它已经来衡量和提高他们的安卓系统分析工具[ 19 ]的效果。第一组外部研究人员已经同意为该套件提供进一步的微基准测试[ 35 ]。
FlowDroid可以用来保护内部开发的Android应用程序以及协助Android恶意软件的分类。两种使用情况下的需求不是一个完美的,但一个合理的低利率假阳性和假阴性。一组以securibench微型实验,droidbench和一些知名的应用程序包含数据泄漏表明FlowDroid发现数据泄露一个很高的分数而使误报率低。在droidbench FlowDroid 1,达到93%的查全率和86%的精度,大大超越了商业工具AppScan源[ 2 ]和[ 3 ] Fortify SCA。与真正的应用进一步的实验证实FlowDroid的效用在实践。
首先,我们给出一个激励的例子,然后解释攻击者模型的假设。清单1中的示例(从一个真实世界的恶意程序(42)中提取出来,实现了一个活动,它在安卓中表示用户界面中的一个屏幕。应用程序读取一个文本域密码(5行)在框架重新启动应用程序。当用户点击活动按钮时,密码被发送通过短信(24号线)。这构成了一个受污染的数据流从密码字段(源)的短信接口(汇)。在这个例子中,sendmessage()与应用程序的UI按钮相关联,这是引发用户单击按钮时。在安卓系统中,听者可以在代码中直接定义,或者在布局XML文件中被定义为。因此,分析源代码本身是不够的,分析还必须处理元数据文件,以正确关联所有的回调方法。在这个代码泄漏只发生如果onrestart()叫做(初始化用户变量)sendmessage()执行之前。
为了避免负面影响,污点分析模型的应用程序生命周期的正确,确认用户可能确实在一个应用程序已经重新启动,按下按钮。为了避免假阳性,这个例子的分析必须是字段敏感的:用户对象包含两个字段的用户名和密码,但只有后者应该被认为是私人价值。对象的敏感性,而不需要这个例子,是必不可少的区分对象来源于不同的分配地点,但到达相同的代码位置。在我们的实验中,我们发现一些情况下,需要深的对象的敏感性,能够自动排除假阳性。这是由于相对较深的呼叫和分配链的安卓框架。如字符串连接操作(19行)需要一个模型,定义是否和数据流是如何通过这些操作。治疗这样的常规操作方法和分析方法的应用程序代码库可以不精确,它忽略了操作的语义),我们发现,往往是在实践着昂贵的。