二、Android安全机制分析(2011《第26次全国计算机安全学术交流会论文集》)
1.综述
2007年11月5日,Google牵头的开放手机联盟(Open Handset Alliance)发布第一款完全开源的移动设备综合平台——Android。
2008年9月22日,T-Mobile USA发布第一款基于Android平台的智能手机——T-Mobile G1。
2010年11月,业界首次公开了一种针对Android自带浏览器的攻击代码。
2.Android系统架构
(1)Android为移动设备而生,基于Linux内核,由操作系统、中间件、应用程序运行时和核心应用程序组成。
(2)Android系统架构图如下:
图中看出Android分为4层,从高到低分别为应用程序层、应用程序框架层、Android本地库及运行环境层和Linux内核层。
3.Android安全机制
在Android安全机制中,既有传统的Linux安全机制,也有Delvik虚拟机的相关安全机制。同时,Google还设计了Android特有的安全机制。如下图:
(1)POSIX User
每个应用程序(.apk)安装时,Android会赋予该应用程序唯一的ID。因此,每个应用程序都运行于不同的进程。这样,系统为每个程序建立一个沙箱,不管应用程序是被激发或调用,它始终运行在属于自己的进程中,拥有固定的权限。
(2)文件访问控制
Android中的文件访问控制来源于Linux权限控制机制。每个文件访问权限都与其拥有者、所属组号和读写执行三个向量组共同控制。文件在创建时将被赋予不同应用程序ID,从而不能被其他应用程序访问,除非它们拥有相同ID或文件被设置为全局可读写。
另一个增强安全的设计——将系统镜像挂载为只读。所有重要的可执行程序和配置文件位于固件(Firmware),只有在系统初始化中加载。所有的用户和程序数据都存储在数据分区。数据分区有别于系统分区,是在系统运行中有效的存储和加载用户数据。而且,党Android系统处于“安全模式”时,数据分区的数据不会加载,从而可以对系统进行有效的恢复管理。
(3)内存管理单元
一个现代操作系统的必要条件,是内存管理单元——对进程分配不同的虚拟内存空间的硬件设备。进程只能访问自身分配的内存空间,而不能访问其他进程所占用的内存空间。因此,进程的权限提升的可能性受到限制,因为其不能运行在系统特权级内存空间。
(4)强制类型安全
类型安全是编程语言的一个特性,它强制变量在赋值时必须符合其声明的类型,从而阻止变量被错误或不恰当地使用。
缓冲区溢出攻击通常由类型转化错误或缺少边界检查而造成。
Android使用强制类型Java语言,Java语言依靠三种机制达到类型安全:编译期间的类型检查、自动的存储管理和数组的边界检查。
(5)移动设备安全
Android安全机制中引用AAA原则——认证(Authentication)、授权(Authorization)和审计(Accounting)。
Android借鉴智能手机典型安全特性,认证和授权过程由SIM卡及其协议完成,SIM卡中通常保存使用者的密钥。
(6)应用程序权限控制
Android应用程序安全的核心机制是权限控制。应用程序必须在系统给予的权限中运行,不得访问未被赋予权限的其他任何内容。
程序安装时由包管理器赋予权限,运行时由应用程序框架层执行权限控制。Android大约有一百多种行为或服务的权限控制(打电话、发短信、访问互联网等)。
(7)组件封装
通过组件封装,应用程序的内容能被其他程序访问。
(8)签名机制
Android中每个程序都被打包成apk格式以便安装。Android要求所有应用程序都经过数字签名认证。签名文件通常是Android确认不同应用程序是否来自同源开发者的依据。
4.Android安全隐患分析
对Android移动设备的攻击进行分类:基于硬件的攻击、基于Linux内核的攻击、基于系统核心程序的攻击和基于应用程序的攻击。
(1)基于硬件的攻击
由于硬件的通用性和拥有系统最高权限,且在使用过程中难以被升级和维护,是的基于硬件的攻击危害更大。
移动设备中,SD卡和SIM卡均能脱离移动设备而单独使用。在安全机制设计中,辨识这些卡的正常使用和丢失状态下的恶意使用,从而不导致隐私泄露。
(2)基于Linux内核的攻击
Linux每年都有近百个漏洞被CVE收录。网络攻击中利用内核漏洞,将获得系统最高权限。由于Linux内核是高可配置性,而移动设备资源有限,往往会禁用一些内核选项用以降低内存资源消耗,这其中就包括了安全配置选项。如G1手机中禁用审计模块支持、禁用SYN cookie支持(可降低SYN洪泛攻击)等。在不同的移动设备上使用的内核配置可以定制,如为了增强安全性可以使用SELinux模块。
(3)基于系统核心程序的攻击
系统核心程序包括系统本地库、Dalvik Java虚拟机和基础的Java类库。系统库主要包括各种底层函数和复杂计算函数等,被系统进程或Dalvik通过JNI(Java Native Interface)调用。这些函数用C/C++编写,而缺少强制类型安全机制。同时,Dalvik进程在通过JNI调用系统函数发生错误时会导致Dalvik进程的崩溃,从而可导致内存空间呗侵占或恶意代码被执行。Dalvik是所有应用程序的运行环境,其安全性将影响所有应用程序。
现金被发现的Android系统库的漏洞主要集中于定制的SQLight、WebKit和新加入的库。由于能获取较高权限,且核心程序为开源代码,这将使得该类攻击获得更多攻击者的青睐。
(4)基于应用程序的攻击
应用程序包括Android系统自带和用户自行安装的应用程序。用户自行安装的应用程序来源多样,无法验证可靠性,使得针对应用程序的攻击时最容易的攻击手段。恶意程序通过伪造签名,获得更高的权限。现在互联网中流行的针对浏览器的攻击,如跨站脚本、URL编码、社会工程等,还有针对SQLight数据库的SQL注入攻击,必将在移动互联网中被利用。该类方法的多样性和简易性,使应用程序成为黑客光顾的重灾区。同时,由于黑色产业链的存在,也使得基于应用程序的攻击更具有商业价值,如恶意扣费、流量访问等。
5.总结
曾经流行的Windows Mobile、Symbian等都在应用中爆发大量的安全漏洞和被发现众多恶意软件。攻防演绎是个呈双螺旋增长的过程,Android在快速发展中,也将不可避免出现大量针对其的攻击行为和恶意软件。