推荐阅读:Android操作系统的安全机制研究 Android是一个开源的移动平台操作系统,占据中国智能手机80%市场份额,主要用于便携式设备。作为一个运行于实际应用环境中的终端操作系统,Android操作系统在其体系结构设计和功能模块设计上就将系统的安全性考虑之中。与此同
Android操作系统的安全机制研究
Android是一个开源的移动平台操作系统,占据中国智能手机80%市场份额,主要用于便携式设备。作为一个运行于实际应用环境中的终端操作系统,Android操作系统在其体系结构设计和功能模块设计上就将系统的安全性考虑之中。与此同时,它又改造开发了原有的Linux系统内核和Java虚拟机。在这种前提下,Android操作系统在利用系统安全机制方面就会与原系统安全机制的设计目的有所不同。由于Android 平台的开放和脆弱性,开发其上的隐私保护系统显得非常重要,其面临的安全威胁在所有手机操作系统中也是最大的。
1 Android 安全机制
Android的安全机制是在Linux安全机 制基础上的发展和创新,是传统的Linux安全机制和Android特有的安全机制的共同发展。Android安全机制中的主要出发点是,在默认的情况下,应用程序任何能够给用户、系统或者其他应用程序带来负面影响的操作是不可以执行的。Android是一个支持多任务的系统,其安全机制依托于数字签名和权限,系统中的应用程序之间一般是不可以互相访问的,每一个应用程序都有独立的进程空间。
1.1用户ID
Android系统是基于Linux内核的,对应用程序文件和系统文件的访问都要遵循Linux的许可机制,并将这种机制用于管理应用程序。在Android应用程序安装成功后,系统就为其指定了一个唯一的用户名,对应着系统中唯一的UID,每个用户可以属于一个或者多个组。如果在应用程序执行期间有越轨或超越权限操作的行为时,用户将会得到Android 的警告信息。
1.2应用程序数字签名
数字签名是过某种密码运算生成一系列符号及代码组成电子密码进行签名,来代替书写签名或印章。签名的主要作用是身份认证、完整性验证和建立信任关系。
Android系统不会安装没有进行签名的应用程序,所有应用程序进行签名认证是必须的,但签名认证是第三方证书认证机构可以不参与的。Android系统对签名证书的过期时间检查是在应用程序安装时进行的,这就意味着如果一个应用程序在安装后才发现其签名证书过期,就不会影响应用程序的运行。需要注意的是,应用程序必须使用同一个证书进行签名才可以升级到新的版本,两个应用程序使用同一个数字签名才可以相互授予权限来访问彼此的资源。
1.3 Permission机制
Android是一个权限分离的系统,它利用Linux已有的权限管理机制,为每一个应用程序分配不同的UID和GID,使不同的应用程序之间的私有数据和访问达到隔离的目的。如果使不同的应用程序之间的私有数据和访问达到共享,就需要声明对应的权限。为此,Android在原有的基础上进行了扩展,提供了permission机制,它主要是用来对应用程序可以执行的某些具体操作进行权限细分和访问控制。在manifest文件中添加一个permission标签,就定义一个permission。另外,Android为了对某些特定的数据块进行ad-hoc方式的访问,还提供了per-URI permission 机制。
一个权限主要包含权限名、权限组和保护级别,若干个具体权限构成一个权限组,权限组是根据权限的功能划分出来的,每个权限有不同的保护级别(普通级别、危险级别、签名级别和系统/签名级别四类),不同的保护级别代表了应用程序使用此权限时的认证方式。
1.4 沙箱隔离
Android 引入沙箱的概念来实现应用程序之间的分离,具有允许或拒绝一个应用程序访问另一个应用程序资源的权限。
每个应用程序在安装后都有一个UID号,且一直不会改变。系统根据UID号为每个应用程序建立一个沙箱,不同的进程空间中运行着不同应用程序的代码,且不能随意的互访彼此的进程空间。如果两个应用程序的UID不同,运行在基本沙箱进程中的应用程序默认情况下是没有被分配权限,因此它们无法交互彼此的数据,此类应用程序要想访问系统文件、资源文件等变得不太可能,这种相互隔离的沙箱模式保证了数据的安全性。那么,不同的应用之间需要共享资源该怎么办,可以通过请求权限来解决,即设置应用的sharedUserld属性,或者是与其他受信任的应用程序运行在同一进程中,从而共享对其数据资源的访问。如此一来,相同用户的应用程序的资源和数据就如同使用应用程序自身的资源一样可以互相访问和使用。但是,若想两个应用程序分配同样的UID,那么必须使用相同的签名,且请求设置了同一个sharedUserld。
2 Android的安全隐患
Android系统的开源性势必会给我们带来一系列的安全隐患,有Linux内核安全漏洞造成的,有Android自身权限机制不健全造成的,也有基于硬件损伤造成的,但也正因为开源性才可以让我们有自由创造和发挥的空间。
1)基于硬件的问题主要体现在硬件损伤、温度过高等因素导致便携设备不能工作的现象。由于Android系统过于开放,至少在手机死机现象频繁发生的问题上扮演了重要角色。
2)在Linux内核安全上,有一个哈希算法问题,即当攻击者把经过特殊构造的包传给系统并接收后,服务器的资源因哈希表产生冲突而被耗尽。哈希算法是把一组关键词经过某种哈希运算后,把得出的相同的哈希值存储到同一个地址区间,从而使哈希表变成了一个单向链表,插入操作的复杂度因此也变得比较大,从原来的O(n)级变为O(n*n)级,如此导致处理器资源被大量消耗,服务器拒绝服务,也就产生了DoS攻击。还有Linux内核中的整数溢出漏洞问题,它是由于一个正数/负数不匹配整形漏洞引起的,存在于XDR处理器例程中。当Linux系统的XDR处理程序接收到经过攻击者精心构造的包时,包的大小被程序中的检测语句错误的估计,致使大批的内存不断的从内核中复制出来,导致系统瘫痪,内核数据遭受破坏。当然,Linux内核还有其他的一些问题,此处不再叙述。
3)Android自身权限机制问题。首先,不透明的权限问题。用户在安装应用时,系统会把该应用使用的权限列表以界面的方式弹出告诉用户。但是,为什么用这些权限,用户或许不清楚,也许根本就不了解、不关心,由于用户要使用这个应用所以必须安装,从而造成不必要的损失。其次,不可分的权限集问题。上面提到,应用程序安装后,系统已经给出了使用的权限列表,权限的使用只限于该列表而不能超出该列表。但问题的关键在于,用户不能选中权限列表中的部分选项,要么全选,要么不选,都是一种绝对的状态,用户只有全选权限才能使用该应用程序,否则只能放弃使用。最后,研发工作者在研发应用程序的过程中,由于某种原因声明了一些或许根本就没有使用到的权限,那么在安装应用程序时,也会告诉用户,从而增加了系统的负担和一些不安全的因素,用户由于担心安全问题而不敢随意安装该应用程序。
3 结束语
Android 是一款非常出色的操作系统平台,随着Andriod系统智能终端的日益推广,Android操作系统的安全性越来越重要,在其快速发展中不可避免的存在不完善的地方。Android平台的开源造成了系统易被攻击,随着安全技术的不断发展和进步,开源的Android平台的安全性可以不断地被改进,Android系统的安全漏洞会得到有益补充。除了要不断改善Android自身的安全,用户也应该加强安全维护意识,还要对第三方程序开发商进行严格的监管,制定出有效的应用程审核和管理机制,这样才能使得用户对Android操作系统的支持越来越多,才能更好地保障整个系统的安全性。