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日

相关推荐

  • 基于深度学习的源代码漏洞挖掘

    安全漏洞的数量和复杂程度与日俱增,导致漏洞挖掘的成本也在不断升高。而近年对深度学习的研究使得机器具有分析学习能力,如何将深度学习算法应用漏洞挖掘技术成为研究热点。本次报告首先介绍了…

    2020年2月27日
    1.9K
  • 域自适应网络框架DANE

    本次报告介绍一种域自适应网络嵌入框架DANE,该框架解决了嵌入空间偏移和嵌入分布偏移的问题。在DANE中,来自多个网络的节点通过一组共享的可学习参数被编码为向量,以便向量共享对齐的…

    2021年3月1日
    1.5K
  • 多视图聚类技术

    多视图聚类技术旨在利用不同视图之间信息的互补性和一致性增强模型的鲁棒性,提高聚类准确率。本次报告首先讲述多视图聚类的基本概念,然后结合两篇算法对完全多视图聚类和不完全多视图聚类方法…

    2023年12月27日
    1.8K
  • 基于度量学习的小样本学习方法介绍

    Few-shot learning (FSL)的含义是得到从少量样本中学习和概括的能力,它希望机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习。…

    2020年11月2日
    2.5K
  • 深度神经网络鲁棒性评估方法

    本报告介绍了深度神经网络鲁棒性评估方法的基本概念和评估方式,并讲述了两种评估方法,分别从定性分析和定量计算两个角度讲述了如何对鲁棒性进行评估,提升对深度神经网络鲁棒性和评估方法的认…

    2023年4月3日
    1.5K
  • 基于深度学习的二进制软件漏洞挖掘

    本次学术报告面向基于深度学习的二进制软件漏洞挖掘,首先定义二进制缺陷检测子任务的基本概念和TIPO,其后介绍模糊测试、符号执行等动态缺陷检测方法,最终具体讲解了三种基于深度学习的二…

    2020年8月2日
    2.1K
  • Deep Learning词向量生成–CBOW和Skip-gram

      Deep Learning词向量生成的方法通过神经网络模型让机器自动学习到每个词有效的特征表示,而CBOW模型和Skip-gram模型是目前最流行、常用的Deep learni…

    学术报告 2017年10月13日
    1.2K
  • 软件缺陷自动修复方法

    随着现代软件规模的不断扩大和复杂性的不断提高,软件缺陷调试所消耗的成本也在不断增加,软件缺陷的自动修复成为越来越迫切的需求。软件缺陷自动修复可以分为缺陷定位、补丁生成、补丁验证三个…

    2021年12月20日
    1.8K
  • 基于图的知识追踪方法研究

    随着智慧教育系统(Intelligent Tutoring System, ITS)的快速发展,ITS以其时空约束少、便捷程度高和个性化定制学习的优势,在现代教育事业中获得广泛关注…

    2023年5月15日
    1.4K
  • 程序崩溃的根本原因分析

    程序崩溃的根本原因分析技术旨在通过分析崩溃时的输入数据,自动推断并定位导致崩溃的根本原因所在的位置,辅助开发人员快速修复软件缺陷。本次报告介绍了2个利用谓词进行程序崩溃的根本原因分…

    2024年7月2日
    1.2K