Android安全机制分析

【2018-01-13】

  Android安全机制分析

  Android系统是基于Linux内核开发的,因此,Android系统不但保留并继承了Linux操作系统的安全机制,而且其系统架构在各个层面上都具有独特的安全特性。 1. Linux内核层安全机制Android Linux内核包含强制访问控制机制和独立访问控制机制。强制访问控制机制由Linux安全模块实现,但由于某种原因,Google不会将LSM编译到Android内核中。自主访问控制机制通常通过文件访问控制来实现。 Linux文件系统的权限控制是通过用户,组,其他和读(r),写(w)和执行(x)的不同组合来实现的。这样,每个文件都有三个基本的权限集,其中一个权限的组合允许,限制,拒绝对用户,用户组和其他用户的访问。通常情况下,只有uid是系统或root用户才能访问Android系统文件,而应用程序只能通过申请Android权限才能访问该文件,正因为如此,Android使用内核层Linux的独立访问控制机制和运行时Dalvik虚拟机来实现Android的沙盒机制。 Android沙箱机制Android沙箱的本质是实现不同应用程序和进程的隔离,即默认情况下应用程序没有权限访问系统资源或其他应用程序资源。每个APP和系统进程都被分配一个唯一的固定用户ID,它对应于内核层进程的uid。每个应用程序运行在自己独立的Dalvik虚拟机上,拥有自己的地址空间和资源。运行在Dalvik虚拟机上的进程必须依赖内核层Linux进程的存在,所以Android使用Dalvik虚拟机和Linux文件访问控制来实现沙盒机制,任何应用程序如果要访问系统资源或其他应用程序资源您必须在自己的清单文件中声明权限或共享uid。 3. Android的权限检查机制Android是一个权限分离系统,任何应用程序都必须使用Android资源(网络,电话,短信,蓝牙,通讯录,SdCard等)的Android系统来申请,等待Android系统的批准在应用程序之前可以使用相应的资源,权限和Java API是多对多的映射,当Android应用程序访问到相应的权限时,可以调用API来完成相应的功能,一个API调用可以分为三个步骤:首先,应用程序在获得适当的权限后调用公共库中的API;其次,公共API调用一个称为API存根的接口;第三,RPCstub以IPC绑定的形式将请求传递给系统服务,具体的功能是由系统服务进程执行的,权限的检查主要发生在系统服务和系统进程上,权限检查不仅包括静态检查安装,还要对APP运行时进行动态检查。动态检查是指APP运行时调用的系统服务或系统组件需要授权检查。动态检查不会在APP本身发生,而是在系统服务或系统组件的过程中发生。在Android4.0版本中,Android的权限检查机制可以被绕过,这是因为权限检查机制存在缺陷,即主叫方不需要拥有被叫方的相关权限,Android4.0的版本不仅使用函数checkUidPermission确定是否授予相应进程权限,并使用checkCallingPermission函数检查调用者是否具有适当的权限,因此Android权限机制一般不能被绕过,而Android权限机制有一些不容忽视的缺陷如下:一是权限授予应用程序时,权限在应用程序的生命周期内是有效的,用户不能剥夺权限;二是权限机制缺乏灵活性,或所有需要的权限批准所有的应用程序,或拒绝安装应用程序;第三,权限机制不是en不够安全,不能通过JNI技术直接阻止恶意软件调用C库来获取系统服务。 4. Android的数字签名机制安装在Android系统上的所有应用程序都必须具有数字证书,用于标识应用程序作者与应用程序之间的信任关系。 Android系统不会安装没有数字证书的应用程序。如果权限的保护级别是签名,则只有当应用程序使用的数字签名与申请此权限的应用程序使用的数字签名相同时,Android系统才会授权。如果权限具有signatureOrSystem的保护级别,则Android将该权限授予具有相同数字签名的应用程序或Android程序包。