Android安全体系结构简介

Android操作系统是一个开放式的操作系统,保护这样一个开放平台,需要强有力的安全体系结构。Android系统拥有多层次的安全机制,可以灵活地满足用户各层次的安全需求。 

 

1.1 系统体系结构

Android系统的体系结构如图2‑1所示。

Android安全体系结构简介

图 2‑1 Android系统结构图

系统共分为4层,分别是应用层、应用框架层、系统运行库层和Linux内核层。

应用层

Android系统应用层的软件主要由Java语言编写而成,运行在虚拟机中(后面介绍),分为系统软件和应用软件(关于应用程序的基本组件、结构等内容在培训的第二阶段进行介绍)。

应用框架层

这一层是Android的系统服务程序和应用开发的API框架。系统服务程序提供了一系列基本服务,API框架负责给应用开发者提供基本的类库(编程序时通常需要import进去)。

主要的系统服务程序有:

1. 资源管理器(Resource Manager)。提供非代码资源的访问,如本地字符串、图形和布局文件等。

2. 通知管理器(Notification):应用可以在状态栏中显示自定义的提示信息。

3. 活动管理器(Activity Manager):用来管理应用程序的声明周期。

4. 服务管理器(Service Manager):管理系统服务。

5. 窗口管理器(Window Manager):管理所有的窗口程序。

6. 包管理器(Package Manager):管理所有的应用软件包。

主要的API框架(Java类库)有:

1. android.app:提供高层的程序模型和基本的运行环境。

2. android.content:包含对各种设备上的数据进行访问和发布。

3. android.database:通过内容提供者浏览和操作数据库。

4. android.graphics:底层的图形库,包含画布、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。

5. android.location:定位和相关服务的类。

6. android.media:提供一些类管理多种音频、视频的媒体接口。

7. android.net:提供帮助网络访问的类,超过通常的java.net.*接口。

8. android.os:提供了系统服务、消息传输和IPC机制。

9. android.opengl:提供OpenGL工具。

10. android.provider:提供访问Android内容提供者的类。

11. android.telephony:提供与拨打电话相关的API。

12. android.view:提供基础的用户界面接口框架。

13. android.util:涉及工具性的方法,例如时间日期的操作。

14. android.webkit:默认浏览器的操作接口。

15. android.widget:包含各种UI元素(大部分是可见的)在应用程序的布局中使用。

系统运行库层

 当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件。主要有以下几种库:

1. Bionic系统C库:C语言标准库,系统最底层的库。

2. 多媒体库:Android系统多媒体库,基于PacketVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制。

3. SGL:2D图形引擎库。

4. SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。

5. OpenGL:支持3D效果。

6. SQLite:关系数据库。

7. Webkit:Web浏览器引擎。

8. FreeType:位图(bitmap)及矢量(vector)。

Android系统中所有应用程序都运行在Dalvik虚拟机中。其可执行文件的格式为dex。Dalvik虚拟机是Android相对于Java的JVM的Android应用程序独有的虚拟机。其指令执行效率比JVM要高,不需要很高的CPU主频,同时,也不需要占用很大的内存空间。有以下几个主要特点:

1. 使用专有的dex文件格式,将所有的class文件内容整合到一个文件中,可以减少整体的文件大小,提高类的查找速度。

2. 基于寄存器。相对于基于堆栈的JVM ,Dalvik在平台的通用性上略差,但在代码的执行效率上却更胜一筹。

3. 独立的进程空间。每一个应用程序在DalvikVM的层面都是一个虚拟机实例,每个虚拟机实例都是一个独立的进程空间。所有进程间交互的操作都会通过Linux驱动来完成。

Linux内核层

Android完全继承了Linux的内核,但是增加了很多适应于移动设备的驱动。具体如下。

1. 显示驱动:基于Linux的帧缓冲驱动。

2. 键盘驱动:作为输入设备的键盘驱动。

3. Flash内存驱动:基于MTD的Flash驱动程序。

4. 照相机驱动:常用的基于Linux的v412驱动。

5. 音频驱动:常用的基于ALSA的高级Linux声音体系驱动。

6. 蓝牙驱动:基于IEEE802.15.1标准的无线传输驱动。

7. Binder IPC驱动:Android的一个特殊的驱动程序,不对应任何的硬件设备,提供进程间通信的功能。

8. 电源驱动:管理电池。

 

1.2 系统安全机制

在安全机制方面,Android系统既继承了Linux内核的安全机制,又对系统框架的各个层次都进行了安全增强,逐渐形成了Android系统自己的一套安全体系。Android系统的安全特性可分为以下两个方面:一是继承自Linux的安全机制,二是Android系统框架特有的安全机制。

继承自Linux的安全机制分为以下两个方面。

一、用户控制。Android系统的每一个应用软件在安装时都会被分配一个唯一的UID(User ID,用户ID)[ ]。因此应用软件只能运行在自己的进程中,应用软件之间也不能互相访问。这样相当于每个应用软件都运行在一个独立的“沙箱”中,程序的私有数据会被完全的保护起来。

二、文件访问控制。Android系统的文件访问控制来源于Linux。每一个文件的访问权限都由其拥有者ID(uid)、所属组ID(gid)、及读写执行(rwx)三个向量组控制。文件在创建时将被赋予不同的应用软件 ID,从而不能被其它应用软件访问,除非它们拥有相同的组ID 或文件被设置为全局可读写。Android在此基础上,将系统文件目录设置为不可读写,如/system、/system/xbin、/system/modules等,这样即使拥有了root权限也无法向其中写入文件。

Android特有的安全机制分为以下三个方面。

一、权限控制机制。Android系统自有安全机制的核心是权限控制机制。系统通过权限来制约应用软件访问系统资源的能力。权限的表现形式是一段字符串[ ],如:SEND_SMS表示发送短信,INTERNET表示访问网络等。由此可见,每个权限都与特定的操作以及特定系统资源绑定在一起,应用软件只有在权限申请获得许可的情况下才能进行操作或访问资源。应用软件的所有权限必须由开发者在程序包中的AndroidManifest.xml文件中声明,并且在安装的时候由用户来许可。Android系统采用的是“all or nothing”的机制,即应用软件只有在所有权限申请都被用户授权的情况下才能被安装,若有任何一个权限申请不被用户授权,则无法安装。

二、组件封装机制。Android系统的应用软件由四类组件构成,分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。默认情况下,这四类组件被封装在同一程序中,且均被设置为私有(Private),即不允许其他应用软件访问。如果开发者需要让自己的组件能够被其他应用软件访问,即将组件设置为公有(Public),则可通过显式地将manifest文件中的exported属性的值修改为true来实现。具有安全意识的开发者通常都会显式地设置exported属性的值,因为在不同的Android SDK中,exported的默认值是不一样的,不一定与开发者打算设置的值相同。

三、数字签名机制。与Symbian系统类似,Android 系统同样要求应用软件在经过数字签名认证后才能被安装。每一个Android程序都会以apk压缩包的形式来安装,而在程序编译完成,打包之前必须经过一步数字签名的过程。系统在程序安装前会检测其数字签名,只要程序用来签名的证书是合法的,则该应用软件也是合法的。同一个开发者发布的不同应用可以用同一个证书来签名。

 

1.3 参考

Google官方文档:http://source.android.com/devices/tech/security/index.html

原创文章,作者:admin,如若转载,请注明出处:https://www.isclab.org.cn/2014/10/21/android%e5%ae%89%e5%85%a8%e4%bd%93%e7%b3%bb%e7%bb%93%e6%9e%84%e7%ae%80%e4%bb%8b/

(2)
adminadmin
上一篇 2014年10月21日
下一篇 2014年10月22日

相关推荐

  • Web快速开发方法简介

    本次报告先介绍了五种Web开发模式,讲解了各种开发模式的结构和优缺点,并结合实验室内部情况对合适的开发模式进行了推荐。之后简单介绍了Django、Flask、CherryPy这三个…

    2020年1月13日
    1.8K
  • 图匹配网络

    本次学术报告旨在带领听众完成图匹配网络相关知识入门。首先介绍了图匹配网络的基本概念;随后以GMN和MGMN为例讲解了图匹配网络的两种经典范式,详细阐述了图匹配网络的基本原理和应用场…

    2023年6月19日
    1.7K
  • FNN模型正确性测试及测试样本生成

    FNN模型被广泛应用于自动驾驶、医疗诊断等安全关键的领域,因此需要测试模型的正确性,及时发现模型的缺陷并进行模型的修复与再训练。本次学术报告介绍了FNN模型正确性测试中遇到的两个关…

    2024年1月26日
    1.5K
  • 扩散模型加速采样方法与应用

    扩散模型在数据生成的众多领域上呈现出了非常好的效果。然而,在实际应用过程中,扩散模型的采样原理导致其生成速度非常缓慢,严重限制了模型的实际应用效果。为了对采样生成过程进行优化,近年…

    2023年4月17日
    1.6K
  • MySQL事务机制

          事务是MySQL数据库用户保证一组sql操作的完整性的一种机制,确保一组操作能够全部成功或者全部失败,不会出…

    2018年11月2日
    1.3K
  • 面向操作系统的模糊测试

    本报告主要介绍了关于面向操作系统的模糊测试方法,探讨了操作系统漏洞挖掘的挑战与常见漏洞类型,详细介绍了模糊测试中的基本概念、常用方法以及两种前沿的Linux内核模糊测试技术ACTO…

    2025年2月9日
    1.5K
  • 符号执行简介

          符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特…

    2019年1月2日
    1.8K
  • AFL–基于覆盖的模糊测试工具

    本次报告介绍了模糊测试以及各种分类方法,并且讲解了目前流行的模糊测试工具AFL的原理,阐明了AFL工具是如何提高代码覆盖率的。针对AFL存在的测试用例生成盲目性的问题,介绍了一种基…

    2021年3月29日
    2.1K
  • 可解释的假新闻检测

    虚假新闻对社会产生了许多负面影响。现有假新闻检测方法按照输入条件,可分为基于新闻内容及其外部知识的方法,以及基于社交上下文的方法。最新的方法在检测假新闻方面取得了较高的精度,然而这…

    2022年11月14日
    1.8K
  • 走近特定音频识别(之三)—— 检索 Vs 识别

    在说明计算机如何进行特定音频识别这个问题之前,我们有必要对两个我们经常接触到的概念加以区分——“检索”和“识别”。     刚刚接触音频信号处理的朋友们常常会混淆这两个概念,本人刚…

    学术报告 2014年10月25日
    1.3K