毕业论文外文翻译-理解安卓系统的安全性.doc
本科毕业设计(论文)翻译班 级 姓 名 学 号 指导教师 填表日期 中文译名理解安卓系统的安全性外文原文名Understanding Android Security外文原文版出处Security& Privacy, IEEE.2009,7译 文:下一代开放的操作系统将不会在桌面上以及大型主机上,而是将会出现在我们每天携带的手机上。这些开放性的环境将会引领新的应用和市场,而且会使现有的在线服务高度集成化。当然,随着手机上的支持的数据和服务的重要性与日俱增,手机上的安全缺陷也愈发明显。所以说,下一代的平台能否提供一个综合性强的,可行性高的安全系统是非常重要的。由开放手机联盟(明显是谷歌领导的)所开发的android 系统是一个被广泛看好的一个手机开源系统,该系统提供一个基本的操作系统,一个中间件应用层,一个java开发工具(SDK)和一个系统应用收集器。尽管android SDK自2007年就发布了,但是第一部android “G1”手机却在2008年10月才诞生。从这时,安卓才开启了属于自己的时代:T-MobileG1的制造商HTC估算G1的发货量在2008年底已经超过100万部。据业内人士预期该G1手机的销量将会在2009年继续保持。在不久的将来其他许多手机供应商都要计划支持这个系统。一个围绕android的庞大的开发者团体已经建立,同时很多新的产品和应用已经可以在android上使用。Android的一个主要卖点是它能使开发人员无缝地把在线服务扩展到手机。这方面最明显的例子毫无疑问是谷歌的将Gmail,日历和联系人Web应用程序通过该系统的紧密集成。安卓用户只需提供一个用户名和密码,其手机就可以自动与谷歌的服务同步。其他厂商正在迅速把自己的现有的即时通讯,社交网络和游戏服务同安卓相适应,还有很多厂商也在寻求把他们自己的内表面加工(例如存货管理,采购,收货等等)同安卓相适应。传统的台式机和服务器的操作系统一直在努力进行安全功能的集成。尽管在一个手机平台上像android上做这一块业务不是很有用,但是许多研究人员希望它能像已有的软件一样提供一个安全保护软件。Android没有停止为其他平台提供应用支持:应用的执行依赖于顶层JAVA中间件,这个中间件运行在嵌入式Linux 内核之上,所以开发人员要想要把他们的应用部署到Android就必须使用其自定义的用户界面环境。此外,安卓通过运行应用时将其进行身份验证将各应用相互调用限制在“API协作”上。尽管这些应用有一定的安全特性,我们一些有经验的开发android应用的人士透露,设计安全应用程序并不总是直线前进的。Android使用一个简单的许可标签分配模式限制访问的资源和其他应用,但是由于必要性和便利性的缘故,其设计师们对这个系统在进化中潜在的威胁感到越来越困惑。本文试图对Android的安全的复杂性进行讲解,并注意一些可能的发展缺陷以及应用程序的安全。我们通过尝试得出一些经验教训,希望对未来的安全有用。Android Application Android应用程序框架对开发者来说是一个强制架构。它没有一个main()函数功能或单一入口点执行,相反,开发人员必须在部件的基础上设计应用。Example Application。我们开发了一个描述如何创建android的应用。有兴趣的读者可以去我们的站点sitepttp:/siis.cse.psu.edu/android_sec_tutorial.html下载源代码。让我们考虑一个基于位置的社交网络应用,在其中手机用户可以通过本应用发现他们的朋友们位置。我们将这个功能拆分成两个应用程序:一个用于跟踪朋友,另一个用于查看他们。如图1所示,FriendTracker应用包括一个跟踪的组件用以确定朋友的位置。(例如,通过一个Web服务),储存地理坐标,并与其他应用程序分享数据以合作。然后用户使用FriendViewer应用程序来检索已储存的地理坐标和在地图上查看你的朋友。这两个应用程序包含多个组件用以展示自己各自的任务;他们的组件是由他们自己的组件类型所决定的。 一个Android 开发者根据不同的目的(如与一个用户或存储数据连接)决定所用的组件类型。Component TypesAndroid系统定义了4种组件类型:Activity 定义应用程序的用户界面的组件。通常,应用程序开发者定义每一个活动“画面”Activity可以自己开始,也可能通过传递和返回值。在一时间在系统中只有一个Activity可以进行输入和处理,在这个时候所有其他的Activity都会被暂停。Service执行后台处理的组件。当一个活动需要在用户界面消失以后进行一些操作(如下载一个文件或播放音乐),它通常运行为这种动作特殊设计的服务。开发人员还可以在系统崩溃后重启时用service充当特殊的守护进程。Service通常会定义一个远程过程调用(RPC),让其他系统组件可以用它来传送接口命令和检索数据,以及注册一个回调函数。Content provider用关系数据库接口存储和共享数据的组件。每个Content供应者都有一个关联的“权限”来描述它所包含的内容。其他组件使用权限名作为一个手把执行SQL查询(例如插入,选择或者删除)来读写内容。虽然Content供应者通常把数值放在数据库记录中存储,然而数据检索仍然是不可或缺的,例如:文件也同时通过内容提供商共享。Broadcast receiver作为接受其他应用程序发送消息的信箱的组件。通常,广播消息的应用程序代码隐含了目的地。因此,Broadcast receiver订阅这些目的地以接收发送给它的消息。应用程序代码也可以通过命名空间分配来明确定位一个广播接收机。图1显示了FriendTracker和FriendViewer应用所包含的不同的组件类型。开发者组件使用一个主要定义文件(也用于定义权限,稍后介绍)。对于应用程序定义的每种类型上的组件的数量没有限制,但作为习惯,一个组件应该和一个应用具有相同的名字。通常情况下,这是一个活动,和作为在FriendViewer activity应用中的一样。这一动作通常指示出系统应用程序启动器用与启动用户界面的主活动;然而,如果需要启动特定的activity,开发者需要选择配置manifest 信息来实现这一个功能。在FriendTracker应用中,例如FriendTrackerControl活动,就是被标记的主用户界面的启动点。 在这种情况下,我们为服务执行的核心组成部分的应用程序逻辑保留“FriendTracker”的名称。FriendTracker应用包含所有这四种类型的组件。FriendTracker服务搜寻外部服务并发现好友的位置。在我们的示例代码中,位置是我们随机生成的,但通过网络直接联系上了连接组件接口的服务。FriendProvider Content 提供保持最新的朋友地理坐标,FriendTrackerControl活动用于启动和用户界面停止跟踪好友功能,该系统一旦启动 BootReceiver会从广播系统中启动。FriendViewer应用主要是显示有关好友的位置的信息。每个启动的FriendViewer将会列出了所有的朋友和他们的地理坐标。FriendMap显示他们在地图上的位置。FriendReceiver将会等待接收一个指定的朋友从附近的手机发送的消息。尽管我们可以将这些组件放置在FriendTracker内应用,但是我们仍然创建了一个单独的应用程序来实现跨应用的沟通。此外,通过分离程序功能和接口,我们可以创建显示效果和功能不同的用户界面,那就是,许多应用程序可以循环利用这些执行在FriendTracker的逻辑。Component Interaction该组件交互的主要机制是一个intent ,这是一个简单的消息对象,其中包含一个目的地组件的地址和数据。 Android API定义了一个能接受intents 的方法 ,并使用该信息来启动activity(例如开始一个activity(startActivity(intent),启动服务(startService(intent)和广播信息(sendBroadcast(intent)。这些方法的调用为Android框架开始执行在目标应用程序代码提供指示。这个内部组件通信过程称为一个动作。简单地说, Intent对象定义“Intent”以执行“action”。Android的一个最强大的特点是灵活,它允许多种intent寻址机制。开发人员可以用其应用的命名空间唯一指定一个目标成分,同样他们也可以指定一个隐含的名称。在后一种情况下,通过考虑安装的应用程序和用户的选择,系统决定了一个action的最佳组件。这个隐含的名字因为他特殊的请求动作类型而被称为动作字符串。例如:如果一个view动作字符串在一个intent和数据域中指向一个图像文件,系统将会直接引导intent指向首选的图像浏览器。开发者也能使用动作字符串进行大量广播的发送和接收。在接收末端,开发者使用一个intent 过滤器来定制特殊的动作字符串。Android系统包括附加目标的决议规则,但可选的数据操作字符串类型是最常见的。图2显示了FriendTracker和FriendViewer的组件和应用程序组件,还有Android distribution中定义的程序的交互作用。在每一种情况下,一个组件都会发起与其他组件的沟通。为了简单起见,我们称这个为件间通信(ICC)。在许多方面,ICC是类似于基于Unix的系统中进程间通信(IPC)。对于开发人员,无论目标是在相同或不同的应用与界定下,ICC的功能都相同(除了下文将定义的安全规则)。可用的ICC的动作取决于目标的组成部分。每个组件的类型都支持它自己的类型。例如,当FriendViewer开始FriendMap进程,FriendMap活动出现在屏幕上。服务组件支持启动,停止,运行bind活动,所以FriendTrackerControl开始活动,例如,可以启动和停止FriendTracker服务在后台运行。Bind活动建立了组件之间的联系,使启动程序执行由服务定义的RPCs。在我们的例子中,使得FriendTracker与系统中的服务器位置的管理器相结合。 图一 图二安卓初步。1 使用 XML 进行布局虽然纯粹通过 Java 代码在 activity 上创建和添加部件,在技术上是可行的,我们在第 4章中做的一样,更常见的方法是使用一种基于 XML 的布局文件。动态的小部件实例很多,情况复杂,而且小工具在编译时不为人所知。考虑到这一点,现在是时候来学习如何用此种方式来布置 Android activities。1.1 什么是基于 XML 的布局? 正如其名称所示,一个基于 XML 的布局是一个关系到每个规格的小部件,和他们的容器(更多关于此内容的在第 7 章)编码的 XML 格式。具体来说,Android 认为基于 XML的布局是资源,因此布局文件存储在 res /在你的 Android 项目布局目录中。每个 XML 文件包含一个指定的部件和容器布局元素树,而他们的容器组成了一个view hierarchy。对XML 元素的属性,是来描述一个部件应如何看或者一个容器应如何运转。例如,如果一个按钮元素。有一个 Android 的属性值:文字样式=“bold”,这意味着该出现在按钮的表面的文本呈现的应该是一个粗体字体样式. Android 的 SDK 中附带有一个使用此布局的工具(aapt),这个工具能够自动调用你的 Android工具链(例如,Eclipse 中,Ants build.xml)。作为一个开发人员,尤其重要的是,使您的项目中 aapt 生成的 R.java 源文件,能让您能在那些布局中直接从 Java 代码中获取布局和部件。1.2 为什么基于 XML 的布局? 基本上所有使用 XML 布局文件做的工作都可以通过 Java 代码实现。例如,你可以使用 setTypeface()命令一个按钮使选中的的文本变为粗体文本,而不是在一个 XML 布局中使用属性。由于 XML 布局是为你用于跟踪的另一个文件的,所以我们需要好的理由来使用这样的文件。也许最大的理由是为了在协助视图定义中工具的建立,如 IDE 中一个 像Eclipse的GUI 创建者或者一个像 DroidDraw1一样设计 GUI 图形用户界面建设者。这样 GUI 建设者们,在原则上,生成的是Java 代码而不是 XML。目前的挑战是重新阅读用户界面的定义以支持编辑- XLM 的结构公式数据比一个程序语言中的数据简单的多。此外,保持生成的 XML 定义从手写的 Java 代码中分离,使得某人定制时产生的意外差错重新得以更正不太可能。 XML 是一个中间层,使工具使用更简便,程序员需要手工工作时操作更简易。此外,XML 作为一个 GUI 定义格式变得越来越普遍。微软的 XAML2,Adobe 的 Flex3,和Mozilla 的 XUL4 都和采取 Android 类似的方法:把布局细节放在一个 XML 文件内,把编程算法资料放在源文件(例如,XUL 中的 JavaScript)中。许多不太知名的GUI框架,如 ZK5,也使用视图定义的 XML。而“随大流”并不一定是最好的政策,但他们有助于帮助任何其他以 XML 为中心的观点描述语言轻松进入 Android。那么基于 XML 的布局是什么样子的?下面是将以前的章节的示例应用程序按钮转换成一个 XML 布局文件:<?xml version="1.0" encoding="utf-8"?><Button xmlns:android="android:id="+id/button"android:text=""android:layout_width="fill_parent"android:layout_height="fill_parent"/> 译文成绩(百分制): 指导教师签名: 年 月 日备注:1、外文原文出处包括出版社、出版时间、期刊的刊名、刊号、刊期。2、外文翻译内容字体为小四号,宋体(英文需用Times New Roman字体),行距为固定值20磅。3、用A4纸附上外文原文在翻译文后面。Understand android security Security& Privacy, IEEE.2009,7the next generation of open operating systems wont 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 integration with existing online services. However, as the importance of the data and services our cell phones support increases, so too do the opportunities for vulnerability. Its essential that this next generation of platforms provide 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 Android-ready “G1” phone debuted in late October 2008. Since then, Androids growth has been phenomenal: TMobiles 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 products and applications are now available for it. One of Androids chief selling points is that it lets developers seamlessly ,extend online services to phones. The most visible example of this feature isunsurprisinglythe tight integration of Googles 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 doesnt ofcially support applications eloped for other platforms: applications execute on top of a Java middleware 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 forward. 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 applications 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 doesnt have a main() function or single entry point for executioninstead, 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 sitepttp:/siis.cse.psu.edu/android_sec_tutorial.html).Lets consider a location-sensitive social networking application for mobile phones in which users can discover their friendslocations. 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 components purpose (such as interfacing with a user or storing data).Component TypesAndroid defnes four component types:Activity components defne an applications 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 ocessing focus at a time; all others are suspended.Service 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 define an interface for Remote Procedure Call (RPC) that other system components can use to send commands and retrieve data, as well as register callbacks. Content provider components store and share data using a relational database interface. Each content provider has an associated “authority” describing the content it contains. Other components use the authority name as a handle to perform SQL queries (such as SELECT, INSERT, or DELETE) to read and write content. Although content providers typically store values in database records, data retrieval is implementation-specifcfor example, fles are also shared through content provider interfaces.Broadcast receiver components act as mailboxes for messages from other applications. Commonly, application code broadcasts messages to an implicit destination. Broadcast receivers thus sub-scribe to such destinations to receive the messages sent to it. Application code can also address a broadcast receiver explicitly by including the namespace assigned to its containing application. Figure 1 shows the FriendTrack-er and FriendViewer applications containing the diferent component types. The developer specifes components using a manifest fle (also used to defne policy as described later). There are no restrictions on the number of components an application defnes for each type, but as a convention, one component has the same name as the application. Frequently, this is an activity, as in the FriendViewer application. This activity usually indicates the primary activity that the system application launcher uses to start the user interface; however, the specifc activity cho-sen on launch is marked by meta information in the manifest. In the FriendTracker application, for example, the FriendTrackerControl activity is marked as the main user interface entry point. In this case, we reserved the name “FriendTracker” for the service component performing the core application logic.The FriendTracker application contains each of the four component types. The FriendTracker service polls an external service to discover friends locations. In our example code, we generate locaFriendTracker application BootReceiver Broadcast receiver ActivityFriendTracker FriendProvider Content provider Service FriendTracker control FriendViewer application FriendReceiver Broadcast receiver Activity FriendTracker Activity FriendViewer Figure 1. Example Android application. The FriendTracker and FriendViewer applications consist of multiple components of different types, each of which provides a different set of functionalities. Activities provide a user interface, services execute background processing, content providers