`
onedada
  • 浏览: 103369 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Android的安全与权限(1)

 
阅读更多
Android的安全与权限(1)

Android是一个多进程系统,每一个应用程序(和系统的组成部分)都运行在自己的进程中。在应用程序和系统间的安全通过标准的Linux设备在进程级被执行,例如被分配给应用程序的用户和组ID。额外的颗粒度安全特性通过"许可"机制来提供,该机制能够对一个指定进程可实现的特定操作进行约束。

(1)安全结构

Android安全中的一个重要的设计要点是在默认情况下应用程序没有权限执行对其他应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(如联系方式或E-mail),读/写其他应用程序的文件,执行网络访问、保持设备活动等。

应用程序的进程是一个安全的沙箱,它不能干扰其他应用程序,除非在它需要添加原有沙箱不能提供的功能时,它将明确声明权限。这些权限请求能够被不同方式的操作所处理。特别地,基于证书和用户的提示将被自动允许或禁止。权限的请求是在那个应用中通过一个应用程序被声明为静态的,所以在此之后,在安装或没有改变时它们会预先知道。

(2)应用程序签名

所有的Android应用程序(.apk文件)必须通过一个证书的签名,此证书的私钥必须被开发者所掌握。这个证书的标识是应用程序的作者。这个证书不需要通过证书组织的签署。Android应用程序对于使用自签署的证书是完全允许的和特别的,这个证书仅被用于与应用程序建立信任关系,而不是为了大规模地控制应用程序是否被安装。最重要的方面是通过确定能够访问原始签名权限和能够共享用户ID的签名来影响安全。

(3)用户标识和文件访问

安装在设备中的每一个Android包文件(.apk)都会被分配到一个属于自己的统一的Linux用户ID,并且为它创建一个沙箱,以防止影响其他应用程序(或者其他应用程序影响它)。用户ID 在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性。

因为安全执行发生在进程级,所以一些不同包中的代码在相同进程中不能正常地运行,既然它们需要以不同的Linux用户身份运行。开发者可以使用每一个包中的AndroidManifest.xml文件中的 manifest 标签属性 sharedUserID 拥有它们分配的相同用户ID。通过这样做,两个包被视为相同的应用程序的安全问题就被解决了。注意:为了保持安全,仅有相同签名(和请求相同sharedUserID标签)的两个应用程序签名将会分配相同的用户ID。

应用创建的任何文件都会被赋予应用的用户标识,并且正常情况下不能被其他包访问。当通过getSharedPreferences(String,int)、openFileOutput(String、int)或者openOrCreate Database(String、int、SQLiteDatabase.CursorFactory)创建一个新文件时,开发者可以同时或分别使用MODE_WORLD_READABLE和MODE_WORLD_RITEABLE标志允许其他包读/写此文件。当设置了这些标志后,这个文件仍然属于自己的应用程序,但是它的全局读/写和读/写权限已经设置,所以其他任何应用程序可以看到它。

(4)权限命名

一个基本的Android应用程序没有与其相关联的权限,意味着它不能做任何影响用户体验或设备中数据的有害操作。要利用这个设备的保护特性,在自己的应用程序需要时,开发者必须在AndroidManifest.xml文件中包含一个或更多的<uses-permission> 标签来声明此权限。

例如,需要监听来自SMS消息的应用程序将要指定如下内容:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.android.app.myapp" >
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
    </manifest>

在安装应用程序时,通过包安装器,应用程序要通过权限请求的许可。如果在应用运行期间对用户不做检查,它要么在安装时被授予特定的许可,并且使用某种特性;要么不被授予许可,并且使得一切使用特性的尝试失败而不提示用户。

通常情况下,如果许可检查失败,应用将收到一个SecurityException事件。但是这并不能保证总是发生,例如,BroadcastIntent(Intent)方法就是当数据发送到每个接收器时的许可检查,在方法调用返回后,许可检查失败时应用就不会收到一个异常。然而在所有例子中,许可检查失败都会被打印到系统日志中。通常地,多次许可错误会产生抛回至应用程序的 SecurityException 异常。

Android系统提供的许可可以在Manifest.permission中找到。每个引用也可以定义和执行它自己的许可,因此它不是全面的所有可能的许可列表。

在程序运行期间,个别权限在一些地方可能被强制:

在系统接到呼叫时,预防一个应用程序去执行特定的函数;

在启动一个活动时,防止一个应用启动其他应用程序的活动;

发送和接收意图广播时,控制谁能接收你的广播或者谁能发送广播给你;

访问和操作一个内容提供器;

绑定或开始一个服务。

(5)权限的声明和支持

为了执行自己的权限,开发者必须首先在自己的AndroidManifest.xml中使用一个或多个<permission>标签声明它们。

例如,一个应用程序想用权限控制谁能启动一个活动,它可以声明一个允许这个操作的许可,如下:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.me.app.myapp" >
        <permission android:name="com.me.app.myapp.
    permission.DEADLY_ACTIVITY"
            android:label="@string/permlab_deadlyActivity"
            android:description="@string/permdesc_deadlyActivity"
            android:permissionGroup="android.permission-group.COST_MONEY"
            android:protectionLevel="dangerous" />
    </manifest>




分享到:
评论

相关推荐

    Android安全与权限.pdf

    ### Android安全与权限详解 #### 一、引言 随着移动互联网的发展,Android操作系统作为全球最广泛使用的移动操作系统之一,其安全性和权限管理显得尤为重要。本文将深入探讨Android中的安全架构、权限机制以及应用...

    Android 安全与权限

    ### Android 安全与权限详解 #### 一、引言 Android 作为全球最流行的移动操作系统之一,其安全性和权限管理对于保护用户隐私至关重要。本文将深入探讨 Android 的安全架构,以及应用程序如何通过权限机制来访问...

    Android 安全与权限 Security Permission

    Android 安全与权限 Security Permission Android 安全架构的中心思想是确保应用程序在默认情况下不能执行任何对其他应用程序、系统或用户带来负面影响的操作。为了实现这个目标,Android采用了多种机制,包括进程...

    android文件读写权限

    与读取权限一样,从Android 6.0开始,也需要在运行时获取用户授权。 三、AndroidManifest.xml配置 在Android项目的`AndroidManifest.xml`文件中,我们需要声明所需的权限。对于文件读写权限,添加以下代码: ```...

    Android 串口通信权限问题

    1. **Android权限系统**:Android采用基于权限的访问控制模型,每个应用在安装时会请求用户授予所需的权限。对于串口通信,我们需要关注`android.permission.ACCESS_FINE_LOCATION`和`android.permission.ACCESS_...

    Android 定位权限申请

    在Android系统中,权限管理是应用安全的重要组成部分。自Android 6.0(API级别23)开始,谷歌引入了一种新的权限管理模式——运行时权限(Runtime Permissions)。这个变化对开发者来说是一个重大调整,因为在此之前...

    Android软件安全与逆向分析_带书签_Android软件安全与逆向分析_带书签_android_

    1. SQL注入与XSS攻击:讨论Android应用如何防止SQL注入和跨站脚本攻击,确保数据安全。 2. 漏洞利用:分析常见安全漏洞如缓冲区溢出、整数溢出、权限提升等,并探讨其修复策略。 3. 应用签名与证书:了解Android应用...

    Android中运行权限

    从Android 6.0(API级别23)开始,引入了一项重大变化,即动态权限管理,这与之前的版本有很大不同。在Android 6.0之前,应用在安装时会一次性请求所有所需权限,而Android 6.0之后,部分敏感权限可以在应用运行时按...

    Android运行时权限

    1. **运行时权限模型**:在Android 6.0及更高版本中,系统将权限分为两类:正常权限和危险权限。正常权限对用户隐私和系统稳定性影响较小,系统会在安装时自动授予。而危险权限涉及用户隐私或可能损害系统安全,必须...

    Android-安全架构及权限控制机制剖析

    Android安全架构的核心是基于Linux内核的权限管理系统,它构建在微内核之上,为每个应用程序分配了独立的用户ID(UID)和组ID(GID),以实现进程隔离。Android系统还引入了 SELinux(Security-Enhanced Linux)来...

    Android应用 高危权限

    Android 应用程序中存在一些高危权限,保护程序的安全是非常重要的。在 Android 应用程序中,有些权限被认为是高危权限,需要特别注意。这些权限包括 INSTALL_PACKAGES、DELETE_PACKAGES、INTERNET、READ_SMS、...

    Android 动态权限获取

    1. **运行时权限介绍**: - 在Android 6.0之前,应用在安装时会一次性获得所有在Manifest中声明的权限,用户无法在安装后对单个权限进行控制。 - Android 6.0引入了运行时权限,对于危险权限(如访问联系人、位置...

    免费分享:Android的安全与权限

    通过本文的学习,我们深入了解了Android安全体系的核心概念和技术细节,包括安全结构、应用程序签名、用户标识和文件访问控制等方面。此外,还详细介绍了权限的命名、声明和支持方式等内容。这些知识对于Android...

    Android修改系统文件访问权限

    1. **init.rc**:这是Android系统启动时执行的第一个脚本,位于系统的system/core/rootdir目录下。init.rc是Android初始化配置文件,它定义了系统启动时的服务和服务属性,包括服务的启动命令、运行级别、依赖关系等...

    Android权限列表permission说明.txt

    为了保障用户的数据安全与隐私保护,Android系统设计了一套完善的权限管理系统。本文将详细介绍Android权限列表中的部分常见权限,以及如何获取模拟器的电话号码代码。 #### 1. BROADCAST_PACKAGE_REMOVED - **定义...

    android6.0动态权限申请

    在Android 6.0(API级别23)及以上版本,系统引入了运行时权限管理机制,这是一项重要的安全更新,旨在提升用户对应用程序权限的控制。动态权限申请就是这一变化的核心,它要求开发者在程序运行时,而不是安装时,向...

    Android自定义权限的使用

    在Android系统中,权限管理是应用安全的重要组成部分。Android自定义权限允许开发者为自己的应用程序创建特定的权限,以便更好地控制用户访问敏感数据或执行特定操作。这篇博客将深入探讨如何在Android项目中实现...

    android获取应用程序的权限列表

    在Android系统中,每个应用程序都运行在一个独立的安全沙箱中,拥有特定的权限来访问系统资源和服务。了解和管理这些权限对于开发者和用户来说都至关重要。本文将详细讲解如何在Android系统中获取应用程序的权限列表...

    Android的安全与权限.docx

    ### Android的安全与权限详解 #### 一、安全结构概述 Android平台的核心设计理念之一就是在默认情况下,应用程序不具备执行可能损害其他应用程序、操作系统或用户的行为的能力。这些潜在的危害行为包括但不限于...

    Android解决所有权限相关。

    在Android系统中,权限管理是应用安全的重要组成部分。Android的所有权限可以分为正常权限(Normal Permissions)和危险权限(Dangerous Permissions)。理解并正确处理这些权限对于开发者来说至关重要,因为它们...

Global site tag (gtag.js) - Google Analytics