分析安卓应用的内部通信外文翻译资料

 2022-11-28 15:23:44

英语原文共 15 页,剩余内容已隐藏,支付完成后下载完整资料


分析安卓应用的内部通信

Erika Chin Adrienne Porter Felt Kate Greenwood David Wagner

University of California, Berkeley

Berkeley, CA, USA

摘要

现代的智能手机操作系统支持使用开放系统API的第三方应用。除了这些开源的API,安卓操作系统提供丰富的应用间消息传递系统。这使得应用间合作和通过组件重用减少开发者的负担。不幸的是,消息传递表面上也是一种应用攻击。信息内容可以被发现、修改、偷取、更换,从而危及用户的隐私。此外,恶意应用程序可以注入伪造或其他恶意的消息,这可能会导致用户数据泄露违反应用安全政策。

我们研究安卓应用程序的交互和识别应用组件的安全风险。我们提供一种工具,comdroid,检测应用程序的通信漏洞。开发者可以用comdroid在发布前检测他们的应用程序,由应用程序的审稿人分析在安卓市场的应用,并通过终端用户。我们用comdroid分析20个应用程序并发现34个可利用的漏洞,其中有12款应用程序至少有一个漏洞。

介绍

在过去的十年中,移动电话已经从用于电话和短信到复杂的简单的设备可以运行第三方软件的设备。手机拥有者不再局限于简单的通讯录和操作系统和电话制造商所提供的其他基本功能。他们可以自由定制自己的手机,通过安装第三方应用程序的选择。手机厂商支持第三方应用开发商提供的开发平台和软件商店(例如,安卓市场,苹果应用商店等),开发者可以在上面发布应用。

安卓应用通信模式进一步提升和丰富应用的发展。安卓开发人员可以利用现有的数据和服务提供的其他应用程序,同时仍然给人的印象是简单的,无漏洞的应用。例如,一个餐馆评论应用可以叫其他开发者展示餐馆的网站,提供餐馆的地址和电话。这种模式减少开发者的负担和促进功能的重用。安卓通过将应用分为组件和提供一个消息传递系统,使组件可以在和跨应用程序边界内进行通信。

安卓的消息传递系统若使用不当将变成攻击应用。在本文中,我们讨论安卓消息传递和不安全的开发实践的风险。如果邮件发送人没有正确指定收件人,攻击者可以拦截消息,损坏保密性和完整性。如果一个组件不限制谁可以发送消息,然后攻击者可以向它注入恶意消息。

我们已经在安卓生态中看到大量的恶意手机应用。例如,恶意短信可以伪装成一个提示计算器发送和收到第三方的信息。同样,MobiStealth记录短信、通话记录、浏览器历史记录、GPS定位等。这是令人担忧的因为用户依靠自己的手机来进行私人和敏感的失误,如发送电子邮件,拍照,和进行银行交易。因此,重要的是帮助开发人员写安全的应用程序,不泄漏或改变用户数据。

我们检查了安卓通信模型和它创建的安全风险,包括个人数据丢失和错误,网络诈骗,和其他意想不到的行为。我们提出了一个分析工具,comdroid,Android应用程序来检测这些漏洞的潜在情况。我们用comdroid分析20个应用程序并发现34个可利用的漏洞,其中有12款应用程序至少有一个漏洞。其中大部分漏洞源于使用对于内部和跨应用程序的通信的意图,所以我们为改变安卓系统的开发者提供建议区分内部和外部的消息。

安卓概览

安卓的安全模型与标准桌面安全模型有很大的不同。安卓应用程序基于相互信任原则而对待。它们相互分离,没有获得其他私人数据的权限。我们提供了一个安卓安全模型的概述

和接着是跨应用程序的通信设施。

虽然其他智能手机平台也有类似的安全模型,我们专注于安卓,因为它有最复杂的应用通信系统。安卓消息传递系统的复杂性意味着它有最大的攻击面。在第6节中,我们比较和对比安卓和其他移动操作系统。

2.1线程模型

安卓市场有一个广泛的第三方应用程序,用户可以安装不同的信任级别的应用程序。用户从信任的安卓程序安卓未知开发人员的安卓应用处理私人信息如财务数据和个人照片。例如,用户可以安装一个非常可信的银行应用程序和一个自由游戏应用程序。游戏不应该能够获得用户的访问银行账户信息的权限。

在安卓安全模型下,所有应用都是被视为潜在威胁。每一个应用程序都运行在它自己的进程中,有一个低权限用户ID,并且应用程序只能默认访问他们自己的文件。这些隔离机制的目的是保护敏感信息免于泄露给恶意软件。

尽管他们的默认隔离,应用程序可以选择通过消息传递通信。通信可以成为攻击方向。如果一个开发者意外地暴露了功能,那么应用程序就可以被欺骗来执行一个不受欢迎的操作。如果开发者将数据发送给错误的收件人,那么它可能会泄露敏感数据。在本文中,我们考虑如何应用程序可以防止这些基于通信的攻击。除了提供跨应用程序的隔离外,

安卓安全模型保护系统API免于恶意代码应用的攻击。默认情况下,应用程序没有与系统的敏感部件进行交互的能力;然而,用户可以在安装过程中授予应用程序附加权限。我们不考虑攻击操作系统的情况;相反,我们专注于保护应用程序。

2.2Intent

安卓系统提供了一个复杂的消息传递系统,其中一个intent是用于连接的应用程序。Intent是一个声明一个收件人,并且可以选择包含数据的消息。一个intent可以被认为是一个独立的对象指定远程过程以调用和包含关联参数。应用程序使用intent为应用程序间通信和内部应用通信。此外,操作系统发送的intent作为事件通知应用程序。其中一些事件通知是系统范围内的事件,只能是由操作系统发送。我们称这些信息为系统传播intent。

Intent可以被用来显式或隐式通信。一个显式的intent指定它该被传送到一个特定的应用由这个intent指定,而一个隐含的intent请求交付到任何应用程序支持期望的操作。换句话说,一个显式intent通过接受者的名字辨认而一个隐式intent让安卓平台决定应用程序应接收的intent。例如,考虑一个应用程序存储联系人信息。当用户点击一个联系人的街道地址,联系人应用程序需要另一个应用程序显示该位置的地图。为了实现这一点,应用程序可以直接发送一个显式的intent给谷歌地图,或它可以发送一个隐式的intent,将交付给任何提供了映射功能应用程序。使用显式intent保证intent传递给收件人,而隐式允许迟到在不同应用程序之间运行时绑定。

2.3构成

intent被传送到应用程序组件,这是逻辑应用程序构建块。安卓定义四组件类型:

  • Activities提供用户接口。Activities通过intent开启,它们可以返回数据通过它们调用的部分。所有应用可见的部分都是Activities。
  • Service在后台运行和用户不交互。下载一个文件和解压缩一个文档是Service可能采取的行动。其他围绕着service的部分使它们调用在目标service接口中声明的方法。Intents被用来启动和绑定service的。
  • 信息接收器接收Intent发送给对个应用。接收方通过一个恰当的intent被触发,然后在后台运行处理事件。接收器通常是短暂的,他们通常将消息传递给活动或服务。有三种形式的传播intent:平常、静止、有序。正常的传播器立即发送给已注册的接收者,然后消亡。有序的广播传送到一个接收机,同时,交付中的任何接收器一个有序的广播链可以阻止它的传播。广播接收器有能力设置他们的接收有序广播的优先级。静止的传播器保持访问后,他们已经交付,并重新传播到未来的接收器。
  • 内容提供者是由其可寻址的数据库应用程序定义的URI。它们被用于持续性内部数据存储,并作为一种机制应用程序之间共享信息。

Intents可以在四个部分中的三个中发送:Activities, Services, and Broadcast Receivers。Intents可以被用来启动Activities;启动、停止和绑定Services;传播信息到传播接收器。所有这些形式的沟通可以使用显式或隐式intent。默认情况下,组件只接收内部应用程序的intent。

2.4组件声明

为了接收intent,一个component必须在应用的manifest当中定义。一个manifest文件是在安装过程中伴随着应用程序的配置文件。开发人员使用清单来指定外部的intent(如果有的话)应该交给应用程序的组件。

2.4.1导出组件

为一个Service或者Activity收到intent,所以必须定义在manifest文件中。如果其声明设置了输出标志,或者至少包含一个intent过滤器,该组件将被认为是导出,或是公开的。导出的intent可以接收其他应用的intent,intent过滤器则指明应当被传给导出的组件的intent的类型。

安卓决定应匹配每个intent的部分构件传递到出口该组件的声明。一个intent可以包含一个组件名称、动作、数据、类别、其他数据或其子集。开发者通过指定一个收件人组件名称发送一个显式的intent,然后将其传递给该名称的组件。隐式意图缺乏组件名称,所以安卓使用其他域来确定一个适当的收件人。

一个intent过滤器可以输入intent的动作,数据,和类别;操作系统将对这些约束的intent匹配。Action指定要执行的操作,数据字段指定操作的数据类型,并且该类别提供了关于执行的操作的附加信息。例如,一个组件,编辑图像可能定义一个intent过滤器,它可以与一个编辑行为和数据的MIME类型的图像/接受任何intent。对于一个组件是一个符合条件的接收器的intent,它必须已指定的每个动作,类别和数据中包含的intent在其自己的intent过滤器。过滤器可以指定更多的动作,数据和类别的intent,但它不能变更少的。

多个应用程序可以注册组件处理相同类型的intent。这意味着操作系统需要决定哪些组件应该接收到intent。传播接收器可以指定一个优先级(作为其intent过滤器的属性),以指示操作系统如何以及适合的组件是处理一个intent。当被发送的命令时,intent过滤器的优先级最高,将接收intent。活动之间的关系通过询问用户选择首选的应用程序(如果用户尚未设置默认选择)来解决。服务之间的竞争是由随机选择一个服务来决定的。

重要的是要注意,Intent过滤器不是一个安全机制。一个发送者可以分配任何行动,类型,或类别,它想要一个意图(除了某些行动,只有系统可以发送),或它可以绕过过滤系统完全与一个明确的意图。一个发送者可以分配任何行动,类型,或类别,它想要一个intent(除了某些行动,只有系统可以发送),或它可以绕过过滤系统完全与一个明确的意图。相反,一个组件可以要求处理任何动作、类型或类别,而不管它是否真的非常适合所需的操作。

2.4.2保护

安卓限制访问系统的权限,和应用程序必须请求适当的权限在他们的清单中,以获得受保护的访问呼叫的权限。应用程序还可以使用权限来保护自己。一个应用程序可以指定一个调用方必须具有一定的权限,通过在清单中添加一个许可要求,在清单中添加一个组件的声明,或者在整个应用程序中设置默认的权限要求。此外,开发人员可以在代码中添加权限检查。相反,传播intent发送者可以限制谁可以接收通过要求收件人有权限的intent。(这种保护只适用于intent传播intent不可用于活动或服务的。)应用程序可以利用现有的安卓权限或在其清单中定义新的权限。所有权限都有一个保护级别,这决定了获得权限的权限有多困难。有四个保护级别:

  • 正常权限被自动授予。
  • 在安装过程中,用户可以获得危险的权限。如果允许请求被拒绝,则不安装应用程序。
  • 如果请求应用程序是由同一开发者定义的权限签名权限,则只授予签名权限。签名权限是有用的,用于限制组件访问一小部分的应用程序的信任和控制的开发。
  • 如果应用程序达到签名要求或应用程序装在系统文件中则授予签名或系统权限。从安卓市场上的应用程序不能安装到系统应用程序文件夹中。系统应用程序必须由高级用户预先安装的设备制造商或手动安装。

应用程序寻求强大的保护,可以要求调用方持有更高级别的权限。例如,BRICK权限可以用来禁用一个设备。它是由操作系统定义的一个签名级别的权限,这意味着它只会被授予与操作系统相同的签名的应用程序。如果一个开发人员用BRICK权限来保护它的组件,然后只有一个应用程序的许可(例如,一个谷歌的应用程序)可以使用该组件。相比之下,一个正常的权限受保护的组件基本上是未受保护的,因为任何应用程序都可以很容易地获得权限。

基于intent的攻击

我们从发送者和接受者的角度研究Android通信面临的安全挑战。在第3.1节中,我们讨论了如何发送一个intent的错误的应用程序可以泄露用户信息。数据通过窃听或在应用间的偶然传送权限而被盗取。在3.2节中,我们考虑的漏洞来接收外部的intent,即从其他应用程序相关的,要进来的intent。如果一个组件被意外地公开,那么外部应用程序可以以令人惊讶的方式调用它的组件或将恶意数据注入到它。在3.3节我们总结了安全的安卓通信指南。

在我们讨论组件安全的过程中,我们把注意力集中在导出组件上。非导出组件是不可访问的其他应用程序,因此不受攻击,不是我们在座的主题。我们也排除导出组件和其他应用程序无法获得保护的传播intent与权限。如第2.4.2解释说,正常的和危险的权限不提供组件或intent很强的保护:正常权限是自动授予的,并授予用户权限的危险权限。然而,签名和系统签名权限很难获得。我们认为组件和传播intent是与签名或系统签名权限为私人保护。

3.1未经授权的intent

当一个应用程序发出一个隐式的intent时,就无法保证意intent图将接收到预定的收件人。恶意应用程序可以拦截一个隐式的intent,简单地通

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[29466],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。