Android安全机制及应用软件安全性的研究
2013-08-15李文龙王灵莉
李文龙 王灵莉
(中国海洋大学信息科学与工程学院,青岛 266100)
1 概述
Android是以Linux为内核的开放式的手机操作系统,采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。Android系统是由应用程序层、应用程序框架层、Android程序库、Android运行库、Linux内核层组成的。
应用程序层:应用程序包包括E-mail客户端、SMS短消息、日历、地图、浏览器、联系人管理程序等。
应用程序框架层:开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用,任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。
Android程序库层:各种不同组件所使用的C/C++库集。该库通过Android应用程序框架为开发者提供服务。主要包括:系统C库、媒体库、Surface Manager、LibWebCore、SGL、SQLite等。
Android运行库层:核心库提供了Java编程语言核心库的大多数功能。由Dalvik Java虚拟机和基础的Java类库组成。
Linux内核层:核心系统服务依赖于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议和驱动模型。Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。
2 Android的安全机制
Android是一个支持多任务的系统,而且每一个应用程序或者是系统程序都只在自己的进程中运行。在一定程度上,由于Android采用了Linux内核,每一个应用程序都会被分配用户和组群ID号,在这种情况下,系统和应用程序之间的安全性就大大加强了。而且Android对于像修改系统文件等的特殊操作进行了限制,只有那些得到用户允许的应用程序才能够进行。在Android的框架层,谷歌已经绑定了几种安全机制。这些安全机制大致可以归为三类:Linux机制,运行环境特性和Android固有机制。
2.1 Linux机制
每个安装在Android设备上的应用程序,Android就会给予一个UID(user ID)。这个UID可连结到该应用程序的 AndroidManifest.xml档案的内容。所以用户在安装应用程序时,就可以在屏幕上查看这个 AndroidManifest.xml档案的内容。通过查看这个档案,用户可以了解到应用程序的目的、权限等。当用户接受这个应用程序的意图、权限说明之后,Android才进行安装,并给它一个UID。如果在应用程序执行期间有越轨(企图做出非权限范围)的行为时,用户将会得到Android的警告讯息。而且Android还引入了沙箱的概念来实现应用程序之间分离并且具有允许或拒绝一个应用程序访问另一个应用程序资源的权限。
Android应用程序运行在它们自己的Linux进程上,并被分配一个惟一的UID。默认情况下,运行在基本沙箱进程中的应用程序没有被分配权限,因而防止了此类应用程序访问系统文件或资源文件。但是Android应用程序可以通过AndroidManifest.xml档案请求权限或者与其他受信任的应用程序运行在同一进程中,从而共享对其数据资源的访问,这样,Android应用程序就可以允许其他应用程序访问其资源。这就像在通信录中调用短信应用给一个联系人发短信,然后可以编辑短信、发送短信、也可以在短信中添加一些资源作为附件。虽然短信是通过通信录调用的,但是在通信录中不能直接进行编辑短信,发送短信等操作,也不能访问那些短信应用能访问的资源。
在Android系统中,对文件(包括应用程序文件和系统文件)的访问都要遵循Linux许可机制。在Android中的每一个文件都会被赋予用户和组群ID,还有能代表其属性的三元组-rwx。在三元组中,第一个元素代表拥有人的权限,第二个元素代表同组群的权限,第三个代表其他非本组群的权限。一般来说Android的系统文件的所有者都是系统或者root用户,而应用程序文件的所有者都是应用程序指定的用户。对不同文件的访问权限是有Linux的用户管理机制所制订的,换句话说,对同一个文件的访问权限,不同的用户是不相同的。同样的道理,由于用户ID不同,普通用户不能像操作应用程序一样操作系统文件,这样也就保护系统文件免受破坏。而由应用程序所创建的文件,由于用户ID不同,其他的应用程序是不能访问的,除非通过sharedUserID,多个应用程序分享同一个ID,这样就能陪着多个应用程序到一个进程内,相互之间就能访问数据。
另一方面,由于系统镜像是以只读形式挂载的,以上说提及的各种安全措施的安全性就又进一步加强了。而且,重要的可执行文件和配置文件都存储在ramdisk(也是只读的)或者系统镜像里,就算在厉害的黑客,在没有得到root权限之前也是不能替换或者修改重要文件的。
2.2 运行环境
一个现代操作系统的必要条件,是内存管理单元--对进程分配不同的虚拟内存空间的硬件设备。进程只能访问自身分配的内存空间,而不能访问其它进程所占用的内存空间。因此,进程的权限提升的可能性受到限制,因为其不能运行在系统特权级内存空间。
类型的安全性所指的是系统所用编程语言的特性。Android系统所用的Java语言可以说是目前最安全的一种程序设计语言。Java的安全在语言级上提供了良好的安全措施,主要是:严格遵循面向对象的规范、无指针运算、数组边界检查、强制类型转换、语言对线程安全的支持。此外,java的安全还通过编译器、检验器、类装载器、建立安全策略等方式保证了java程序的安全性。
2.3 Android固有机制
在Android系统中,应用程序层最重要的安全机制就是权限控制。这种权限控制能够有效的限制应用程序只能进行权限所赋予的操作。应用程序的权限是由包管理器在安装时赋予的,在运行时由应用程序框架层执行权限控制。在Android系统中大约有一百个内建的权限,这些权限控制如下的操作:拨号(CALL_PHONE)、拍照(CAMERA)、访问互联网(INTERNET)、键值监听(READ_INPUT_STATE)、编写短信(WRITE_SMS)等。任何一个应用程序都需要在安装的时候在配置文件(AndroidManifest.xml)中声明所要取得的权限。每一种权限都有一个保护级别,而每一种保护级别则代表了此种权限对于系统和其他进程的威胁。保护级别总共分为四种:normal,dangerous ,signature ,signatureorsystem。normal的权限只要申请了就可以使用;dangerous的权限在安装时需要用户确认才可以使用;signature和signatureorsystem的权限需要使用者的app和系统使用同一个数字证书。
通过组件封装,应用程序的内容能被其它程序访问。除此之外,Android组件内容不允许被其它程序访问。这种功能主要通过组件中定义读取(exported)操作。如果设置为否,则组件只能被程序本身或拥有同一ID的程序访问。反之,则可以被其它应用程序调用或访问。
Android中每一个程序都被打包成apk格式以方便安装。apk文件与 Java标准 jar文件相似,它包含了应用程序所需的全部代码。apk文件也包括所有非代码资源文件,如图片、声音等。Android要求所有应用程序都经过数字签名认证。签名文件通常是 Android确认不同应用程序是否来自同源开发者的依据。
3 安全隐患
从上面的分析来看,Android已经内置了各种安全机制来保护系统安全和用户隐私。一个应用程序在未获得权限的情况下不能访问系统文件和用户文件,更不能修改这些文件。但是这种看似完美的权限机制也存在着安全隐患。Android系统相比IOS、Windows Phone等手机操作系统来说,其优势在于Android是一款开放式的手机操作系统。所谓开放式操作系统就是源码公开,用户可以在此基础之上做相应修改。对于大多数Android手机使用者来说,买回来手机的第一件事就获取手机的root权限,刷人自己喜欢的rom,把手机打造成独一无二的的样式,而非IOS等的千篇一律。并且在各大论坛上就能免费的下到最新的应用程序。这也许就是Android的魅力所在,但是绝大多数的用户在获得root权限,安装这些免费软件的时候根本不会在意Android的应用程序所取得的权限,而这恰恰将用户和手机陷入各种安全隐患之中。
通过专业反编译工具Java Decomplier对应用程序源码分析后就能清楚的得知有些应用程序所隐含的目的。在对常用的100个应用程序反编译分析得出,有13个应用程序具有窃取用户信息的特质。
在这些窃取用户信息的程序中主要是针对用户的手机号码,手机IMIE码和位置信息。而这些信息的获取都是需要获得权限的,这正是Android的核心安全机制所在。但是大多数用户最为关心的是实用和方便,并不在意权限的分配,这就使其沦为安全隐患。加之地下灰色产业链利润的驱动之下,使得这些窃取用户信息的应用程序更具有商业价值。
结语
本文在对目前市场占有率第一的Android系统的安全机制进行了分析,对其系统架构和存在的安全隐患进行了介绍。不可否认,Android手机操作系统得到了世界范围内的喜爱。Android手机用户不在局限于单一的系统样式,不在需要购买价格不菲的游戏或者应用,但是手机用户应该清楚的认识到这免费的午餐中所存在的隐患。Android是一款非常出色的智能手机操作系统,在其快速发展中不可避免的存在不完善的地方,相信google也会在今后的发展制定出有效得应用程审核和管理机制,这样就能减少用户的损失。
[1]郭宏志.Android应用开发详解.北京:电子工业出版社,2010.
[2]Shabtai A,Fledek Y,Kanonov U,et al.GoogleAndroid:acomprehensive security assessment.IEEE Security&Privacy,2010:35-38.
[3]Burns J.Developing Secure Mobile Applications for Android[R].Technical Report,iSEC,2008.
[4]Enck W,Ongtang M,McDaniel P.Understanding android security.IEEE Security&Privacy,2009;7(1):53-54.