Android的安全机制包含下面几个方面:

     • 进程沙箱隔离机制。
     • 应用程序签名机制。
     • 权限声明机制。

     • 訪问控制机制。
     • 进程通信机制。
     • 内存管理机制。
     • SELinux

一、进程沙箱隔离机制

        Android应用程序在安装时被赋予独特的用户标识(UID),并永久保持;应用程序及其执行的Dalvik虚拟机执行于独立的Linux进程空间。与UID不同的应用程序全然隔离。


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

二、应用程序签名机制

              应用程序包(.apk文件)必须被开发人员数字签名;同一开发人员可指定不同的应用程序共享UID,进而执行于同一进程空间,共享资源。

签名的过程:

       • 生成私有、公共密钥和公共密钥证书
       • 相应用进行签名
       • 优化应用程序

签名的作用:

       • 识别代码的作者。
       • 检測应用程序是否发生了改变。
       • 在应用程序之间建立信任,以便于应用程序能够安全地共享代码和数据。

三、权限声明机制

        应用程序须要显式声明权限、名称、权限组与保护级别。不同的级别要求应用程序行使此权限时的认证方式不同:Normal级申请就可以用;Dangerous级需在安装时由用户确认才可用;Signature与Signatureorsystem则必须是系统用户才可用。

• 通过manifest文件里声明下面属性

<uses-permissionandroid:name="string" />

请求android:name相应的权限。

•  通过下面属性加入自己定义权限

<permission

xmlns:android="http://schemas.android.com/apk/res/android"

android:name="com.test.android.ACCESS_FRIENDS_LIST"

android:description="@string/permission_description"

android:label="@string/permission_label"

android:protectionLevel="normal" />

•  系统组件权限,如activity组件

<activity

android:permission="com.test.android.ACCESS_FRIENDS_LIST"

四、訪问控制机制

    传统的 Linux訪问控制机制确保系统文件与用户数据不受非法訪问。
    Linux用户与权限
    • 超级用户(root)。具有最高的系统权限,UID为0。
    • 系统伪用户,Linux操作系统出于系统管理的须要,但又不愿赋予超级用户的权限,须要将某些关键系统应用
      文件全部权赋予某些系统伪用户,其UID范围为1~
499,系统的伪用户不能登录系统。

• 普通用户,仅仅具备有限的訪问权限,UID 为
500 ~ 6000。能够登录系统获得
shell

在Linux权限模型下,每一个文件属于一个用户和一个组,由UID与GID标识其全部权。

针对于文件的详细訪问权限

定义为可读(r)、可写(w)与可运行(x)。并由三组读、写、运行组成的权限三元组来描写叙述相关权限。

第一组定义文件全部者(用户)的权限,第二组定义同组用户(GID同样但UID不同的用户)的权限,第三组定

义其它用户的权限(GID与UID都不同的用户)。

五、进程通信机制

               Binder进程通信机制提供基于共享内存的高效进程通信。Binder基于Client-Server模式,提供类似COM
    与CORBA的轻量级远程进程调用(RPC);通过接口描写叙述语言(AIDL)定义接口与交换数据的类型,确保进程
    间通信的数据不会溢出越界。污染进程空间。

六、内存管理机制

              基于标准
Linux的低内存管理机制(OOM)。设计实现了独特的低内存清理(LMK)机制。将进程按重要性分级、分组。当内存不足时,自己主动清理最低级别进程所占用的内存空间。同一时候,引入不同于传统Linux共享内存机制的Android共享内存机制Ashmem,具备清理不再使用共享内存区域的能力。

七、SELinux

SELinux 拥有三个主要的操作模式

• Disabled:禁用SELinux策略
• Permissive:在Permissive模式下,SELinux会被启用但不会实施安全性策略,而仅仅会发出警告及记录行
  动。Permissive模式在排除SELinux的问题时非常实用
• Enforcing:这个缺省模式会在系统上启用并实施SELinux的安全性策略。拒绝訪问及记录行动

SELinux 拥有三种訪问控制方法:

• 强制类型(TE):TE是针对型策略所採用的主要訪问控制机制
• 基于角色的訪问控制(RBAC):它以SELinux用户(未必等同Linux用户)为基础。但缺省的针对型策略并未
  採用它
• 多层保障(MLS):未被採用,并且常常隐藏在缺省的针对型策略内。

SELinux策略文件:

• android/external/sepolicy文件夹下

• wing-common/sepolicy自己定义策略

SELinux默认宏:

• global_macros
• mls_macros
• te_macros

       SELinux常见概念
• 主体:在SELinux中主体通常指的是进程。
• 客体:客体一般是一些系统资源(如文件、文件夹、套接字、共享内存等)。
• 客体类型:一个客体类别代表某个确定类型(如文件或套接字)的全部资源。

• DAC:Linux基于用户识别的訪问控制。

• MAC:主体对客体所採用的訪问类型,即强制訪问控制(TE)。

• 类型强制的安全上下文:訪问属性叫做安全上下文;一个安全上下文包含用户、角色和类型标识符。

• 域:因为历史原因,一个进程的类型通常被称为一个域或域类型。

我们觉得域、域类型、主体类型和进程类型

  都是指相允许思。
• 策略:由于SELinux默认不同意不论什么訪问,所以在SELinux中,通过allow语句对主体授权对客体的訪问权限。
• 域转换

       SELinux策略

Selinux策略语言眼下支持四类AV规则:

allow。dontaudit,auditallow。neverallow规则由四部分组成

• 源类型(SourceType),一般是尝试訪问进程的域类型。
• 目标类型(TargetType),被进程訪问的客体的类型。
• 客体类别(ObjectClass),同意訪问的客体类型(如file,dir,socket等)。
• 许可(Permission)象征目标同意源类型訪问客体类型的訪问种类。
• 如allowdev_type tmpfs:filesystem associate;

       SELinux域转换
• 域转换发生条件
• 进程的新域类型对可运行文件类型有entrypoint訪问权限
• 进程的域类型对入口文件类型有execute訪问权限
• 进程当前的域类型对新的域类型有transition訪问权限

       SELinux属性

attribute概念能够被理解为“具有一组共性的type集合”,或者“这组type所具有的共性”。语法例如以下:

attribute attribute_name;

比方定义一个名为”file_type”的属性:

attribute file_type;

在定义某个type时建立它与某个attribute的关联,比方:

type shadow_t,file_type;

使用attribute可以有效地降低类似规则的数目。比方为了让domain==backup_t可以读取文件系统中的全部文

件。则理论上必须为全部可能存在的文件type定义对应的allow规则:

type backup_t;

allow backup_t shadow_t:file read;

allow backup_t var_t:file read;

能够通过attribute来有效解决问题。

allow backup_t file_type:file read;

       SELinux角色
        SELinux通过SC中的role实现了“基于角色的訪问控制”(RBAC-Role Based Access Control)。在SELinux中,
        并不直接建立用户和type之间的联系,而是通过角色作为桥梁。

user u roles { r }

role r types domain;

       SELinux訪问控制
• ls -Z 显示文件系统客体的安全上下文
• Ps -Z 显示进程的安全上下文
• 显示「用户:角色:类型:安全级别」

       SELinux问题分析

当SELinux处于enforcing模式下时某些程序的运行会失败,在这里总结此类问题的整体分析方法。

• 首先排除DAC权限的问题,使用“ls –l”检查相关文件的属主和权限。假设DAC的权限许可。则就是SELinux的策略显式地拒绝了当前操作的运行。
• 然后检查用户当前所扮演的角色。某些操作仅仅有特定的角色才有足够的权限运行。
• 进入permissive模式,从分析失败操作对应的AVC Denied Msg入手区分问题的根源。


Android安全机制介绍的更多相关文章

  1. Android Binder机制介绍

    做过Android开发的同学可能有些体会,入门初期,工作内容主要是实现各式各样的UI界面,以及实现应用的业务逻辑.在这个阶段,我们会逐渐熟悉View系统,逐渐学会实现各种各样的界面以及动画效果.再往后 ...

  2. Android签名机制

    Android APK 签名比对 发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的.签名机制在Android应用和框架中有着十分重要的作用. 例如,Android系 ...

  3. 理解Android安全机制

    本文从Android系统架构着手,分析Android的安全机制以SE Android,最后给出一些Android安全现状和常见的安全解决方案. 1.Android系统架构 Android采用分层的系统 ...

  4. 【Android 开发】: Android 消息处理机制之一: Handler 与 Message

    最近几讲内容,我们学习了Android中关于多线程的一些知识,上一讲我们讲解了异步任务 AsyncTask 的操作,Android中还提供了其他的线程操作,如Handler Message Messa ...

  5. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  6. Android安全机制(2) Android Permission权限控制机制

    http://blog.csdn.net/vshuang/article/details/44001661 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.概述 Andro ...

  7. Android反射机制实现与原理

    本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...

  8. 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue

    解析Android消息处理机制 ——Handler/Thread/Looper & MessageQueue Keywords: Android Message HandlerThread L ...

  9. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

随机推荐

  1. Dajngo admin

    Dajngo admin admin app Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.p ...

  2. pandas.DataFrame——pd数据框的简单认识、存csv文件

    接着前天的豆瓣书单信息爬取,这一篇文章看一下利用pandas完成对数据的存储. 回想一下我们当时在最后得到了六个列表:img_urls, titles, ratings, authors, detai ...

  3. failed to execute goal org.apache.maven.plugins:maven-archetype-plugin错误解决方法

    使用maven创建project时碰到如下错误: D:\codes\JSF>mvn archetype:create -DgroupId=com.tutorialspoint.test -Dar ...

  4. JS(异步与单线程)

    JS(异步与单线程) 题目1.同步和异步的区别是什么,试举例(例子见知识点) 区别: 1.同步会阻塞代码执行,而异步不会 2.alert 是同步,setTimeout 是异步 题目2.关于 setTi ...

  5. php expat+DOM+SimpleXML XML读取

    XML 文件 将在我们的例子中使用下面的 XML 文件: <?xml version="1.0" encoding="ISO-8859-1"?> & ...

  6. iOS学习笔记21-推送证书与秘钥申请

    ---恢复内容开始--- 一.iOS证书 iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到App Store这两个证书都是必须的,它是iOS开发的基本证书.Xcode7以后真机 ...

  7. HDU 3001 Travelling ——状压DP

    [题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...

  8. POJ 3469 Dual Core CPU ——网络流

    [题目分析] 构造一个最小割的模型. S向每一个点连Ai,每一个点向T连Bi. 对于每一个限制条件,在i和j之间连一条Cij的双向边即可. 然后求出最小割就是最少的花费. 验证最小割的合理性很容易. ...

  9. LinkedList的构造函数有哪些

    LinkedList构造函数有(两种): public LinkedList() public LinkedList(Collection<? extends E> c) /** * Co ...

  10. Query on The Trees(hdu 4010)

    题意: 给出一颗树,有4种操作: 1.如果x和y不在同一棵树上则在xy连边 2.如果x和y在同一棵树上并且x!=y则把x换为树根并把y和y的父亲分离 3.如果x和y在同一棵树上则x到y的路径上所有的点 ...