当前位置:主页>科 研>学术交流>

Android移动终端操作系统的安全分析

1、Android移动终端操作系统的架构

Android是一个基于Linux内核并使用Java语言编写应用的开源的移动终端操作系统,主要用于便携设备,如手机、平板电脑等。Android系统采用四层软件叠层的架构例,如图1所示,至下往上分别为:



 

(1)Linux内核层,以Linux 2.6内核为基础,采用C语言开发,提供了包括内存管理、进程管理、网络管理、安全设置和硬件驱动等在内的基本功能;

(2)运行库层,由Android本地函数库(C/C++库文件),包括C标准库、安全套接字协议、2D图像引擎、数据库引擎、浏览器内核等,核心Java库和Dalvik虚拟机组成,采用C++语言开发;

(3)应用程序框架层,提供完成应用功能的基本类库,包括丰富而又可扩展的视图、内容提供器、资源管理器、通知管理器和活动管理器,由java语言开发;

(4)应用层,包含各种应用软件,如短信、电话、邮件等,以Java作为编程语言。

在Android系统中Dalvik虚拟机非常重要,它允钧Android操作系统为每一个应用分配一个进程,更确切的说,Android中每一个应用都运行在一个单独的Dalvik虚拟机中,每一个单独的Dalvik虚拟机都运行在单独的进程中。如果一个应用程序崩溃,它将不会影响到设备上运行的其他应用程序。这样意味着,任何应用程序都不依赖于另一个。

另一方面,Android整个操作系统都工作在内核空间,也就意味着设备驱动程序和内核扩展程序(不是所有的)能够完全访问到硬件设备,并且运行在内核空间的程序能够抢占运行在用户空间的程序。例如文件系统运行在用户空间中,而显示驱动运行在内核空间,显示驱动进程能够抢占文件系统进程。

2、Android系统安全机制分析

Android系统在采用linux 2.6版本的内核安全机制的基础上,使用了谷歌公司专门为移动设备设计的增强安全机制,例如用户标识符(UID)、组别标识符(GID)、permission机制和签名机制,并使用类型安全的Java编程语言及其类库来增强系统的安全性。

2.1 Android系统的UID与GID

Android是一个权限分离的系统,建立在Linux操作系统已有的权限管理机制的基础上,并对Linux操作系统的相关权限管理机制进行了扩展。具体来说,Android为每一个应用分配不同的UID和GID,使得不同应用之间的访问和私有数据达到相互隔离的目的。

Android系统中,每安装一个应用程序,系统就会为它分配一个独特的UID。在Linux系统中,所有用户也都有UID,其中,除了Root用户对所有文件都有读写和执行的权限之外(其UID等于0),每个用户对于每个文件都有不同的权限,分别为R(可读)、W(可写)和X(可执行)。Android系统中的每个应用程序都会被分配给一个属于自己的用户标识,每个应用程序都有自己的UID,只有携带着该UID,才能存取其所涌盖的有关资料。

GID也在Android系统的权限管理中发挥重要的作用。GID是一组整饭的集合,由框架在应用安装过程中生成,与应用申请的具体权限相关。应用每申请一个权限,GID就会加人一个对应的整数,因此可以将GID理解为一个应用申请的所有权限的集合。对于普通应用程序来说,其GID等于UID。Android中每个应用都在不同的进程中运行,每个进程都有不同的UID和权限。Android系统使用沙箱的概念来实现应用程序之间的分离和权限限制,系统为每个应用程序创建一个沙箱,以防止它影响其它程序(或者其它程序影响它)。

2.2 Android系统的权限管理机制

权限许可(permission)是为保障Android系统的安全而设定的安全标识,同时也是程序实现某些特殊操作的基础。Android系统提供的权限管理机制主要是用来对应用可以执行的某些具体操作进行权限细分和访问控制。

Android中的一个权限主要包含三个方面的信息:权限的名称、属于的权限组以及保护级别。其中,一个权限组是指把权限按照功能分成的不同集合,例如在 COST_MONEY权限组中包含Android.permission.SEND_SMS, Android.permission.CALL_PHONE等和费用相关的权限,而每个权限通过保护级别(protection Level)来标识。Android定义了四个保护级别:normal、dangerous、signature, signature or system,不同的保护级别代表了程序要使用此权限时的认证方式。比如,normal的权限只要申请了就可以使用;dangerous的权限在安装时需要用户确认才可以使用。signature和signature or system的权限则需要使用者的应用和系统使用同一个数字证书。

Android的权限许可机制强制限制应用执行某些操作。目前,Android拥有大约100个内置的权限要求来限制应用的相关操作,包括拨打电话(CALLPHONE)、照相(CAMERA )、使用网络(INTERNET)、发送短信(SEND_SMS)等等。任何Android的应用能够申请默认权限以外的额外权限,当然在安装过程中需要用户确认应用所申请的额外权限。

一个基本的Android应用程序如果没有与其相关联的权限,意味着它不能做任何影响用户体验或设备中数据的有害操作,用户的“敏感”数据也就不会被某些未经授权的程序所损害。更进一步,不同的应用程序运行在不同的沙箱中,这样就算运行了恶意代码,也仅仅只能破坏其所在的沙箱,对系统及用户并不能造成很大的影响。

2.3 Android系统的签名机制

Android系统的另一个安全措施是其签名机制。Android中系统和应用都是需要签名的,签名的主要作用是限制对于程序的修改,使其仅来自于同一来源。Android系统的签名机制分两个阶段:包(package)扫描阶段和权限创建阶段。

包扫描阶段需要进行完整性和证书的验证。普通包的签名和证书必须先经过验证,即需要对manifest下的文件进行完整性检查,完整性检查包括压缩包(jar包)中的所有文件。如果是系统包的话,则需要使用AndroidMenifest. xml文件提取签名和验证信息。

权限创建阶段主要对包进行权限创建。如果该包来自系统应用,则信任它,而且使用新的签名信息去替换旧的信息。如果该包与其它包共享一个UID,并且共享UID在对应的共享用户(sharedUser)中保存的签名与之不一致,那么签名验证失败。

Android系统在安装应用程序时,对一个包的签名验证的主要逻辑是在JarVerifier.Java文件的verifyCertificate函数中实现的。其主要的思路是通过提取证书和签名信息,获取签名算法等信息,然后按照之前对apk签名的方法进行计算,最后比较得到的签名和摘要信息与apk中保存的内容是否匹配。

如果是已安装的程序进行升级,Android系统则需要检查新旧程序的签名证书是否一致,如果不一致则会安装失败。而对于申请权限的保护级别为signature或者signature or system的,Android系统则会检查权限申请者和权限声明者的证书是否是一致的。

(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

容器是如何让“一切都是代码”成为现实的

容器是如何让“一切都是代码”成为现实的

现代应用的发展在很大程度上要归功于DevOps运动的蓬勃兴起以及该运动所产生的各种自动...[详细]

如何快速掌握一门新技术/语言/框架

如何快速掌握一门新技术/语言/框架

IT行业中的企业特点是都属于知识密集型企业。这种企业的核心竞争力与员工的知识和技能...[详细]

建高效数据中心有径可循

建高效数据中心有径可循

能耗问题一直是各大数据中心的心头之痛。有数据表明,2015年我国数据中心能耗预计将高...[详细]

2015黑帽大会:网络灾难后 重建IT安全

2015黑帽大会:网络灾难后 重建IT安全

在遭遇网络灾难后重建IT安全似乎是不可能完成的任务,但根据安全专家Christina Kubeck...[详细]

面对DNS劫持 企业移动应用该如何防护?

面对DNS劫持 企业移动应用该如何防护?

DNS(Domain Name System)劫持又称域名劫持,是指对正常的域名解析请求加以拦截,转而...[详细]

返回首页 返回顶部