Android安全的研究现状与展望
卿斯汉1,2,3
(1.中国科学院软件研究所,北京;
2.北京大学软件与微电子学院,北京;
3.中国科学院信息工程研究所信息安全国家重点实验室,北京)
摘 要:Android是目前最受用户欢迎的智能手机操作系统,与此同时,其安全态势也日益严重。介绍了Android版本更新的发展历程、Android系统的特色、Android的安全机制、Android的安全隐患分析、Android恶意软件与攻击、Android的分析与防御。最后,阐述了Android安全的研究现状与发展趋势以及今后可能的研究方向。
关键词:Android系统;安全机制;安全隐患;恶意软件;分析与防御
1引言
Android是目前最受用户欢迎的智能手机操作系统。根据Gartner[1]的统计数据,Android在年第4季度的市场占有率已经高达80.7%,iOS仅占有17.7%的市场份额,其余如Windows、黑莓等则远远落后,具体见表1。
与此同时,Android的安全态势也日益严重。为了适应不断变化的市场需求,并不断改善手机的安全性能,Android系统的版本更新速度很快。表2是Android版本的更新历史,包括不同的版本代码、版本号、首次发行日期以及相应的API级别。
例如,当前最新的Marshmallow版本(API23)主要聚焦对前一个版本(Lollipop版本(API21、API22))的用户体验改进。主要的改进包括:引入一个新的权限架构;引入一个新的支持上下文的API,可与Google(谷歌)搜索App的新特性“NowonTap(随时应用)”配合使用;引入一个新的电源管理系统,可以在不访问手机时减少设备的后台活动;增加对指纹识别的本地支持等。Lollipop版本最重要的改进之一是:Google推出了一种新的称为“质感设计(materialdesign)”的设计语言,重新设计了用户界面。其特点是:可以在用户界面生成动画,动画是仿照真实的物理世界生成的。并且,该设计语言具有跨平台的特点。其他改进包括:对通知的改进(即使在锁屏时也能访问通知);Android运行时(Androidruntime,ART)正式取代Dalvik虚拟机,改善应用性能;优化电池使用等。又如,在Android2.3版本后增加了基于硬件的NX(noexecute)支持,不允许在堆和栈中执行代码。在Android4.0后,增加了“地址空间布局随机化(addressspacelayoutrandomization,ASLR)功能,防止内存相关攻击。为防止内核级提权攻击,Android4.3后增加了具有强制访问控制机制的SELinux支持。
有时,Android也会删除一些过时或有害的特征。例如,为防止“Setuid()-RLIMIT_NPROC交互”型漏洞利用,Android4.3版本之后撤消了对setuid()/setgid()的支持。又如,Android4.3版本未加声张地引入了一个名为AppOps的新特征,使用户可以有选择地禁止App安装时请求的某些权限,从而改进Android粗粒度的权限模型。但最终,Android4.4.2版本之后删除了这一新特性,因为Google认为这一试验性的特性会导致兼容性问题。
自年9月23日Google正式发布Android版本1.0以来,学术界和产业界对Android及其安全性进行了大量研究。除安全综述论文[2-4]外,还有针对各类不同具体安全问题的讨论[5-7]等。
本文将在参考文献[4]的基础上,结合近年来的最新研究成果[8-12],对Android面临的安全问题与挑战进行全面的概括。
2Android系统特性
Android是基于Linux内核的开源智能移动操作系统,由Google与开放手机联盟(OpenHandsetAlliance,OHA)合作开发。其特点是:开放性,相对于苹果系统的封闭性,Android更加开放,具有更低的进入门槛,吸引了更多用户、第三方开发商与应用程序开发者;资源有限性设计,由于手机应用的资源(内存、电池等)有限,或者由于某些系统受到版权保护,必须进行相应的重新设计;简单性,为了最大程度地方便用户,Android系统遵从“简单、快速和易用”的设计原则,在安全和用户体验之间进行了折中。
2.1Android系统的分层结构
Android系统采用分层结构,由上到下分别是应用层、Android中间件层和Linux内核层。每一层只专注于自己所需提供的服务,各层自己所需要使用的服务都由下面的层提供。
应用层既包含系统提供的基本应用,如桌面、拨打电话和通讯录等;也包含用户安装的第三方应用程序。
中间件层由应用框架、本地类和ART组成。其中,Android应用框架是用C/C++或Java编写的系统应用,由系统内容提供器(systemcontentprovider)和系统服务(systemservice)构成。开发者编写的App和Android系统提供的App调用应用框架,用于提高代码的复用性,并能大大简化代码的复杂度。本地类库是一组C/C++库,提供诸如图形处理等基本功能。ART由核心Java类库与Dalvik虚拟机(DVM)组成。
Linux内核层提供最基本的服务,如进程调度、内存管理、网络协议栈、设备驱动等。同时,Linux内核还作为硬件和软件栈之间的抽象层,将硬件透明化,提供有效的接口和函数,供上层调用,起到了承上启下的作用。Android支持两种指令集架构:ARM和x86。
2.2Android的组件与组件间通信
Android有4类组件:activity(活动)是App与用户之间进行交互的可视化界面;service(服务)是Android系统在后台运行的服务;contentprovider(内容提要)是一种SQL数据库,用于为App提供数据与数据共享支持;broadcastreceiver(广播接收器)是用于接收广播消息的邮箱。
Android的组件间通信主要通过Intent完成。Intent是一个包含目标组件地址和数据的消息对象。AndroidAPI定义了接收Intent和通过其中的信息启动activity、service和广播消息的方法。调用这些方法相当于通知Android系统开始调用目标应用中的执行代码。Intent对象有两类:显式(标注目标组件名称)和隐式(不标注目标组件名称)。
2.3Android的进程通信机制
Android在内核层实现了基于Binder(OpenBinder的精简版本)的轻量级进程间通信,称为组件间通信(inter-如何根治白癜风北京白癜风哪个最好