目标程序是应用软件吗【安卓应用程序中的目标分裂】

来源:优秀文章 发布时间:2020-03-14 点击:

  安卓应用程序中的目标分裂

 摘要 –安卓应用声明安卓运行平台的目标版本。当有更新的安卓版本在设备上运行时,应用程序会议兼容模式执行尝试模仿之前的版本。此设计具有严重的安全问题。过时安卓版本的应用程序对于安卓平**全性的改变是无效的。我们称这种情况为目标分裂的问题。

 我们在2012年5月至2015年12月分析了一个数据集的1232696个免费的安卓应用程序,研究显示目标分裂问题是整个应用程序生态系统最值得关注的,并且这几年一直是这样。总计当前有93%的应用程序版本老于平台版本,平均过时686天;79%的应用程序上传到应用程序商城时就已经是过时于平台版本。最终,我们调查了七个安全相关的更改,在指定已过期的应用程序中停用安卓平台,结果显示并不能起到尝试提高安卓应用程序安全性的作用。

 1. 引言

 安卓已经成为全球最流行的智能手机平台,拥有超过10亿台源设备。安卓面临两大安全挑战:交付安全代码给用户、设备中的碎片和应用程序中的碎片。对设备碎片的关注是众所周至的。谷歌不控制分发安卓设备或安卓软件更新。谷歌依靠其他企业的网络提供最新的安卓软件给用户,以新设备的形式进行软件升级。由于分布式的进程,大量的安卓设备都在运行老于最新安卓版本的程序。临界的安全补丁不能达到数以万计的安卓用户,延长安全漏洞的生命周期,与设备的碎片化相比较,程序的碎片化却很少收到类似的安全后果的关注。

 安卓通过安卓API暴露了许多必要的库功能给应用程序。安卓平台的新版本可以介绍对现有的library特征所做的改变。例如:安卓4.4改变了Alarmmanager.set的批量报警行为,设置为相同的时间。这种变化有助于提高电池寿命,牺牲不精确的报警。行为变化就会引起一个像当前应用程序的一个问题,当要更新到一个新的安卓版本时设备会突然中断。

 谷歌分配给每个安卓平台版本一个整数称作一个API等级。保持一定程度的兼容性,防止应用程序戏剧性的改变他们的没有警告提示的行为,每个应用程序都有一个目标API级别。

 在API级别较高的设备上运行的应用程序,他们的目标API级别在兼容模式下执行,尝试与目标API匹配设备的水平尽可能的接近。例如,设置他们应用程序的目标API级别18(安卓4.3)将使用不相匹配的报警行为,即便是运行在最新的安卓设备上。安卓平台的变化可以包括重要的新安全功能,要么解决已知问题的安卓API或者提供额外的保护,防止攻击。任何这些功能兼容性模式的禁用将不适合过时的安卓API等级。这个设计意味着即使运行一个最新的设备,针对过时API级别的应用程序也将无法方位最新的安全特性。谷歌在谷歌商店中不发布应用程序的目标API水平,所以没有简单的方法让用户知道,应用程序所对应的API是否已经过时。相反,用户完全时在被应用程序的开发者所摆布。我们称这个问题为应用碎片过时于目标分裂的问题。

 大家最熟悉的目标分裂问题的结果是关于一个远程执行代码的漏洞——安卓网页。API级别17天际新的行为来解决这个漏洞,但是这种变化知识应用于应用程序的API级别为17或者更高的目标。该漏洞被披露在安卓平台后,应用程序仍然是脆弱的,当运行在新的平台时,依旧是过时的API级别。几个研究这个披露的报告显示了API等级小于等于14的应用程序所占的百分比

 。但这种脆弱性只是一个例子,目标分裂问题是的安卓应用程序不安全、没有去研究自己的权专属标碎片。一个比较完整的目标分裂问题的分析是了解安卓生态系统的安全性。

 据我们所知,这篇报告是第一个多方面的认识到目标分裂的安全性的问题。在本文中,我们从谷歌应用商城中收集了五个数据集的免费安卓应用信息近四年的数据。总的来说,这些数据集包括1232696个应用程序,我们测量的目标分裂问题的趋势,使用从谷歌Play商店获得的元数据。最后,我们研究的安全性影响的目标分裂问题的几个具体的漏洞。本研究主要研究问题及结果如下:

 目标分裂在安卓应用环境中的状态是什么样的?我们检查了在2015年12月内从谷歌应用商店收集的60086个免费的应用数据集,发现有93%的应用定位了过时的API级别。我们定义一个“过时”度量,目标API级别为686天。

 是开发人员选择定位过期的安卓版本,还是开发者放弃应用程序而导致的分裂化?为了解决未维护的应用,我们定义了一个“过时的过时”度量,它从应用上传到应用商店之日起测量过期时间,结果显示目标分段不仅仅是由停滞的应用导致的。我们发现2015年12月收集的应用程序的平均过时时长为536天。

 在最受欢迎的应用程序中目标分裂是个问题么?我们研究发现在很受欢迎的应用程序中也存在目标分裂的问题。我们发现,2015年12月收集的88%的应用程序安装超过一百万次,这个应用程序是使用过时的API等级。这些应用程序平均过时607天,平均过时的过时493天,只是稍微低于全部人口。

 目标分裂问题是否会随着时间的推移而变得不那么严重了呢?我们将2012年12月的数据集的目标分裂与2012年五月至2014年7月期间从谷歌应用商店收集的其他四个数据集进行比较,这些数据集包含1232696个应用,我们发现,除了越来越多的除了越来越多的尾巴的极端超时的应用程序,四个最近收集的数据集中的过时分布是非常相似的,这表明目标分裂问题的严重性在几年没有显着改变。

 今天目标分裂的具体安全影响是什么?我们通过检查安卓平台中的7个安全相关变化来扩展对目标分裂问题的讨论,并提供了目标分裂对安卓整体系统安全性的广泛影响的第一次定量分析。

 2.背景

   每一个安卓应用程序都包装清单文件。清单文件则是包含关于应用程序的XML文档,例如应用构件的清单、请求权限以及系统事件应用程序的响应。清单包含与本研究相关的两个属性:一个最低限度API 级别最小Sdk版本以及一个目标API 级别的目标Sdk版本。最低限度API 级别的含义是十分直截了当的。一个应用程序是无法被安装在一个低于最低限度API 级别的安卓设备上的。这样的设计确保应用程序不被安装在缺乏基本功能的设备上。

 清单也同样包括最高限度API级别,但自从安卓2.0.1开始,最高限度API水平不再用来做别的除了在谷歌应用商店中做过滤搜索。

 一个应用程序的目标API 级别则是用来维护促进兼容新的安卓平台。如果设备的API级别高于一个应用设备的目标API级别,设备将启用兼容性功能尽最大可能匹配目标API的特性。一套兼容性功能在每个API级别都可以在安卓的文档中找到。要注意的是应用程序可以在比目标API级别低的设备上安全安装。开发人员可以定位最新的API级别,并不会使其应用程序与旧版安卓设备不相容。

   如果一个应用程序为声明目标API级别,或者如果目标API级别是低于最低限度API级别的,目标API级别则被定为最低限API级别。对于本论文其余的部分,我们区别于在清单文件中的原始级别的目标API级别,与用这个规则计算的目标级别,实际由安卓操作系统的目标API级别。目前大约有百分之8的应用程序未声明一个有效的原始目标API级别。

   目标Sdk版本和最小Sdk版本属性整数值被称为为“API级别”,“API级别”对应不同的安卓版本代码。对于本文的其余部分,当讨论其他的API版本,我们使用API级别值(列如, 17, 18, 19)而不是版本代码(例如, 4.2, 4.3, 4.4)。最近的API级别与安卓版本代码对应如表I所示。

 API 等级

 版本号

 版本名称

 发布日期

 14

 4.0–4.0.2

 Ice Cream Sandwich

 2011年10月

 15

 4.0.3–4.0.4

  

 2011年12月

 16

 4.1–4.1.2

 Jelly Bean

 2012年7月

 17

 4.2–4.2.2

  

 2012年11月

 18

 4.3–4.3.1

  

 2013年7月

 19

 4.4–4.4.4

 KitKat

 2013年11月

 20

 4.4W–4.4W.2

  

 2014年6月

 21

 5.0–5.0.2

 Lollipop

 2014年11月

 22

 5.1–5.1.1

  

 2015年5月

 23

 6.0–6.0.1

 Marshmallow

 2015年10月

 表I:安卓版本简史

 A.安全问题

 从安卓文档中可以看出,矛头指向落伍的API级别存在安全隐患,这一点并不明显。在文档页面上目标Sdk版本属性,谷歌建议开发人员应该“增加[目标Sdk版本]属性的价值,去匹配最新的API级别”,但是这里没有提到目标落伍API级别的安全后果。在“安全贴士”第9页没有提及目标API级别。可以假设目标落伍的API级别是最小的或不存在的安全后果。

   然而,在最新的安卓版本中有重要的安全改动,不会用于目标落伍的API级别应用程序。例如,API级别17和19两者皆包含在广泛使用中的防止代码注入漏洞的改变。其他几个API级别改变流行特征具有更安全的默认行为,提供一层额外的保护。表II列出了为了主要安全,可以通过定位停用的安卓平台的改变。这些改变的细节和他们修复的漏洞在第五节中讨论。如果大量的应用程序目标过期API级别那么这些更改,无论多么用心良苦,将使应用程序被置于不必要的风险。

  

  

  

  

  

 API

 平台更改

 16

 17

 17

 19

 19

 21

 21

 默认情况下,从JavaScript访问文件网址是禁用的

 默认情况下,内容管理器不再受外部应用程序的影响

 未注释的应用程序模式是不能从JavaScript代码调用的

 isValidFragment以防止Fragment Hijacking

 JavaScript URLs在一个分开的网络视图环境中执行

 Context.bindService不再接受隐藏目的

 网络视图默认阻止混合内容

 表II:已选择与安卓相关的平台更改将更改为Android平台。目标API级别低于所列级别的应用程序,无法受益于这些更改提供的任何安全保护。

 3.方法

 我们的研究分析了从2012年5月到2016年1月期间从谷歌应用商店收集的1,232,696个免费应用的数据集。要收集这些应用,我们开发了一个系统来抓取谷歌应用商店来识别新应用,从谷歌应用中抓取元数据 存储和下载实际的应用程序文件。 该系统在五个短暂的时间窗口中操作,自然地将我们的数据集分成对应于这些时间窗口的五个较小的数据集(数据集A,B,C,D和E,以时间逆序)。表III描述这些 数据集,并列出收集每个数据集时最新的API级别。

 A.收集应用程序

 我们的系统会首先抓取谷歌应用商店,以便下载应用程序。 如果应用具有唯一的应用ID,我们认为该应用是唯一的。 要抓取谷歌应用商店,我们使用以下四种技术:(1)针对热门应用和收藏抓取谷歌应用指定的类别,(2)抓取随机知名的开发者页面以查找新应用,(3)在谷歌上搜索 使用已知应用程式说明中的字词播放商店,(4)从已检索网页的网址撷取所有应用程序编号。

 谷歌会在商店中发布应用程式的中继资料。我们会撷取并收集每个已检索应用程式的中继资料,包括最新版本 该应用程序已上传到应用商店和已安装应用程序的设备数量。

 要下载应用程序,我们使用类似于Viennot,Garcia和Nieh 描述的方法。 为了尝试有效地收集尽可能多的一组应用程序,我们只下载从未见过的应用程序ID。 对于除了数据集A之外的每个数据集,我们尝试下载每个在抓取期间标识的应用程序ID。 由于时间限制(和技术挑战),数据集A只是可用应用程序的一个子集。 我们在第VI-B节讨论这种收集方法的效果。

 数据集

 应用程序数量

 检索日期

 最新 API

 A

 60,086

 December, 2015

 23

 B

 219,115

 June, 2014

 19

 C

 165,489

 January, 2014

 19

 D

 645,862

 July, 2013

 17

 E

 142,144

 May, 2012

 15

 表III:本研究中使用的五个数据集的概述以及每个数据集收集时的最新API级别。

 B.分析

 谷歌应用商店发布每个应用程式的最低API层级,但不会发布目标API层级。 我们使用apk工具 ,一个静态分析工具,将打包的应用程序转换为人类可读的文件,提取清单并记录其目标API级别。 因为我们的应用程序数据库非常大,所以执行复杂的静态分析是不切实际的。 本研究中使用的所有静态分析都是纯语法的,我们通过处理由apk工具提取的应用程序字节码的smali表示来执行。

 4.评论

 在本节中,我们量化目标分裂问题的程度。我们首先展示大多数抽样应用的目标都是过时的API级别。我们定义一个过期的度量,衡量单个应用程序以及应用群体的目标分裂问题的严重程度。我们显示目标分裂问题主要是由开发人员疏忽引起的,而不是在应用商店的应用程序造成的。我们比较了流行的和不受欢迎的应用程序之间的过时度量,证明了即使在最流行的应用程序中目标分裂也是一个问题。最后,我们发现过时的曲线在四个最近收集的数据集中是相似的。这个结果表明,除非目标分裂问题被重新审查,否侧他可能在未来会以相同的规模存在。由于我们的数据集规模较大,我们认为这些结果广泛适用于整个谷歌应用系统中。

 A.如今的目标分裂问题

 图一显示了数据集A中应用程序的目标API级别分布,数据包A包含最新的应用程序。很明显,绝大多数应用程序不会定位API级别23,即收集数据集A是的最新API级别。更确切的说,我们发现数据集A目标API中的93%的应用程序级别为22或更低。

  定位更多过时的API级别的应用更有可能错过重要的安全更改。 我们不仅仅对一个应用程序是否过时感兴趣,而且对于一个应用程序过时了。 我们定义一种称为“过时”的定量度量,作为应用的目标API级别的发布日期与应用收集时的最新API级别的发布日期之间的差异(天数)。 我们发现数据集A中的应用程序的中间过时性为704天,平均过时性为686天。我们可以使用过期的累积分布(图2)作为对应用程序群体的目标分裂问题的严重性的度量。 通过检查曲线的低端,我们发现大多数应用程序都指向过时的API级别。 曲线顶部的长尾部显示,相当多的应用程序目标API级别已经过时了很多年。

 我们可能期望目标API级别的分布类似于倾斜的正态分布,随着API级别越来越过时,针对每个API级别的应用程序的百分比会减少。但是,如图1所示,我们发现,针对API级别7到16的应用程序的百分比相对较低。API等级为7和API等级为16的应用程序数量几乎相同。API级别9特别突出,被数据集A中的所有应用程序的近3%,即使它不提供任何关键的兼容性功能。为什么应用程序定位这样过时的API级别?

 如果我们分析数据集A中的原始目标API级别,我们发现8.2%的应用程序不包括原始目标API级别,设置低于其最低API级别的值或原始目标API级别无效。 这些应用使用其最低API级别作为其目标API级别。 这些应用程序占目标API级别分布中的大部分。 例如,定位到API级别15或更低的应用程序的63%是因为他们使用其最低API级别作为其目标API级别。 这表示通过说服开发人员正确使用目标Sdk版本属性,消除目标API级别分布中的长尾部的主要机会。

 B.以前的应用程序

 并非所有Google Play商店的应用程式都是由开发人员定期维护。 图3显示了应用程式集合与开发人员上传到谷歌应用商店之间的天数分布情况。请注意,这个日期可以是应用程式第一次发布或最近应用程式更新的日期。在2015年10月发布的API级别23之后,仅上传了数据集A中的38%的应用程序。显然,Google Play商店上停滞的应用程序不会针对发布的新API级别。 存在未维护的应用程序可能会扭曲目标API分发,并虚假地暗示,主动维护其应用程序的开发人员无法更新其应用程序以定位新的API级别。 在这里,我们试图区分由未维护的应用程序造成的过时性和通过应用程序维护持续的过时性。

 我们将应用程序的“过去的过时”定义为其目标API级别的发布日期与上传到谷歌应用商店之前最新API级别的发布日期之间的差异(以天为单位)。 过时的过时措施错过了开发者将其应用定位到当前API级别的机会。 图4描述了一个具体的例子来阐明过时与过时的过时之间的区别。 我们发现数据集A中的应用程序之间的中间过失过期为377天,平均过时的过时为536天。

 我们可以更宽松地定义过时的过时性,并包括一些滞后时间,以便开发人员在发布新的API级别后重新定位其应用。在应用程序上传至应用程式商店时,我们会选择最新的API级别,而不是在应用程序上传至应用程式商店时选择最新的API级别,而应用程式上传至应用程式商店时,至少需要N天。 我们将这个滞后时间称为“收养窗口”。增加30天的收养窗口只会稍微影响疏忽的过时性,将被疏忽的过时时间减少到327天,将平均被疏忽的过时时间减少到496天。

 图5显示了使用30天的采用窗口的疏忽过时的累积分布。 即使有大量的收养窗口,应用程序仍然无法定位适当的API级别。 79%的应用程序被过度定位到过时的API级别,这意味着这些应用程序上传到应用商店后就会过期。开发人员可以在发布之前访问新的安卓平台,因此应用程序可以在第一天的最新API级别上进行更新。 从这些结果可以清楚地看出,目标碎片问题不能由陈旧的应用程序解释,但是是开发人员疏忽的结果,这是由于无视目标过期API级别的后果,或者由于故意选择定位过时的API级别。

  

  

 C.流行的应用程序

 谷歌应用商店中绝大多数应用没有被很多用户下载。 数据集A中只有2%的应用程序已安装超过1,000,000次,但这些应用占数据集A中应用程序总安装量的74%。了解应用程序流行度与目标碎片问题之间的关系很重要。

     图6比较了不同流行度的应用程序之间的过时程序的分布。 我们看到,过时曲线非常相似,最受欢迎的应用程序(至少安装了一百万次),只是使用稍微过时的API级别。 比较不同流行度的应用程序之间被疏忽的过时分布给出了类似的结果(我们在这里不包括空格)。安装至少一百万次的应用程序的平均过时时间为607天,平均被忽略的过时时间为493天。

 本文来自香当网http://www.xiangdang.net/

推荐访问:分裂 应用程序 目标
上一篇:蜜蜂教案 蜜蜂教学设计一等奖
下一篇:【工程量现场确认单】 工程量现场确认单模版

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有