Perface
终端应用管理是应用安全的屏障。终端应用管理通过终端对应用的签名检查、功能权限检查、应用调用能力管理等细分机制,提高应用使用的安全性。
我称其为管好自己哈哈哈
1 应用签名检查
在应用商店发布的应用大多都经过应用商店和开发者的签名以确保应用来源的安全性,终端的应用安装管理器会查询应用的签名以验证应用的合法性。
iOS应用开发者在应用商店注册时会获取一个开发者证书,iOS系统强制将应用开发和分发限定在苹果公司的体系之内,即iOS、App Store和iTunes,三者形成闭环以增强应用的安全性;Android系统虽未对签名证书的来源进行严格的限定,但默认也会对应用来源进行检查。
Andorid不合法就提醒
但实际使用中,相当多的Android用户会打开未知来源应用安装许可选项以安装其他来源的应用,iOS用户中也有一定比例会通过越狱的方式获取开放的应用安装权限,在应用安装便利的同时破坏了系统的应用签名检查措施,为移动终端带来了安全风险。
2 应用权限申请
根据用户的使用体验,Android涉及的权限大致分为3类:
- 手机所有者权限,即Android手机用户不需要输入任何密码,就具有安装一般应用软件、使用应用程序等的权限;
- ROOT权限,Android系统的最高权限,可以对系统中所有文件、数据进行任意操作;
- Android应用程序权限,Android应用程序对Android系统资源的访问需要的相应访问权限,该权限在应用程序设计时设定,在Android系统中初次安装时生效。
Android对其框架内各种对象(包括设备上的各类数据、传感器、拨打电话、发送信息、控制别的应用程序等)的访问权限进行了详细的划分。
这部分在设计APP的时候就会选择好,通过代码的方式。
应用程序在安装和运行前必须向Android系统声明它将会用到的权限,否则Android将会拒绝该应用程序访问超过该权限许可的内容。
应用程序设计的权限不能大于Android手机所有者权限,并需在开发者的开发过程中申请并获得授权。
Android定义了百余种permission,可供开发人员使用,具体详见网址:
http://developers.androidcn.com/reference/android/Manifest.permission.html
Android提供的应用权限,具体如表所示。
Android要求应用所用到的功能均需要在使用前申请使用权限,用户在应用安装时可以看到应用申请的权限清单。但实际使用中,应用过度申请权限的问题普遍存在,从Android权限申请的角度没有进一步的有效措施对其做更详细的区分。
Android应用程序权限在应用APK(Android Package, Android,安装包)中的AndroidMainifest.xml文件进行说明。该文件罗列了应用程序运行时库、运行依赖关系、所需的系统访问权限等。
程序员在进行应用软件开发时,需要通过设置该文件的uses-permission字段来显式地向Android系统申请访问权限。
应用程序的权限申请,如下文中uses-permission部分所示。
<? xml version="1.0" encoding="utf-8"? > <manifest xmlns:android="http://schemas.android.com/ apk/ res/android" package="com.cuandroid. demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="22" /> <uses-permission android:name = "android.permission. READ_PHONE_STATE"/> <uses-permission android:name = "android.permission. INTERNET"/> </uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.wondersoft.encryptphonedemo. MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name = "android.intent.action. MAIN" /> <category android:name = "android.intent.category. LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
上述文件中uses-permission部分为应用权限申请说明,其意义是说明该软件需要允许获取手机状态和允许应用打开网络连接发送短信的功能。
Android系统定义的应用权限如表所示,用户还可以自定义权限作为补充。
Android系统对应用程序授权申请的处理流程如下。
- 1)进入处理应用程序授权申请的入口函数。
- 2)系统从被安装应用程序的AndroidManifest.xml文件中获取该应用正常运行需申请的权限列表。
- 3)显示对话框,请求用户确认是否同意这些权限需求。
- 4)若同意,则应用程序正常安装,并被赋予相应的权限;若不同意,则应用程序不被安装。系统仅提供给用户选择“安装”或者“取消”的权利,没有选择其中某些权限进行授权的权利。
应用权限管理的系统处理流程如图所示。
以沃商店为例,在应用安装时申请用到的权限明细如图所示。
但是因为各种各样的原因,应用普遍会申请超出其实际使用范围的权限,用户只能选择接受,否则将无法使用该应用。Android系统允许应用过度申请权限一直是Android系统安全缺陷之一。
3 应用调用能力管理
标准Android的安装程序只罗**列了待安装应用所有申请调用的权限列表,用户只能被动接受或拒绝使用该应用。**业内普遍认为,应当提高用户在应用调用能力的可视化管理,提高用户安全体验。
在这种背景下,中国通信标准化协会组织制定了《移动智能终端安全能力技术要求》行业标准,并于2013年11月开始实施,该标准从终端能力的角度为终端应用提供了细分的管理措施。
标准中提到的移动智能终端安全能力,
- 包括终端硬件安全能力、
- 终端操作系统安全能力、
- 终端外围接口安全能力、
- 终端应用层安全要求、
- 终端用户数据保护安全能力等。
基于对终端安全能力的分级管理,可以实现精细化的终端应用管理。
《移动智能终端安全能力技术要求》中要求,在应用调用上述5大终端安全能力时,系统向用户提供必要的安全提示或状态提示以实现被动安全。
同时,根据移动智能终端所支持的安全能力程度,将移动智能终端安全能力划分为从高到低的5个等级,并分别对应安全能力要求。具体如表所示。
行标推荐移动智能终端在明显位置以图形化等级标识描述终端安全能力等级,标识图案如图所示。
以微信为例,一个典型的应用权限管理操作界面:
支持应用调用能力管理的终端,用户可基于对各应用功能的判断来设定各应用是否可调用其申请的设备权限,提高应用使用的安全性。
现在就是这样了,千万别因为偷懒而把你的APP权限全部放开哦!
4 应用运行监控管理
Android系统对运行中的应用程序对服务和资源的占用情况进行实时监控管理,通常第三方手机管理工具都包含此类功能,这部分属于对系统级的统计需求应用运行实行监控管理,可使用户了解系统中应用的运行状态、资源使用等信息。
进一步地,针对应用安全的运行监控策略,一般包括应用空间独立、应用越权限制等手段,主要表现为沙箱(sandbox)机制。
Android沙箱的本质是为了实现不同应用程序和进程之间的互相隔离。在默认情况下,应用程序没有权限访问系统资源或其他应用程序的资源,每个App和系统进程都被分配唯一并且固定的UID,每个App在各自独立的Dalvik虚拟机中运行,拥有独立的地址空间和资源,运行于Dalvik虚拟机中的进程必须依托内核层Linux进程而存在。
通过Android使用的Dalvik虚拟机和Linux文件访问控制实现了应用沙箱机制,任何应用程序如果想要访问系统资源或者其他应用程序的资源必须在自己的manifest文件中进行声明权限或者使用共享UID。
更进一步的应用运行监控管理,还有硬件隔离的双系统方案,或基于ARM TrustZone构建的用户应用环境和安全运行环境的隔离方案等。