首页 > 信息安全 > 正文

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

2014-04-30 09:34:42  来源:e-works

摘要:本文首先深入研究了Android系统的安全机制,主要包括权限管理机制、签名机制、m分配机制等,在此基础之上对Android平台面临的安全威胁及主流的恶意代码进行深入分析和总结。
关键词: 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系统则会检查权限申请者和权限声明者的证书是否是一致的。


[page]    3、Android系统面临的安全威胁的发展现状


    尽管Android巳经拥有了较好的安全机制来保证系统安全,但是在巨大商业利益的激励下,无数攻击者针对系统及软件漏洞,以各种方式对Android用户展开了各种形式的攻击。


    2009年11月10日Android平台出现了第一个恶意间谍软件一Mobile Spy。随后针对Android平台的攻击与其市场份额一样,呈现了爆炸式的增长。根据网秦“云安全”监侧平台统计数据显示,2012年三季度共查杀到手机恶意代码23375款(其中94%为Android平台恶意代码),环比增长92.7%,查杀款数超过2012年上半年总和(17676款)。三季度感染恶意代码的智能手机总计991万部,环比增长30.3%。


    目前,Android系统面临的恶意代码种类多样,危害方式及特点各异。恶意扣费是国内最为常见的Android恶意代码的主要功能,其中典型的恶意代码是Randen.b,它通过发送扣费短信牟利,并能根据手机位置信息选择不同SP服务商。此外,HippoSMS也是一款短信恶意代码,它如果侵入用户手机后会通过向一个硬编码保险收费号码发送短信,从而增加使用户增加额外的手机费用。


    而在伪装方式上,恶意代码多采用重新包装的方式隐藏自己,比如DroidDream采用与合法应用一起打包的方式来隐藏,当用户下载、安装并运行了加载DroidDream的伪合法应用时,DroidDream就会随之启动起来。与DroidDrean。相同,DroidKungFu也是采用重新包装的方式隐藏自身,当被感染的应用被用户启动时,它首先收集用户信息,然后采用HTTPPost的方式将数据发送给硬编码的远程服务器。


    恶意代码一般采用远程服务器方式对其控制。比如RomSmsSender. a是一个潜藏在ROM里面的恶意代码,会自动向远程服务器上传用户手机上的信息,包括手机IMEI、手机号码、SD卡容量等隐私信息,并不断试图获取手机root权限,进行一系列高危操作。GamblerSMS也是一种间谍软件,被描述为“短信间谍”,它的作用是监视每一条进出Android用户手机的短信和打出的每一个电话。NickiBot是一款属于NickiSpy家族的恶意代码,不同的是它的远端服务器完全依赖于短消息对其进行控制。而GoldDream恶意代码则暗中监视用户收到的短信和呼入、打出的电话号码,并且在用户没意识到的时候上传到远程服务器,此外,它还可以从远程服务器获取命令并且执行相应的操作。


    总的来说,目前Android系统正遭遇巨大的安全挑战和威胁,严重地威胁着用户的使用安全,并且随着Android系统市场份额的持续增加,安全威胁也必将进一步增强。


    4、Android系统安全威胁存在的原因分析


    带来Android系统安全威胁的原因种类多样,具体而言,主要有以下几点:


    1)开放模式带来的脆弱性


    Android采用开放的应用程序分发模式,比如采用Android应用商店(Android Market)分发应用,同时还允许用户安装来自于应用商店以外的应用源的应用,比如国内的安卓市场、机锋市场等。在Android应用商店中,当应用程序上传之后,将会强制执行安全检查。然而,在其他Android应用市场中,强制安全检查可能没有得到很好的执行,Android应用程序甚至能够像PC软件一般在各种网站上下载后拷贝到手机中安装运行。


    这种过度开放的分发模式,给了恶意代码开发者入侵用户手机的机会。恶意代码开发者从Android应用商店下载合法的热门应用,然后将它跟恶意代码重新打包,再发布到其他应用商店和网站。重新打包的伪合法应用与原合法应用虽然拥有不同的数字签名,但是由于国内的应用市场或者手机论坛基本上都没有相关的检测手段,这使得Android的签名机制形同虚设。根据腾讯安全实验室公布的2012年第三季度数据,从应用市场或者手机论坛感染恶意代码的Android用户占所有被感染用户的49%。


    2)权限许可机制的问题


    在Android的安全模型中,应用程序的权限在其安装时进行声明,并在之后不能改变。当安装应用程序时,其所要求的权限列表将会在用户面前呈现,并让用户判断这些权限是否是应用完成正常功能需要的。如果一个应用的权限要求过度,用户可以选择不安装该应用或者将该应用标记为可疑。这一机制似乎很好的控制了应用对系统资源的访问,防止了恶意代码进行超出正常应用的操作。但是,这一机制依赖于用户拥有评估正常应用权限的能力,这显然不合适,也不合理。


    由于大多数用户并不是开发者,因此他们对这一机制并不了解,甚至不会去理会这一机制。特别是,许多恶意代码采用的是自动更新的方式下载安装到用户手机中。这种模式下,恶意代码开发者首先发布一款不含恶意代码的合法应用,然后再提示用户更断,在更新中则携带恶意代码,并要求更多的权限,由于用户已经使用并信任了之前的合法应用,因此,这一方式很容易就入侵了用户手机。


    3)操作系统漏洞造成的攻击


    在任何复杂的软件系统中,都必然有缺陷和安全漏洞,Android系统也一样。Android系统采用沙箱来隔离应用程序,使得恶意代码仅能运行在自己所在的沙箱中,以达到保护系统的目的。另一方面,通常移动设备不会给予用户系统的完全控制权,如果要获取Android系统的完全控制权就必须使用root权限。


    但是Android系统本身存在很多漏洞,很多恶意代码利用这些漏洞突破沙箱,获取系统root权限。例如,恶意代码DroidDream就是利用“Exploid”和“RageAgainstTheCage"来突破沙箱,获取root权限。而用户为了使用方便或者其他目的会主动root手机,这样也给恶意代码可乘之机。同时,root手机的唯一办法就是利用漏洞,因此为了获取root权限,某些正常应用研究者也会去挖掘系统漏洞,同时也不希望现有漏洞被修补。这就促进了恶惫代码的发展。一旦获取了root权限,不但可以做到应用程序的静默安装,还可以访问其他应用程序以及随意读写用户隐私数据,修改或侧除非其他应用程序的文件等等,对用户的Android手机造成安全隐患。


    4)应用软件漏洞带来的攻击


    软件漏洞是指应用程序本身设计实现时存在的问题,使得恶惫代码开发者能够利用这些漏洞攻击安装了这些应用的手机。Web浏览器是其中最为危险的漏洞软件。Android Web浏览器以及能够通过浏览器装载的软件(如Flash player, PDF阅读器、或者图片浏览器)包含了大量可供恶意网页攻击的漏洞代码,例如webkit(流行的渲染引攀)。同时Web浏览器又是Android必不可少的组成部分以及用户使用时间最长的应用,因此危害极大。而且浏览器漏洞也很难修复,因为移动浏览器和其相关的库一般是跟固件同版本的,升级很慢。


    此外,为了获得更好的、更加定制化的服务或者为了体验新的服务,据统计,还有大量的Android用户喜欢刷机。这使得市场上出现了各种各样的由个人提供的定制优化版本。这些发布在手机论坛的ROM役有任何的审核机制,并且对于恶意代码制作者而言,将恶意代码嵌人到定制ROM中能够使得恶意代码更加隐蔽、功能更加强大。根据腾讯安全实验室的数据,2012年第三季度,通过内嵌 ROM的方式感染恶意代码的Android用户大约占所有感染用户的10%。


    5、Android安全的未来发展需求


    综上所述,尽管Android系统提供了三大安全机例来为系统安全保驾护航,但是在巨大利益的驱动下,Android系统已经攀露出了巨大的安全威胁,严重的威胁着用户的使用安全,并且随着Android系统市场份额的增加,安全威胁也必将进一步增强。因此,在Android系统现有安全机制之外,急需新的安全机制来应对开放模式、权限许可机制、操作系统漏洞、应用软件漏洞等安全威胁。
 


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:chenjian

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。