Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行。系统和应用之间的安全性通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给应用程序分配user ID和Group ID。更细化的安全特性是通过"Permission"机制对特定的进程的特定的操作进行限制,而"per-URI permissions"可以对获取特定数据的access专门权限进行限制。 所以,应用程序之间的一般是不可以互相访问的,但是anroid提供了一种permission机制,用于应用程序之间数据和功能的安全访问。
1.安全架构
Android安全架构中一个中心思想就是:应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。这包括读或写用户的私有数据(如联系人数据或email数据),读或写另一个应用程序的文件,网络连接,保持设备处于非睡眠状态。
一个应用程序的进程就是一个安全的沙盒。它不能干扰其它应用程序,除非显式地声明了“permissions”,以便它能够获取基本沙盒所不具备的额外的能力。它请求的这些权限“permissions”可以被各种各样的操作处理,如自动允许该权限或者通过用户提示或者证书来禁止该权限。应用程序 需要的那些“permissions”是静态的在程序中声明,所以他们会在程序安装时被知晓,并不会再改变。
所有的Android应用程序(。apk文件)必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要CA签名认证(注:CA就是一个第三方的证书认证机构,如verisign等)。Android应用程序允许而且一般也都是使用self- signed证书(即自签名证书)。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的permisssions,以及谁可以share 用户IDs。
2.用户IDs和文件存取
每一个Android应用程序(。apk文件)都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。
由于安全性限制措施是发生在进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过 使用AndroidManifest。xml文件中的manifest标签中的sharedUserId属性,来使不同的package共用同一个用户 ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID。
所有存储在应用程序中的数据都会赋予一个属性——该应用程序的用户ID,这使得其他package无法访问这些数据。当通过这些方法getSharedPreferences(String, int),openFileOutput(String, int)或者 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)来创建一个新文件时,你可以通过使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE标志位来设置是否允许其他package来访问读写这个文件。当设置这些标志位时,该文件仍然属于该应用程序,
但是它的global read and/or write权限已经被设置,使得它对于其他任何应用程序都是可见的。
例如:APK A 和APK B 都是C公司的产品,那么如果用户从APK A中登陆成功。那么打开APK B的时候就不用再次登陆。 具体实现就是A和B设置成同一个User ID:
这个"com.c" 就是user id。 APK B就可以像打开本地数据库那样打开APK A中的数据库了。APK A把登陆信息存放在A的数据目录下面。APK B每次启动的时候读取APK A下面的数据库判断是否已经登陆:
3.权限
权限用来描述是否拥有做某件事的权力。Android系统中权限分为普通级别(Normal),危险级别(dangerous),签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。
对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。
系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
目前Android系统定义了许多权限,通过SDK文档用户可以查询到哪些操作需要哪些权限,然后按需申请。
为了执行你自己的权限,你必须首先在你的AndroidManifest.xml中使用一个或多个<permission> 标签声明。例如,一个应用程序想用控制谁能启动一个activities,它可以为声明一个做这个操作的许可,如下:
4.使用权限
应用需要的权限应当在users-permission属性中申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。
所以,程序间访问权限大致分为两种:
-第一种低级点的(permission的protectlevel属性为normal或者dangerous),其调用者apk只需声明<uses-permission>即可拥有其permission。
-第二种高级点的(permission的protectlevel属性为signature或者signatureorsystem),其调用者apk就需要和被调用的apk一样拥有相同的signature。
若想拥有使用权限,必须在AndroidManifest.xml文件中包含一个或更多的<uses-permission> 标签来声明此权限。
应用程序安装的时候,应用程序请求的permissions是通过package installer来批准获取的。package installer是通过检查该应用程序的签名来确定是否给予该程序request的权限。在用户使用过程中不会去检查权限,也就是说要么在安装的时候就批准该权限,使其按照设计可以使用该权限;要么就不批准,这样用户也就根本无法使用该feature,也不会有任何提示告知用户尝试失败。
例如高级权限用有system级别权限设定的api时,需要使其apk拥有system权限。比如在 android 的API中有供给SystemClock.setCurrentTimeMillis()函数来修改系统时间。有两个方法:
第一个方法简单点,不过需要在Android系统源码的情况下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点中插手android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,插手LOCAL_CERTIFICATE := platform这一行
3. 使用mm命令来编译,生成的apk就有修改系统时间的职权范围了。
第2个方法麻烦点,不外不消开虚拟机跑到源码情况下用make来编译:
1. 同上,插手android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3. 使用针系统的platform密码钥匙来从头给apk文件签名。signapk platform.x509.pem platform.pk8 input.apk output.apk
................
分享到:
相关推荐
这些问题的出现使得对Android安全机制的研究变得至关重要。本文将深入探讨Android的安全体系结构,分析现有的安全机制,并提出针对性的解决方案。 Android系统的基本构架由应用层、应用程序框架层、系统运行时类库...
《Android安全机制解析》这本书深入探讨了Android操作系统中的安全架构和机制,对于想要在Android安全领域深化理解的读者来说,是一本不可多得的参考文献。Android系统作为全球最受欢迎的移动操作系统之一,其安全性...
权限机制是Android智能手机安全机制的核心组件之一,它控制着应用程序的访问权力和权限。签名机制是Android智能手机安全机制的另一个重要组件,它确保了应用程序的身份验证和安全性。沙箱机制是Android智能手机安全...
Android应用程序是运行在一个沙箱中。这个沙箱是基于Linux内核提供的用户ID(UID)和用户组ID(GID)来实现的。Android应用程序在安装的过程中,安装服务PackageManagerService会为它们分配一个唯一的UID和GID,以及...
Android安全机制是Android操作系统的核心组成部分,它通过一系列的策略和组件来保护用户数据、应用程序以及整个系统的安全性。作为开发者,理解和掌握这些机制至关重要,因为它们直接影响到应用的性能、隐私和用户...
这些机制是Android安全体系中的核心组成部分,用于保护应用程序的数据安全和用户隐私。 首先,加密和认证是两种不同的安全概念。加密关注的是数据的保密性,通过将数据转换为密文,防止未经授权的访问。而认证则...
在实验部分,文章选取了一个常见的应用场景——媒体播放器,来具体分析Android安全机制的实际运作原理。通过这一示例,我们可以更直观地了解Android如何利用其安全特性来保护用户的数据安全和系统安全。 1. **权限...
本文将详细介绍Android系统的关键安全机制,包括沙盒机制、权限管理、SEAndroid(基于SELinux的强制访问控制)以及其他相关的安全措施。 #### 二、沙盒机制 沙盒机制是Android系统的一项核心安全特性,旨在确保...
### Android系统安全机制详解 #### 一、引言 随着移动互联网的发展,Android系统作为全球最广泛使用的移动操作系统之一,其安全性受到了前所未有的关注。为了保障用户的数据安全和个人隐私,Android系统内置了一...
参考文献可以帮助开发者深入了解Android安全机制,学习如何有效地防止和应对各种安全威胁。例如,《Android Security Internals》一书提供了关于Android安全体系结构的深入见解,而Google的官方文档则提供了详细的...
文中还提到了Android安全问题日益突出的现象。由于Android是一个开源系统,任何软件不需要官方认证就可以在设备上运行,这就使得非官方市场上的App(应用程序)面临更多安全隐患。例如,一些恶意软件开发者或黑客...
Android安全机制是Android操作系统核心设计的一部分,旨在保护用户数据的安全和隐私,以及防止恶意软件的攻击。该机制基于Linux的权限管理系统,通过多种方式确保应用之间的隔离和对资源的访问控制。 1. **权限分离...
【Android平台安全机制探析】 Android作为全球最受欢迎的移动操作系统之一,其安全性至关重要。随着Android在智能手机和平板电脑等移动设备中的广泛应用,系统的安全性成为关注焦点。本文将深入探讨Android平台的...
《Android安全架构深究》这本书深入探讨了Android操作系统的核心安全机制,揭示了其设计原则、实现方式以及如何保障用户和应用程序的安全。Android作为全球最受欢迎的移动操作系统,其安全性至关重要,对于开发者、...
### Android 13 的 IBinder 接口及其安全性机制 #### IBinder 接口简介 在 Android 开发中,为了实现跨进程通信(IPC),Android 提供了一个核心接口——`IBinder`。这个接口允许不同进程中的应用组件(如 ...
Android系统安全机制的应用 ...然而,随着黑客技术的不断进化,Android安全机制也需要持续更新和完善,以应对新的安全挑战。用户也应该提高安全意识,避免下载不可信的软件,定期更新系统和应用,以确保设备的安全。
《Android安全机制与解决方案分析》 在信息化社会中,Android操作系统因其开源特性和广泛应用,已成为智能手机和平板电脑等智能终端的主流选择。然而,随着其市场占有率的增加,Android的安全问题也日益凸显。本文...
基于洋葱路由和ECC加密的Android-云计算安全访问机制.pdf