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日

相关推荐

  • 模型窃取

    机器学习,尤其是神经网络,已广泛部署在行业环境中,模型通常被部署为预测服务。但是,具有对模型的查询访问权的对手可以窃取该模型以获得与远程目标模型基本一致的替代模型,这就是模型窃取攻…

    2021年5月10日
    5.8K
  • Not all bytes are equal Neural byte siev

          简单高效的漏洞检测方法一直是信息系统安全领域研究的热点,微软研究人员借助机器学习和深度神经网络开发出一种用于…

    2019年1月21日
    3.0K
  • 高斯混合模型及求解算法

          高斯混合模型(Gaussian mixture model,GMM)用于对样本的概率密度分布进行估计,而估计…

    2019年2月18日
    3.1K
  • active self-paced learning

          在机器学习中获得标注数据是一个重要的部分。但是在一些专业领域,标注成本高,成本高,导致了获得标注数据困难。主…

    2019年2月24日
    3.1K
  • 时序知识图谱推理

    着大数据和人工智能技术的飞速发展,知识图谱已成为表示和存储结构化知识的重要工具,其中时序知识图谱则进一步强调了事件随时间演变的重要性。本次学术报告致力于讲解时序知识图谱推理方法,重…

    2024年5月18日
    3.8K
  • Android自定义权限及其设计缺陷

    本次报告主要讲述了Android权限机制和自定义权限的相关内容。介绍了权限机制和自定义权限的基本概念,解释了权限升级漏洞的基本概念,并详细讲解了发现此类漏洞的模式测试方法,最后思考…

    2022年4月17日
    3.3K
  • 深度学习系统安全性测试及测试样本优先级排序

    深度学习在近十年取得了长足发展。由于其在复杂领域表现出优异的性能,逐渐被集成到软件体系中形成深度学习系统。这一方面推动了深度学习的发展,另一方面也对深度学习的安全性提出了巨大挑战:…

    2021年11月29日
    4.4K
  • 网络表示学习GraphGAN

    网络表示学习(Network Representation Learning),又名网络嵌入(Network Embedding)、图嵌入(Graph Embedding),旨在从…

    2019年11月13日
    3.9K
  • 层次聚类算法

    对聚类算法有一点点入门的时候就知道,几乎所有的“平面型”聚类算法都有一个共同的弱点-难以确定类别数(聚类停止条件),而层次聚类在一定程度上解决了这个问题(它算一种比较古老比较通用的…

    2015年1月28日
    3.8K
  • Boosting Methods

      集成学习是机器学习领域中提升单一模型学习效果的典型方法,而Boosting则是集成学习中常用且效果良好的算法之一。通过将Weak learner巧妙地组合成Strong lea…

    学术报告 2017年9月14日
    3.1K