-
中英文对照外文翻译文献
(
文档含英文原文和中文翻译
)
译文:
深入理解安卓系统的安全性
下一代开放操作系统的主流将不会在桌面上,
但是将会出现在我们每天携带
的手机上。
这些开放性的
环境将会带领这些新的应用可能集成这些已经存在的在
线服务,
当然随着日以具增的数据与服务在手机上的支持,
手机上的安全缺陷也
< br>越发明显。下一代操作系统本质在于是否提供一个完整综合的安全平台。
由开放手机联盟(
open Handset
Alliance
谷歌领导)所开发的
android
p>
系统
是一个被广泛看好的一个手机开源系统,
该系统提供一个基本的操作系统,
一个
中间件应用层,一个<
/p>
java
开发工具和一个系统应用收集器(
collection
of
system
applications
)。尽管
android
SDK
p>
自
2007
年就发布了,但是第一部
android
手
机却在
< br>2008
年
10
月才诞生。自从
这时起谷歌开起了自己的时代,
T-Mobile
的
G1
的制造商台湾
HT
C
估算
G1
的发货量在
2008
年底已经超过
100
万部。据业
内人士预期该
G1
手机的销
量将会在
2009
年继续保持。不久的将来其他许多手
机供应商要计划支持这个系统。
一个围绕
p>
android
庞大的开发者社区已经建立,同时很多新的产品和应
用已
经可以在
android
上使用。
一个
Android
的主要卖点是它使开发人员无缝把在线
p>
服务扩展到手机。这方面最明显的例子是谷歌的紧密集成
Gmail
,日历和联系人
Web
应用程序通过该
系统。用户只需提供一个
android
用户名和密码,其手机
自
动同步与谷歌的服务。
其他厂商正在迅速适应自己的现有的即
时通讯,
社交网络
和游戏服务。
And
roid
和许多企业寻找新途径来整合他们的自己已有的业务到
android
上。
传统的台式机和服务器的操作系统一直在努力进行安全功能的集成。这
些个人
和商业应用在单一平台的很出色,然而这一块业务一个手机平台上像
android
p>
上不是很有用。
它给了许多研究人员希望。
Android
没有停在为其他平台
体用应用支持:
应用的执行依赖于顶层
JAVA
中间件,
这个中间件运行在嵌入式
Linux
内核之上
。所以开发人员要把他们的应用部署到
Android
必须使用
其自定
义的用户界面环境。
此外,<
/p>
android
系统应用限制各应用相互调用
API
协作,并且对方为自己的
用户应用进行身份验证。<
/p>
尽管这些应用有一定的安全特性,
我们一些有经验的开
发人员开发
android
应用人士透露,设计安
全应用程序并不总是直线前进的。
Android
使
用
一
个
简
单
的
许可标签分配模式限制
访问的资源,但其他应用程序的原因必要性和便利,其
设计师
们增加了困惑对这个系统。
本文试图对
Android
的安全的复杂性进行讲解,
并注意一些可能的发展缺陷以及应用程序的安
全。
我们通过尝试得出一些经验教
训,希望对未来的安全有用。
Android Application
Android
应用程序框架对开发
者来说是一个强制架构。
它没有一个
main
()函数功能或单一入口点执行,相反,开发人员
必须在
设计方面的应用组件。我们开发的应用对
android
的
p>
sdk
的帮助的
API
Example
Application
。
我们开发了一个描述如何创建
and
roid
的应用。有兴趣的读者可以去我们
的站点下载让我们考
虑一个基于位置的社交网络应用,
其中手机用户可以通过本
应<
/p>
用
发
现
他
们
的
朋
友
们
位
置
。
我
们
进
行
功
能
拆
分
,
分成两个应用程序:一个用于跟踪查看朋友和常看他们。如
图
1
所示,
FriendTracker
应用包括跟踪的组件
specif
c
朋友的位置(例如,通过一个
Web
服
务),储存地理坐标,并分享这些合作统筹与其他应用程序。然后用户使用友情
查看器应用程序来检索地理坐标和储存在地图上查看朋友。
这两个应用程序包含的多个组件包括展示自己任务,他们组件
是由他们
组件类型所决定的。
。一个
Android
开发者选择从
根据不同的组件类型组件的
目的决定
(如与一个用户或存储数据接口)。
图
1
。例如
Android
应用程序。
FriendTracker
和
FriendViewer
应用由多个不
同类
型的组件,
每个提供一个不同的组功能。
Activity
p>
提供一个用户界面,
Service
执行后
台处理,
Content
提供存储,
B
roadcast
receiver
接收机其他应用程序的信
息。
Component Types
android
系通定义了
4
种组件类
型。
Activity
组件定义应用程序的用户界面。
通常
,
应用程序开发者定义每一个活动
“画
面。”
Activity
可以自己开始,也可能通过传递和返回
值。在一时间只有一个键
盘的系统
Activity
可以进行处理,在这个时候所有其他的
Activity
< br>都会被暂停。
Service
组件执行后台处理。
当一个活动需要进行一些操作,
在用户界
面消失以后
(如
下载一个文件或播放音乐)
,
它通常采取此种动作特殊设计的服务。
开发人员还
可以在系统启动使用特殊的守护进程,
Service
通常定义一个远程过程调用
(
RPC
< br>),其他系统组件可以用来传送接口命令和检索数据,以及注册一个回调
函数。<
/p>
Content
组件存储和共享数据
用关系数据库接
口。每个
Content
供应者都有一个关
联的“权限”来形容它的内容包含。其他组件使用时作为一个
handle
执行
SQL
查
询
(
如
的
SELECT
,
INSERT
或
DELETE
内容。虽然
Con
tent
供应者通常存储把数值放
在数据库记录中,
数据检索是实现特殊的例子,
文件也同时通过内容提供商共享
接口。
Broadcast receiver
该组件作为为从邮件信箱发送信息给他应用程序。
通常,
广播消息的应用程
序代码隐含的目的地。因此,广播接收器订阅这些目
的地接收发送给它的消息。
应用程序代码也可以解决明确广播接收机包括命名空间分配。
图
1
显示了
FriendTracker
和
Fri
endViewer
应用所包含的不同的组件类型。
开发者组件
使用一个主要定义文件(也用于定义权限,稍后介绍)。上有一个应
用程序的组件的数量
没有限制定义每种类型,
但作为习惯,
一组件应具有相同的
p>
名称该应用程序。通常情况下,这是作为在
FriendViewe
r
activity
中进行注册。
这
一动作通常指示主
activity
作为该系统应用程序启动器
用于启动用户界面
;
然
而,如果需要启
动特定的
activity
,开发者需要者在选择配置
manifest
信息来实
现这一个功能。在
在
FriendTracker
应用,例如,
< br>FriendTrackerControl
活动被标
记
为
主
用
户
p>
界
面
的
启
动
点
。
在这种情况下,我们保留名称“
FriendTracker
”为服务执行的核心组成部分的应
用程序逻辑。
在
Fri
endTracker
应用包含四种类型的组件。在
Frien
dTracker
服务搜寻调查
外部服务并发现好友的位置。<
/p>
在我们的示例代码中,
位置是我们随机生成的,
< br>但
直接通过网络连接组件接口的服务。该
FriendP
rovider
Content
提供保持最新的
朋
友
地
理
坐
标
,
FriendTrackerControl
活动用于启动和用户界面停止跟踪好友
功能,
该系统一旦启
动
BootReceiver
通知从广播系统启动。
该
FriendViewer
应用主要
是显示有关好友的位置的信息。每个启动的
FriendViewer
将会列出
了所有的朋友和他们的地理坐标,
FriendMap
显示他们
在
地图上的位置。
FriendReceiver
将会等待接收附近的手机发送的消息这个消息来
一个所指定的朋友。尽管我们
可以在这些组件内放置在
FriendTracker
应用,但
是我们仍然创建了一个单独的应用程序来展示跨应用的沟通。此外,通过
分离程序功能和接
口
,我们
可
以创建
不
同
的显示
和功能
,可选用户
界面
是,许多应用程序可以重用这些来自
Frie
ndTracker
的功能。
Component Interaction
该组件交互的主要机制是一个
intent
< br>,
这是一个简单的消息对象,
其中包含
< br>一个目的地组件的地址和数据。
Android
的
API
定义了他的方法中传入
intent
,
并使用该信息来启动一个
activity
例如开始一个
activit
y(startActivity(intent))
,启
动<
/p>
服
务(
startService
(
intent
)
)
和
广播信
息
(
sendBroadcast
(
intent
< br>)
)
。
Android
框架来通知这些方法的调用开始执行在目标应用程序代码。这个过程中
内部组件通信称为一个动作。简单地说,
Intent
对象定义的“
Intent
< br>”以执行
“
action
”。<
/p>
Android
的一个最强大的特点是允许的多种
intent
寻址机制。开发人
员可以解决一个目标组
件使用其应用的空间,他们也可以指定一个隐含的名称。
在后一种情况下,
系统决定了一个
action
的最佳组件,
通过考虑安装的应用程序
和用户的选择
。
这个隐含的名字被称为动作字符串
因为他特殊的类型的请求动作。
例如一个
view
动作字符串,
在一个
intent
< br>中和数据域指向一个图像文件,
系统将会直接指
首选图像
浏览器、
开发者也能使用动作字符串进行大量广播发送和接收
。在接收端的接收者,
开发者使用一
intent
过滤器来定制特殊的动作字符串。
Android
系包括附加目标
的决议规则,但可选的数据操作字符串类型是最常见的。
图
2
显示了组件之间的
FriendTracker
和
FriendViewer
应用程序和组件的交
互作用在应用程序中定义为基础的
Android
发布的一部分
。在每一种情况下,发
起一个组件与其他的沟通。为了简单起见,我们称这个为件间通信
(
ICC
)。在
许多方面,
ICC
是类似于进程间通信(
IPC
)在基于
Unix
的系统中。对于开发人
员,
ICC
的功能相同无论目标是在相同或不同的
应用与界定将在下文的安全规则
中说明。
可用的
ICC
的动作取决于目标的组成部分。每个组件类型支持自己的类型
例如,当
FriendViewer
开始
FriendMap
的
F
riendMap
活动出现在屏幕上。
服务组件支持启动,停止,并结合行动,所以
FriendTrackerContr
ol
活动,
例如,可以启动和停止<
/p>
FriendTracker
服务在后台运行。
< br>Action
的绑定组件之间
建立连接,使启动执行的服
务定义的
RPC
。在我们的例子,
Fr
iendTracker
结合
到系统中的服务器位置的管理。<
/p>