基于Android的安全网盘设计与实现外文翻译资料
2021-12-18 23:04:59
安卓智能手机操作系统占据了75%以上的市场份额,其竞争对手iOS、Windows Phone和黑莓远远落后于[1]。尽管智能手机在过去10年里被使用过,但iOS和Android的推出改变了这一格局,在全球消费者和开发者中产生了巨大的吸引力。智能手机已经变得无处不在,因为有广泛的连接选项,如GSM、CDMA、Wi-Fi、GPS、蓝牙和NFC。Gartner 2013年的报告显示,智能手机销量比2012年的[1]增长了42.3%。
如图1所示。报告显示,安卓系统的销量从66台增加到78台,增幅为12%,与之最接近的iOS系统的销量从19台下降到15台,降幅为4%。一直在线的互联网连接和个人信息,如联系人、信息、社交网络访问、浏览历史、银行交易等,也吸引了恶意软件开发者,他们通常会选择智能手机操作系统平台,尤其是Android,因为它很受欢迎。这导致了Android恶意软件的崛起,如预付费短信木马、间谍软件、僵尸网络、攻击性广告软件以及通过第三方和官方应用商店发布的特权升级漏洞。
图1:2012 - 2013年手机OS销量对比
Android在用户中的受欢迎程度使得开发人员提供了创新的应用程序(通常称为应用程序)。谷歌Play是官方的Android应用程序市场,托管第三方开发者的应用程序,收取象征性的费用,提供适度的控制。谷歌Play拥有超过100万个[2]应用,每天有大量的下载量。与苹果市场应用商店不同,谷歌Play不需要手动验证上传的应用。相反,谷歌Play依赖于Bouncer,一个动态模拟环境,以保护自己免受恶意应用程序的威胁。它可以提供针对威胁的保护,但无法分析现有应用程序[3]的漏洞。恶意应用程序可能会欺骗易受攻击的应用程序泄露用户的私人信息,从而在无意中损害后者的声誉。此外,Android不推荐,但允许在设备上安装第三方应用,这已经激起了几十个地区和国际应用商店[4][5][6][7][8]。然而,第三方应用商店提供的应用程序的保护和质量是[9]关注的问题。
Android安全解决方案提供商报告了一个惊人的增长
在2010年,恶意软件仅来自3个家庭和100个样本,到100多个家庭有12- 60万个独特的样本[10][11][12][13][14][15]。VirusTotal[16]上的恶意应用程序数量每年都在翻倍。恶意软件正在使用聪明的方法绕过Android操作系统提供的现有安全机制以及反恶意软件产品,如隐身技术、动态执行、代码混淆、重新打包和加密[17][18]。现有的恶意软件传播利用上述技术击败基于签名的方法使用的反恶意软件产品。因此,适应这些技术并及时作出反应的新机制是重要的。与每个已知恶意软件的一个签名相比,主动检测已知恶意软件的未知变种需要较少的签名更新。
恶意软件应用程序开发人员通过利用平台漏洞[19]、窃取敏感用户信息[17]、利用电话服务[20]或创建僵尸网络[21]获得金钱利益,从而获得智能手机的控制权。因此,了解它们最近的业务活动、工作模式和使用模式对于设计主动检测方法非常重要。
Android应用程序被打包到.apk文件中,该文件从技术上讲是一个zip归档文件,由几个文件和文件夹组成,如图3所示。特别是,AndroidManifest。xml文件包含关于应用程序的元数据,如包名、所需权限、活动、服务、广播接收器或内容提供者等一个或多个组件的定义、支持的最小和最大平台版本、要链接的库等等。res文件夹由图标、图像、字符串、数字、颜色常量、UI布局、菜单、动画等编译成二进制格式。assets文件夹包含未编译的资源,并维护其目录结构。dex包含要在Dalvik虚拟机下运行的Dalvik可执行字节码。META-INF文件夹包含app数字签名,以及用于验证和识别的开发者证书。
如前所述,Android应用程序是用Java语言编写的。App构建过程如图4所示。Java代码的编译为源代码中的每个Java类创建了许多.class文件,其中包含中间Java字节码。使用dx工具,这些.class文件被转换成单个Dalvik可执行文件(dex)。
图3:Android包(APK)结构
图4:App构建过程
。
自2008年Android发布以来,学术界和业界的研究人员已经提出了许多解决方案和框架来减轻恶意应用程序的威胁,其中一些是开源的。这些解基本上可以用以下三个参数来表征:
- 该解决方案的目标可以是应用程序安全性评估、分析或恶意软件检测。应用安全评估解决方案试图找出应用程序中的漏洞,如果被对手利用,可能会损害用户和设备的安全。分析解决方案检查未知应用程序中的恶意行为,而检测解决方案旨在防止现有的恶意软件安装到设备上。
- 实现上述目标的方法可以是基于静态分析的方法,用于识别应用程序的行为,而不实际执行它们。控制流和数据流分析是正式静态分析的示例实现。在基于动态分析的方法中,应用程序是在沙箱环境中执行/仿真的,目的是监控应用程序的活动,识别使用静态分析方法难以或不可能实现的行为。
- 部署上述解决方案。
现有的关于智能手机安全的调查论文综述了目前的技术现状,综合考虑了所有流行的操作系统平台[27][28],而本文的综述论文主要关注的是Android操作系统。La Polla et al.[28]对2004-2011年智能手机安全威胁及其解决方案进行了调查,其中Android操作系统的覆盖范围非常有限。
Suarez-Tangil等人[27]扩展了La Polla等人[28]的工作。特别是针对基于硬件、通信、传感器、系统等智能手机相关功能误用的攻击,很好地洞察了利用Android的某些功能将如何影响设备的整体安全。Suarez-Tangil等人根据恶意软件的攻击目标、分布和感染以及权限获取对其进行分类。相反,我们根据反恶意软件行业的术语对恶意软件进行分类,目的是提供2010-13年期间恶意软件感染率和威胁感知的更准确视图。
2011年,William Enck[29]研究了Android中可用的安全机制,特别是通过应用间通信的权限和安全影响进行保护。此外,他还讨论了其他第三方Android平台强化解决方案及其优点和局限性。他还研究了各种应用安全分析建议,并给出了未来的发展方向。
我们的目标是通过扩大Android安全问题、2010-13年恶意软件的增长、它们的渗透、隐身技术、以及一些流行的缓解方案的优势和弱点的报道来补充之前的评论。特别地,我们全面介绍了恶意软件作者通过生成现有Android恶意软件的变种来逃避检测的秘密技术。我们还提出了
Android是在Android开源下开发的。
项目(AOSP)由谷歌维护,开放手机联盟(OHA)推动,OHA由原始设备制造商(oem)、芯片制造商、运营商和开发商组成。Android应用程序是用Java开发的,但是本地代码和共享库是用C/ c 编写的。典型的Android架构如图2所示。底层是Linux内核,专门针对资源有限的嵌入式环境进行了调优。Android基于Linux内核,因为它有健壮的驱动程序模型、现有驱动程序、内存和进程管理、网络支持以及其他核心服务。目前,Android完全支持两种指令集架构:1)ARM,在智能手机、平板电脑上非常流行;2) x86,在移动互联网设备(MIDs)中非常流行。在Linux内核之上是支持高性能第三方可重用库和内部功能的本机库。Java代码被转换成Dalvik字节码。
Android的设计从一开始就考虑到了安全性,目的是保护用户数据、应用程序、设备和网络[30]。然而,总体安全性取决于开发人员采用最佳实践的意愿和能力。此外,用户必须意识到某些应用程序在安装后可能对其数据和设备的安全性造成的影响。Android上的反恶意软件解决方案由于应用程序的安全模型,无法积极地处理恶意软件。例如,反恶意软件应用程序对设备中其他应用程序或文件系统的扫描和/或监控能力有限。在本节中,我们将修改Android平台提供的安全特性。
在内核级别,Android使用DAC(自由访问)
控制)Linux的特性,通过给每个应用程序进程分配一个唯一的UID,使一个应用程序不能干扰其他应用程序或系统服务。Android还通过实现一种名为偏执网络安全(Paranoid network Security)的功能来保护网络访问,通过这种功能,Wi-Fi、蓝牙和互联网访问服务可以在不同的组[31]中运行。如果某个应用程序已被授予特定网络访问权限(如蓝牙),则将该应用程序的进程分配到相应的组中。因此,除了uid之外,进程还可以被分配一个或多个gid。Android应用程序沙盒如图5所示。
一个app必须包含一个由创建它的开发者签名的PKI证书(如图4所示),签名是谷歌和开发者之间的信任点,这样开发者才能确保他们的app是不经过修改的提供给用户的,他们只对自己app的行为负责。此签名用于通过分配唯一UID将应用程序放置到其沙箱中。如果app A的证书与设备上已经安装的app B相匹配,Android会分配相同的UID(即将A应用为B应用,允许它们共享彼此的私有文件和权限。因此,开发人员不建议与其他人共享自己的证书。
Android中的权限是粗粒度的,例如,INTERNET权限不能限制对特定统一资源定位器(URL)域的访问。READ_PHONE_STATE权限还允许检查电话是否正在响或处于等待状态,同时它允许读取电话标识符。WRITE_SETTINGS、CAMERA等权限也同样广泛,因此违反了最小权限访问原则。权限也不是分层的,例如WRITE_CONTACTS并不意味着READ_CONTACTS,它必须单独请求。READ_SMS和WRITE_SMS的情况也是如此。在安装时,要求用户授予全部或不授予权限。通常情况下,用户无法判断应用程序所请求的某些权限是否合适,并将自己暴露在[33]风险之下。
越来越多的IT服务转向移动设备的应用程序,促进了为移动应用程序的开发和测试设计许多支持工具和基础设施。虽然手工测试仍然是一个最好的方法来评估可用性和检测故障场景的多样性可以使用一个应用,自动化和系统化的测试,以确保一个应用程序的质量至关重要。在这个意义上,几个测试框架和支持工具已经开发多年来帮助开发者来评估他们的应用程序在不同的级别:单元测试、系统测试、可用性测试等。
令人惊讶的是,我们的调查结果显示,大约66%的被调查应用程序没有自动测试的证据。此外,产品LoC和测试LoC之间的关系通常很低,这意味着大多数特性和用户交互场景都没有经过测试。这样的结果让我们明白,我们的结果似乎表明,开发人员不是在手动测试应用程序,就是没有正确地测试他们的应用程序。即使应用程序是完全手工测试的,这可能也不是测试移动应用程序的合适方法,因为它们往往发展得很快,而且手动测试不会扩展到运行在不同配置下的大型复杂应用程序。
有人可能会说,我们的调查结果只适用于我们选择的应用程序类型,因为开源社区可能没有提供无bug应用程序的目标。相反,它们允许用户报告bug和稍后可以修复的问题。此外,开发人员可能更喜欢运行不基于代码/脚本的测试,因为更大的组织由于移动应用程序[7]带来的测试挑战而倾向于执行手工测试。
令人惊讶的是,考虑到许多可用的测试框架,大多数应用程序没有提供自动化测试。这也表明开发人员没有遵循开源软件社区中广泛采用的测试流程,比如测试优先技术,因为测试驱动开发(TDD)要求在实现之前创建自动化测试。这些结果还可能表明可用的框架不适合开发人员在移动测试中通常采用的测试类型,或者为特定框架编写测试用例可能需要大量的工作。
当开发人员自动化软件测试活动时,他们使用测试框架来自动化单元测试、GUI测试和mock的执行。说到单元测试,Android。使用Test、JUnit、Robolectric、Assertj、Hamcrest和Fest;用于GUI测试,Appium, Espresso, MonkeyRunner, Robotium和UIAutomator;mock是android。test。Mock、EasyMock、MockWebServer和Mockito。我们注意到单元测试被广泛使用,而GUI测试只出现在一小部分项目上(14.7%的应用程序带有自动化测试),尽管至少有五种不同的GUI测试自动化框架可用。
单元测试被广泛使用的原因之一可能是它不需要运行模拟器/设备。此外,它们要么是用JUnit(一种被广泛采用的测试Java应用程序的框架)编写的,要么是用类似JUnit的代码编写的。另一方面,手动编写代码来自动化用户交互需要大量的工作,并且用户交互的几个测试用例的执行需要使用模拟器或真实设备,这可能需要很长时间。此外,根据测试用户交互的脚本是如何编写的,app界面上的更改可能需要维护几个测试用例。
我们设计了一项实证研究,从软件测试的角度来描述移动应用程序。表1显示了我们准备在本文中回答的研究问题(RQs)。
第一个RQ背后的基本原理是调查应用程序项目是否存在测试自动化的证据(RQ)1),测试用例有多广泛(RQ1.1,以及哪些是最流行的测试框架(RQ)1.2)。此外,我们着手调查测试自动化的存在和其他一些度量之间是否存在相关性(RQ)1.3):项目规模,从而说明大型项目是否比小型项目需要更多的测试自动化;分类,这样我们就可以研究特定类型的应用程序是否更容易自动化;评分和下载次数,
资料编号:[4521]