Android系统框架安全性评估及应对策略
Android操作系统以开放性为主,无论是应用程序数字签名方式、权限控制、发布渠道、应用程序审核等都为开放性设计,这也在一定程度上带来了更多的风险,主要风险存在于“越狱”破解之后。
总的来说,Android系统手机面临病毒、木马等恶意程序攻击的风险较高,更接近于目前PC环境。
通过其安全机制可知,对于短信软件、W AP浏览器等均可以进行替换或者通过manifest机制为第三方应用程序授予资源访问权限,因此需要采用更多的技术和管理措施防范安全风险。
一、Android操作系统的框架:
Android框架主要分为四层:应用层、应用程序框架层、系统运行库层、Linux核心层。
在这四个层次上可以进行安全性分析。
二、android系统安全机制分析
1 应用层:代码安全和接入权限
1)代码安全:
目前Android应用程序开发语言主要为Java,也可以通过Google发布的Android NDK 工具集移植或者开发C/C++代码。
与iPhone应用程序的主要语言Object-C不同,Java属于解释型语言,并不直接编译成二进制文件,这造成基于Java语言开发的应用程序较容易被反编译。
应对方法:
在应用程序中增加代码混淆等防止反编译措施;同时,对于核心代码,建议开发C/C++程序。
防止纯JA V A程序容易被第三方反编译风险。
同时可以用混淆器,默认混淆器为proguard。
2)接入权限:
权限是Android 平台安全机制核心,旨在允许或限制应用程序访问受限的API 和资源。
默认情况下,Android应用程序没有被授予权限,权限在安装期间通过manifest 文件由应用程序请求。
Android系统中权限分为普通级别(normal)、危险级别(dangerous)、签名级别(signature)和系统/签名级别(signature or system)。
系统中所有预定义的权限根据作用的不同,分别属于不同的级别。
也对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏等。
框架层可以自定义权限。
应对方法:权限主要用来权限定义位置:
frameworks/base/core/res/ AndroidManifest.xml权限可用于整个应用、Activity、Service等
这个是应用权限。
2 应用框架层:数字认证
所有Android应用程序都必须进行数字签名。
除了通过共用User ID进行数据共享的方式,使用相同数字签名签署的两个应用程序可以相互授予权限来访问基于签名的API。
所有
Android 应用程序都必须被签名。
应用程序或代码签名是一个这样的过程,即使用私有密钥数字地签署一个给定的应用程序,以便:
∙识别代码的作者
∙检测应用程序是否发生了改变
∙在应用程序之间建立信任
基于这一信任关系,应用程序可以安全地共享代码和数据。
使用相同数字签名签署的两个应用程序可以相互授予权限来访问基于签名的API,如果它们共享用户ID,那么也可以运行在同一进程中,从而允许访问对方的代码和数据。
也可以考虑增加电子密码器、动态口令卡等认证技术,指纹识别等。
3 系统运行库层:网络安全机制、数据库安全机制、虚拟机安全机制
1)网络安全
加密算法(敏感数据)DES(对称)、3DES(对称)、RSA(非对称)、MD5、RC2/RC4(对称)、IDEA、AES、BLOWFISH等Web服务(HTTP层)三种手段WS-Security、SSL、数字签名。
目前ksoap不支持WS-Security,TCP层SSL、TSL数据链路层W API。
除了采取SSL加密通信外,对于SSL加密通道内的数据也要进行全量加密。
2)数据库安全
Android采用的SQLite目前采用明文存储数据;安全涉及加密、读写、搜索等。
数据库可以进行加解密和权限设置。
3)虚拟机安全性
Android系统可以简单地完成进程隔离和线程管理。
每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
通常情况下,应用间无法相互访问私有数据。
访问数据的方法为:文件方式、数据库权限开放、配置文件开放、Intent通信。
4 Linux核心层:文件访问安全机制。
Android在权限管理上应用了Linux的ACL(Access Control List)权限机制。
1)从分区层面讲:在系统运行时,最外层安全保护是由Linux系统提供的,其中system.img所在的分区是只读的,不允许用户写入,而data.img所在的分区是可读写的,用于存放用户数据。
分区的用户权限在init.rc中定义。
2)单独文件层面讲:单独文件访问权限控制分群组、用户、权限。
权限分可读、可写、可执行。
a.文件基于User ID保护,只有具有相同User ID的应用程序才能访问相关文件。
可以
说,Andr oid操作系统是在Linux内核基础上额外进行加固和限制的操作系统。
在Linux中,一个User ID标识一个用户;在Android上,一个User ID标识一个应用程序。
应用程序在安装时被分配User ID,应用程序在设备上的存续期间内,User ID保持不变。
User ID不同,导致应用程序进程必然不同。
b.应用程序进程
在默认情况下,运行在沙箱进程中的应用程序没有被分配任何系统权限,不同应用程序的进程之间也完全隔离。
Android应用程序需要通过应用程序的manifest文件请求访问系统或资源的权限,也可以通过manifest文件设置android:shared User ID属性值,使得该程序与其他使用相同私钥签名的应用程序使用相同的User ID,进而运行在同一进程中,以便共享对其数据和代码的访问,(备注:所以在手机安装软件的时候,有可能两个软件分别要求申请不同的权限,用户都同意,两个程序在后台分别交互数据,然后将用户信息传递出去。
4 Android应用程序发布渠道
Android平台的开放性也体现在应用程序发布渠道上面。
与苹果应用程序必须发布到App Store不同,Android应用程序可以选择多个互联网渠道进行发布:
1)自建网站提供应用程序下载。
2)通过第三方论坛、网站提供下载。
3)在线商店。
除了Google的在线商店()还有许多在线商店,如亚马逊、天翼空间等。
这些在线商店中,Google在线商店市场份额最多,由于审核机制的不完善造成应用程序存在安全风险。
应对方法:
1)在产品需求和设计阶段,严格限制应用程序对外提供API、自定义权限等功能。
防止针对应用程序控制权限不完善造成资源滥用风险。
2)明确Android手机应用程序发布渠道,并对用户加强安全教育,避免从其他渠道获取假冒应用程序。
防止发布渠道缺乏审核所带来的风险。