英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料
分析Android中的应用程序间通信
Erika Chin Adrienne Porter Felt Kate Greenwood David Wagner
University of California, Berkeley
Berkeley, CA, USA
{emc, apf, kate_eli, daw}@cs.berkeley.edu
摘要
现代智能手机操作系统支持使用开放系统API开发第三方应用程序。除了开放API以外,Android操作系统还提供了丰富的应用程序间消息传递系统。这鼓励了应用程序间协作,并通过促进组件的重用来减轻开发人员的负担。不幸的是,消息传递也是一个应用程序攻击对象。消息的内容可能被窃取,修改,被盗或被替换,而这可能会损害用户的隐私。此外,恶意应用程序可能会注入伪造消息或恶意消息,这可能会导致篡改用户数据和违反应用程序安全协议。
我们检查Android应用程序交互并识别应用程序组件中的安全风险,为此我们提供了一个工具ComDroid,可以检测应用程序通信的安全性。开发者可以使用ComDroid在发布之前分析他们自己的应用程序,由应用程序审查人员分析Android Market中的应用程序以及用户操作。我们在ComDroid的帮助下分析了20个应用程序,发现了34个可利用的漏洞; 20个应用程序中有12个至少有一个漏洞。
类别和主题描述:
D.2.5 [软件工程]:测试和调试;
D.4 [操作系统]:安全和保护
一般条款:
安全
关键词:
Android,消息传递,intents,手机安全
- 介绍
在过去的十年中,手机已经从用于电话和短信的简单设备发展到可以运行第三方软件的精密设备。手机用户不再局限于操作系统和手机制造商提供的简单地址簿和其他基本功能。他们可以通过安装第三方应用程序来自由对手机进行配置。移动电话制造商通过提供开发平台和软件商店(例如Android Market,Apple App Store [1,3])支持第三方应用程序开发商,开发人员可以在其中发布应用程序。
Android的应用程序通信模型进一步促进了丰富应用程序的开发。 Android开发人员可以利用其他应用程序提供的现有数据和服务,同时仍然给人一种单一的无缝应用的印象。例如,餐厅评论应用程序可以要求其他应用程序显示餐厅的网站,提供餐厅位置的地图,并致电餐厅。这种通信模型减少了开发人员的负担并促进了功能的重用,Android通过将应用程序划分为组件模块并提供消息传递系统来实现这一目标,以便组件可以在应用程序边界内和跨应用程序边界进行通信。
如果使用不当,Android的消息传递系统可能会成为被攻击对象。在本文中,我们讨论Android消息传递的风险并确定不安全方面的测试。如果消息发送者没有正确指定收件人,则攻击者可能会拦截该消息并损害其保密性或完整性。如果组件不限制谁可以发送消息,则攻击者可能会向其中注入恶意消息。
我们已经看到大量的恶意手机应用程序。例如,SMS Message Spy Pro将自己定义为小费计算器,并将所有发送和接收的SMS消息转发给第三方[25];同样,Mo-biStealth记录SMS消息,通话记录,浏览器历史记录,GPS位置等[26,4]。这很令人担忧,因为用户依靠他们的手机来执行私密和敏感的任务,例如发送电子邮件,拍照以及完成银行交易。因此,帮助开发人员编写安全的应用程序非常重要,因为这些应用程序不会在对手面前泄漏或更改用户数据。
我们检查Android通信模型及其创建的安全风险,包括个人数据丢失和损坏,网络钓鱼以及其他不安全行为。例如ComDroid,这是一种分析Android应用程序用以检测这些漏洞的潜在实例的工具。我们使用ComDroid分析了20个应用程序,发现其中12个应用程序有34个漏洞。这些漏洞大部分源于Intents可用于应用内和应用间通信这一事实,因此我们提供了改变该设计的建议,以帮助开发者区分内部和外部消息。
- android概述
Android的安全模型与标准桌面安全模型相比显着不同。 Android应用程序被视为相互不信任的主体; 他们彼此隔离,无法访问彼此的私人数据。 我们接下来提供Android安全模型和应用程序间通信设施的概述。
虽然其他智能手机平台也有类似的安全模式,但我们专注于Android,因为它拥有最复杂的应用程序通信系统。 Android的消息传递系统的复杂性意味着它具有最大的攻击对象。在后面,我们将Android与其他移动操作系统进行了比较和对比。
2.1威胁模型
Android Market包含各种各样的第三方应用程序,用户可以安装具有不同信任级别的应用程序。用户将来自未知开发人员的应用程序与处理私人信息(如财务数据和个人照片)的可信应用程序一起安装。例如,用户可能安装高度可信的银行应用程序和免费游戏应用程序。游戏应该无法获得用户的银行账户信息。
在Android安全模型下,所有应用程序都被视为潜在恶意。每个应用程序都使用低特权用户ID在其自己的进程中运行,并且应用程序默认情况下只能访问它们自己的文件。这些隔离机制旨在限制恶意软件并保护敏感信息的应用程序。
尽管其默认隔离,应用程序可以通过消息传递进行通信。交流可以成为一个攻击媒介。如果开发人员不小心解开部分功能,则可能会影响应用程序,从而造成不安全的行为。如果开发人员将数据发送给错误的收件人,则可能会泄露敏感数据。在本文中,我们考虑应用程序如何防止这些基于通信的攻击。
除了提供应用程序间隔离之外,Android安全模型还可以保护系统API免受恶意应用程序的攻击。默认情况下,应用程序无法与系统API的敏感部分交互;但是,用户可以在安装过程中授予应用程序额外的权限。但我们不考虑对操作系统的攻击;相反,我们专注于确保彼此之间交互的应用程序的安全。
2.2 Intents
Android提供了一个复杂的消息传递系统,其中Intents用于链接应用程序。 Intent是一种消息,用于声明收件人并可选择包含数据;一个Intents可以被认为是一个独立的对象,它指定了一个远程过程来调用并包含相关的参数。应用程序使用Intents进行应用程序间通信和应用程序内通信。此外,操作系统还将事件通知发送给应用程序。其中一些系统范围内的事件的事件通知,只能由操作系统发送。我们将这些消息称为系统广播意图。
Intents可以用于显式或隐式通信。明确的Intent指定它应该交付给Intent指定的特定应用程序,而隐式Intent请求传递给支持所需操作的任何应用程序。换句话说,一个明确的Intent通过名称来标识预期的接收者,而一个隐含的Intent将它留给Android平台去确定哪个应用程序应该接收Intent。例如,考虑存储联系人信息的应用程序。当用户点击联系人的街道地址时,联系人应用程序需要请求另一个应用程序显示该位置的地图。为了达到这个目的,这个连接应用程序可以直接向Google Maps发送一个明确的Intent,或者它可以发送一个隐含的Intent,这个Intent会被传送到任何说它提供了地图ping功能的应用程序(例如,Yahoo! Maps或Bing Maps )。使用明确的Intent可以保证Intent被传递给目标接收者,而隐式Intents则允许不同应用程序之间的后期运行时绑定。
2.3组件
意图交付给应用程序组件,这是逻辑应用程序模块。 Android定义了四种类型的组件:
用户活动提供界面。活动以Intents开始,他们可以在完成时将数据返回到调用组件。应用程序的所有可见部分都是活动。
服务在后台运行,不与用户交互。下载文件或解压缩存档是可能发生在服务中的操作实例。其他组件可以绑定到一个服务,该服务允许活页夹调用在目标服务界面中声明的方法。Intent用于启动并绑定到服务。
广播接收器收到发送给多个应用程序的Intents。接收者由收到适当的Intent后被触发,然后在后台运行以处理事件。接收者通常是短暂的;他们经常将消息转发给活动或服务。有三种类型的广播意图:普通,粘性和有序。普通广播一次发送到所有已注册的接收器,然后消失。有序广播一次发送给一个接收器;此外,有序广播传送链中的任何接收器都可以停止传播。广播接收器能够设置接收有序广播的优先级。粘滞广播在被删除后仍然可以访问,并重新广播给未来的接收器。
内容提供者是可以通过其应用程序定义的URI寻址的数据库。它们既用于持续的内部数据存储,也用作应用程序之间共享信息的机制。
Intents可以在四个组件中的三个组件之间发送:活动,服务和广播接收器。 意图可以用来开始活动; 启动,停止和绑定服务; 并向广播接收机广播信息。 (表1显示了相关的方法签名。)所有这些通信形式都可以与显式或隐式意图一起使用。 默认情况下,组件仅接收内部应用程序意图(因此不是外部调用)。
To Receiver |
sendBroadcast(Intent i) |
sendBroadcast(Intent i, String rcvrPermission) |
|
sendOrderedBroadcast(Intent i, String recvrPermission, BroadcastReceiver receiver, ...) |
|
sendOrderedBroadcast(Intent i, String recvrPermission) |
|
sendStickyBroadcast(Intent i) |
|
sendStickyOrderedBroadcast(Intent i, BroadcastReceiver receiver, ...) |
|
To Activity |
startActivity(Intent i) |
startActivityForResult(Intent i, int requestCode) |
|
To Service |
startService(Intent i) |
bindService(Intent i, ServiceConnection conn, int flags) |
|
表1:意图发送机制的非详尽列表 |
2.4组件声明
要接收Intents,必须在应用程序清单中声明一个组件。清单是在安装过程中伴随应用程序的配置文件。开发人员使用清单来指定应将哪些外部意图(如果有)传递给应用程序的组件。
2.4.1导出组件
对于服务或活动接收意图,必须在清单中取消分类。 (广播接收器可以在清单中或运行时声明。)如果组件被声明为EXPORTED AG或至少包含一个Intent过滤器,则该组件被视为已导出或公开。导出的组件可以从其他应用程序接收Intents,Intent l-ters指定应将什么类型的Intents传递到导出的组件。
Android通过将每个Intent字段与组件声明进行匹配来确定应将哪些Intents传递到导出组件。意图可以包括组件名称,动作,数据,类别,额外数据或其任何子集。开发人员通过指定收件人组件名称发送明确的意图;然后将Intent传递给具有该名称的组件。隐式Intents缺少组件名称,所以Android使用其他字段来标识合适的收件人。
Intent过滤器可以通过操作,数据和类别限制传入意图;操作系统将根据这些限制匹配Intents。一个动作指定要执行的一般操作,数据字段指定要操作的数据类型,该类别提供了有关要执行的动作的附加信息。例如,编辑图像的组件可能会定义一个Intent过滤器,声明它可以接受任何带有EDIT操作的Intent和MIME类型为image / *的数据。要使组件成为Intent的符合条件的接收者,它必须在其Intent过滤器中指定Intent中包含的每个操作,类别和数据。过滤器可以指定比意图更多的动作,数据和类别,但它不能少。
多个应用程序可以注册拥有相同类型Intent的组件。这意味着操作系统需要决定哪个组件应该接收意图。广播接收器可以指定一个优先级(作为其Intent过滤器的一个属性),以向操作系统指示组件处理意图的合适程度。当发送有序的广播时,具有最高优先级的意向过滤器将首先接收意图。通过要求用户选择首选应用程序(如果用户还没有选择)来解决活动间的联系设置默认选择)。服务之间的竞争由随机选择服务决定。
重要的是要注意,Intent过滤器不是一种安全机制。发送者可以将它想要的任何动作,类型或类别分配给一个意图(只有系统可以发送的某些动作除外),或者可以完全用明确的意图绕过
全文共14973字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[16966],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。