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日

相关推荐

  • 论辩挖掘领域观点对识别以及抽取方法

    随着社交媒体、论坛产生的用户生成数据不断增长,从大规模信息流中发现、分离和分析论点的需求凸显了论辩挖掘的重要性。本次报告旨在了解此领域经典的系统处理流程,掌握观点对识别和抽取任务定…

    2022年6月20日
    1.5K
  • 缺失模态的情绪变化识别

    随着多模态情绪识别应用不断发展,真实场景中的模态缺失问题对模型鲁棒性提出了挑战。本次学术报告聚焦缺失模态下的情绪变化识别,介绍了基于单模态专家融合与难度感知课程学习的代表性方法,为…

    2025年12月30日
    1.2K
  • Glibc内存管理2

          内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的…

    2019年6月19日
    1.3K
  • 并查集算法及其在约束传递中的应用

    <img src="https://www.isclab.org.cn/wp-content/uploads/2015/06/41.png" alt=&q…

    2015年6月15日
    1.1K
  • 图神经网络可解释方法

    图神经网络模型的可解释性对于建立用户与决策模型之间的信任关系至关重要,为了安全、可信地部署图神经网络模型,需要提高图神经网络模型的可解释性和透明性。本次报告带大家了解图神经网络的可…

    2021年7月11日
    1.5K
  • 基于因果推理的对抗防御方法

    基于因果推理的对抗防御方法通过因果干预、特征解耦与不变性学习,识别并强化数据中的因果特征,抑制模型对伪相关与“捷径特征”的依赖,从而在机理上增强模型的泛化能力和抗干扰能力,使其在遭…

    2025年11月10日
    1.0K
  • 匮乏资源命名实体识别

    NER作为自然语言处理中的一项基础任务,应用范围非常广泛。命名实体识别是许多任务的基本组成部分,并已被深度神经网络大大推进。目前NER只是在有限的领域和实体类型中取得了较好的成绩,…

    2021年11月2日
    1.4K
  • 源代码补丁正确性测试

    源代码补丁正确性测试是自动程序修复(Automated Program Repair, APR)流程的最后一个环节,旨在验证APR所生成的补丁是否真正解决了目标缺陷且未引入新的问题…

    2025年3月10日
    1.2K
  • 基于输入输出扰动的模型窃取防御方法

    模型窃取防御技术能够促进深度神经网络的健康发展,推动数据交流与共享。本次报告从输入输出扰动的角度分析了模型窃取防御方法的框架,从数学角度给出了防御的基本原理以及优缺点,利用防御方法…

    2024年7月21日
    1.2K
  • 深度神经网络对抗样本防御方法

    近年来深度学习技术不断突破,极大促进了人工智能行业的发展,但人工智能模型本身易受到对抗攻击从而引起严重后果。对原始样本有针对性地加入微小扰动,该扰动不易被人眼所察觉,但会导致人工智…

    2021年1月4日
    1.8K