Understanding Android Security
The next generation of open operating systems wonrsquo;t be on desktops or mainframes but on the small mobile devices we carry every day. The openness of these new environments will lead to new applications and markets and will enable greater integrationwith existing online services. However, as the importance of the data and services our cell phones support increases, so too do the opportunities for vulnerability. Itrsquo;s essential that this next generation of platforms provides a comprehensive and usable security infrastructure.
Developed by the Open Handset Alliance (visibly led by Google), Android is a widely anticipated open source operating system for mobile devices that provides a base operating system, an application middleware layer, a Java software development kit (SDK), and a collection of system applications. Although the Android SDK has been available since late 2007, the frst publicly available Androidready “G1” phone debuted in late October 2008. Since then, Androidrsquo;s growth has been phenomenal: T-Mobilersquo;s G1 manufacturer HTC estimates shipment volumes of more than 1 million phones by the end of 2008, and industry insiders expect public adoption to increase steeply in 2009. Many other cell phone providers have either promised or plan to support it in the near future.
A large community of developers has organized around Android, and many new productsand applications are now available for it. One of Androidrsquo;s chief selling points is that it lets developers seamlessly extend online services to phones. The most visible example of this feature is, unsurprisingly, the tight integration of Googlersquo;s Gmail, Calendar, and Contacts Web applications with system utilities. Android users simply supply a username and password, and their phones automatically synchronize with Google services. Other vendors are rapidly adapting their existing instant messaging, social networks, and gaming services to Android, and many enterprises are looking for ways to integrate their own internal operations (such as inventory management, purchasing, receiving, and so forth) into it as well.
Traditional desktop and server operating systems have struggled to securely integrate such personal and business applications and services on a single platform. Although doing so on a mobile platform such as Android remains nontrivial, many researchers hope it provides a clean slate devoid of the complications that legacy software can cause. Android doesnrsquo;t ofcially support applications developed for other platforms: applications execute on top of a Javamiddleware layer running on an embedded Linux kernel, so developers wishing to port their application to Android must use its custom user interface environment. Additionally, Android restricts application interaction to its special APIs by running each application as its own user identity. Although this controlled interaction has several benefcial security features, our experiences developing Android applications have revealed that designing secure applications isnrsquo;t always straightforward. Android uses a simple permission label assignment model to restrict access to resources and other applications, but for reasons of necessity and convenience, its designers have added several potentially confusing refnements as the system has evolved.
This article attempts to unmask the complexity of Android security and note some possible development pitfalls that occur when defning an applicationrsquo;s security. We conclude by attempting to draw some lessons and identify opportunities for future enhancements that should aid in clarity and correctness.
Android Applications
The Android application framework forces a structure on developers. It doesnrsquo;t have a main() function or single entry point for execution—instead, developers must design applications in terms of components.
Example Application
We developed a pair of applications to help describe how Android applications operate. Interested readers can download the source code from our Web site (http://siis.cse.psu. edu/android_sec_tutorial.html).
Letrsquo;s consider a location-sensitive social networking application for mobile phones in which users can discover their friendsrsquo; locations. We split the functionality into two applications: one for tracking friends and one for viewing them. As Figure 1 shows, the FriendTracker application consists of components specifc to tracking friend locations (for example, via a Web service), storing geographic coordinates, and sharing those coordinates with other applications. The user then uses the FriendViewer application to retrieve the stored geographic coordinates and view friends on a map.
Both applications contain multiple components for performing their respective tasks; the components themselves are classifed by their component types. An Android developer chooses from predefned component types depending on the componentrsquo;s purpose (such as interfacing with a user or storing data)
Component Types
Android defnes four component types:
rActivity components defne an applicationrsquo;s user interface. Typically, an application developer defnes one activity per “screen.” Activities start each other, possibly passing and returning values. Only one activity on the system has keyboard and processing focus at a time; all others are suspended.
rService components perform background processing. When an activity needs to perform some operation that must continue after the user interface disappears (such as download a fle or play music), it commonly starts a service specifcally designed for that action. The developer can also use services as application-specifc daemons, possibly starting on boot. Services often defne an interface for Remote Procedure Call (RPC) that other system components can use to s
全文共22357字,剩余内容已隐藏,支付完成后下载完整资料
了解Android安全性
下一代开放操作系统不会在台式机或大型机而是在小型移动设备上进行。这些新环境的开放性将导致新的应用和市场,使现有的在线服务高度集成。然而,由于数据和服务的重要性,我们的手机支持的功能增加,但也增加许多漏洞。所以,为下一代的平台提供了一个全面和可用的安全基础设施是十分重要。
由开放手机联盟开发(由谷歌主导的明显)的Android是一个广泛预期的开源手机操作系统,其提供了一个基本的操作系统、应用中间件层,一个java软件开发工具包(SDK),并收录了系统中的应用。Android SDK自2007年底以来一直可用,首次公开的androidready“G1”手机于十月下旬2008年亮相。自那时以来,Android的增长是惊人的:到2008年底,T-Mobile的G1制造商宏达估计出货量超过100万手机,业内人士预计公众使用率急剧增加。在2009年,许多其他手机供应商承诺或计划在不久的将来生产它。
一个围绕Android的庞大的开发者社区,和许多新的产品和应用已经出现。Android的主要卖点之一是,它让开发人员无缝地扩展在线服务到手机。关于这个功能最明显的例子是,紧密集成的谷歌的Gmail,日历和联系人Web应用程序与系统实用程序。Android用户只需提供一个用户名和密码,他们的手机自动与谷歌服务同步。与此同时,其他厂商正在迅速调整他们现有的关于Android的即时通讯,社交网络和游戏服务。许多企业正在寻找方法来整合自己的内部业务(如库存管理,采购,接收等)到Android中。
传统的桌面和服务器操作系统已经努力安全地整合个人和业务应用程序以及服务到一个平台上。虽然这样的移动平台,如Android仍然很普通的,许多研究人员仍希望它提供了一个干净的平台减少传统软件可能导致的一些问题。Android不正式支持为其他平台开发的应用:例如,基于嵌入式Linux内核运行,在JAVA中间件层上的执行程序。所以开发人员要把他们的应用程序移植到Android上,必须使用其自定义的用户界面环境。此外,Android通过将每个应用程序作为自己的用户标识来限制应用程序对其特殊API的交互。虽然这种控制作用有一定的安全功能,但我们的经验表明,设计Android应用程序开发安全的应用程序并不总是简单的。Android使用一个简单的许可标签分配模式限制访问的资源和其他应用程序,但是因为必要性和便利性,它的设计者增加了几个潜在的模糊改良品作为系统来进行演变。
本文旨在分析Android的安全的复杂性和指出一些在应用程序的安全上可能的发展缺陷。通过一些对未来发展方向的教训和机会,我们认为应该着重于清晰度和正确性。
Android应用程序
Android应用程序框架规定开发人员的结构。它没有关于运行的main()方法或单一入口,因此,开发商必须根据需要设计应用程序。
示例应用程序
我们开发了一对应用程序,以帮助描述Android应用程序如何操作。有兴趣的读者可以从我们网站下载源代码(http://siis.cse.psu. edu/android_sec_tutorial.html).
让我们考虑一个手机上的位置查询社交应用程序,这个程序可以让用户发现他们的朋友的位置。我们将功能分为两个应用程序:一个跟踪朋友和一个查看他们。如图1所示,FriendTracker应用包括跟踪的组件去寻找朋友的具体位置(例如,通过一个Web服务),存储地理坐标,将这些坐标利用其他应用程序共享。然后用户使用FriendViewer应用程序来检索和存储地理坐标,就可以在地图上查看朋友。
所有应用程序包含多个组件用来执行各自的任务,组件本身是由他们组件类型所决定。一个Android开发者根据组件的目的从各个不同的组件类型中选择(如一个链接用户或者存储数据的接口)。
图1。Android应用实例。FriendTracker和FriendViewer应用程序由多个不同类型的组件,每个提供一组不同的功能。活动提供用户界面,服务执行后台处理,内容提供者是数据存储设备,广播接收器充当接受其他应用程序的消息的邮箱。
组件类型
Android的四个组件类型的定义:
·活动组件定义应用程序的用户界面。通常,应用程序开发者定义一个活动总“画面”。活动启动其他组件,可能直接通过或返回一个值。系统上只有一个活动具有键盘和处理焦点,所有其他活动都被暂停。
·服务组件执行后台处理。当一个活动需要在用户界面消失后进行一些操作(如下载一个文件或播放音乐),通常会调用服务组件来满足这种特殊要求。开发人员还可以使用应用程序特定的服务来保护可能启动的进程。服务通常定义为远程过程调用(RPC)接口,其他系统组件可以用来发送命令和检索数据,以及登记回调函数。
·内容提供组件使用关联数据库来实现接口存储和共享数据。每个内容提供组件都有一个相关的“权限”来描述它包含的内容。其他组件使用权限名作为关键词来执行sql查询(如选择、插入或删除)来读取和写入内容。内容提供组件通常将值存储在数据库的记录中、数据检索也可以具体实施的。例如,文件也都是通过内容提供组件实现共享。
·广播接收组件充当接受其他应用程序的消息的邮箱。通常,应用程序代码将消息广播到隐性地址。然后广播接收组件接受发送到这些地址的信息。应用程序代码还可以通过包含其控制应用程序的赋值的命名空间来显式地处理广播接收器。
图1显示了FriendTracker和FriendViewer应用含有不同类型的组件。开发商指定组件使用清单文件(也可用于定义规则,稍后介绍)。在每种类型的应用程序组件的数量没有限制,但作为惯例,一个应用程序中有一个名字相同的组件。通常来说,这就是一个活动,像在FriendViewer应用中。这个活动通常表明主要活动,系统应用程序启动器用于启动用户界面;然而,具体活动所选择的界面是由清单中元素信息所标记的。在FriendTracker应用,FriendTrackerControl活动是作为用户主界面的切入点。在这种情况下,我们保留名称为“FriendTracker”服务组件来执行核心应用程序逻辑。
FriendTracker应用包含四个组件类型。FriendTracker服务通过一个外部服务发现朋友的位置。在我们的示例代码中,我们随机生成位置,但组件是直接接扩展到web服务的接口的。Friendprovider内容提供组件保存最新的朋友地理坐标,FriendTrackerControl活动的启动和停止跟踪功能的用户界面,一旦其启动,广播接收组件急就从系统中得到通知(应用程序使用这个自动启动FriendTracker服务)。
FriendViewer应用程序主要关注的是朋友的位置信息显示。在FriendViewer活动列出了所有的朋友和他们的地理坐标,并且和FriendMap活动一起显示在地图。Friendreceiver广播接收组件等待一个表明实际电话是附近的一个特别的朋友,会显示一条消息给用户这样一个事件的信息。我们可以在这些组件放置在FriendTracker应用内,我们创建了一个单独的应用程序来展示跨应用通信。此外,通过将跟踪和用户接口逻辑分离,我们可以创建一个二选一的包含不同显示和功能的用户接口——这样,许多应用程序就可重复使用FriendTracker的执行逻辑。
组件交互
组件交互的主要机制是一个一个包含目标组件地址和数据的消息对象的指令。Android的API定义方法:接受指令并使用这些信息来启动活动(startActivity(指令)),启动服务(startService(指令)),和广播消息(sendBroadcast(指令))。这些方法的调用告诉Android框架开始在目标应用程序中执行代码。这样的通信的过程称为一个动作。简而言之,Intent对象定义的“指令”执行“动作”。
Android的一个最强大的功能是其指令的寻址机制的灵活性。虽然开发人员可以使用其应用程序的命名空间寻找一个唯一的目标组件,但它们也可以指定隐式名称。在后一种情况下,系统通过考虑安装的应用程序和用户选择来确定动作的最佳组件。隐式的名字因他特殊类型的请求的操作被叫做动作字符串。举个例子,如果“视图”动作字符串指定一个指令数据域指向一个图像文件,系统会直接首选图像查看器。开发人员还可以使用操作字符串向一组广播接收器广播消息。在接收端,开发者使用一个指令过滤器来定制特殊的动作字符串。Android包括额外的目标解析规则,但可选数据类型的动作字符串是最常见的。
图2。组件交互。Android的应用层次的交互让FriendTracker和FriendViewer应用程序和系统提供的应用程序相互通信。交互主要发生在组件级。
图2显示了在应用程序中定义为由Android发布的基础部分组件FriendTracker和FriendViewer应用程序,其组件之间的相互作用。在每一种情况下,一个组件可以与另一个通信。为简单起见,我们称这种组件间的通信(ICC)。在许多方面,ICC类似于基于UNIX的系统间进程通信(IPC)。对开发者来说,ICC的目标是在相同或不同的应用中,其功能是相同,目标具有的额外安全规则定义在本文的后面。
可用的ICC动作取决于目标组件。每个组件类型支持特定的交互类型。例如,当FriendViewer开始FriendMap时,FriendMap活动出现在屏幕上。服务支持组件启动,停止,并连接动作。所以FriendTrackerControl活动,可以启动和停止FriendTracker服务在后台运行。连接的动作建立起组件之间的连接,允许启动执行服务中定义的RPC。在我们的例子中,FriendTracker连接系统中的服务器位置的管理。一旦连接,FriendTracker调用回调方法登记,提供更新的手机的位置。请注意,如果一个服务目前是绑定,一个准确的“停止”动作不会终止服务,直到所有绑定的连接被解除。
广播接收器和内容提供组件具有独特的交互形式。广播接收器的目标ICC作为指令发送(广播)给其他组件,更常见的是,一个组件标明的动作字符串。例如,friendreceiver标明开发者定义的“friend_near”动作字符串。FriendTracker广播指令发送这动作字符串确定手机是附近的一个朋友;然后系统开始friendreceiver并向用户显示一条消息。
内容提供者不使用指令,而是通过嵌入在构成容器中的一个特殊容器URI的权限字符串://lt;authoritygt;/ lt;tablegt;/[lt;idgt;]。在这里, lt;tablegt;显示内容提供者的表,lt;idgt; 任意规定表中的记录。组件使用此URI在内容提供程序上执行sql查询,包括通过询问API的WHERE环境。
安全运行
图3。保护。Android运行中的2个地方的安全运行:每个利用自己用户身份的应用,允许 Linux系统提供系统级的隔离;Android中间组件包含一个监视组件间通信(ICC)中介的建立的引用监视器。两个机制对手机来说是必不可少的,但最重要的是可以简单实现,其次才是所有机制和规则的安全环境。
图4。存取许可逻辑。Android中间组件可实现一个引用监视器,它提供了关于应用程序怎样访问组件的强制访问控制(MAC)指令。所有组件类型的基本执行模式都是相同的。组件A访问组件B和C的能力是通过比较B和C上的访问许可标签与应用程序1指定标签的集合来确定的。
如图3所示,Android通过两个执行机制的组合保护应用程序和数据,一个在系统级,另一个在ICC级别。ICC中介定义核心安全框架,这是本文的重点,但它是建立在由底层的Linux系统提供的保证上。
在一般情况下,每个应用程序运行时有一个用户唯一身份,这让Android限制了编程定律的潜在危害。例如,在最近官方发布的T-Mobile G1手机后,Web浏览器发现的漏洞,只影响Web浏览器本身(http:// securityevaluators.com/content/ case-studies/android/index.jsp)。由于这种设计选择,开发不会影响其他应用程序或系统。苹果的iPhone也出现了类似的漏洞,产生一个可以让用户更换系统的底层部分的“越狱”技术,但也会使一个网络攻击者利用这一定律(http://security evaluators.com/content/case -studies/iphone/index.jsp)。
ICC不是由用户和进程边界限制的。事实上,所有的ICC都是通过一个特殊设备节点上的I/O控制命令发生的。因为文件为了正确的操作必须在全球上可读的写,所以Linux系统没有办法调解ICC。用户分离是直接和容易理解的,控制ICC是很精细的,值得我们仔细考虑。
作为安全执行的中心点,Android中间组件通过推理分配给应用程序和组件的标签来调解所有ICC的建立。应用监视器1提供关于如何访问组件执行的强制访问控制(MAC)的应用程序。在其最简单的形式中,通过指定访问权限标签限制访问每个组件,此文本字符串不必是唯一的。开发人员分配应用程序集合的权限标签,当组件启动ICC时,参考监视器会查看分配给其包含应用程序的许可标签,如果目标组件的访问许可标签在该集合中,则允许ICC建立继续进行。如果标签不在集合中,则即使组件在同一应用程序中,该组件也将被拒绝。图4描绘了这个逻辑。
开发商指
全文共6798字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[142993],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。