Android 通过在每台设备上实施了基于权限的安全策略来处理安全问题,采用权限来限制安装应用程序的能力。当某个权限与某个操作和资源对象绑定在一起,我们必须获得这个权限才能在对象上执行操作。由于Android设计本身就是为Android开发人员着想,所以一切权限许可权由用户决定而不是手机制造商和平台提供商,但这不得不带来了开发者滥用权限,黑客通过权限来进行恶意行为的风险,所以作为静态分析一个app是否为恶意软件的第一道关,获取并了解Android Permission权限意义是十分重大的。
权限策略
Android 框架提供一套默认的权限存储在android.anifest.permission 类中,同时也允许我们自己定义新的权限。我们在写应用程序时声明权限,程序安装时新权限被引入系统。权限授权在应用程序被安装时执行。当在设备上安装应用程序时,程序将请求完成任务必需的权限集合。被请求的权限列单显示在设备屏幕上以待用户审查只有用户同意授权后,程序才会被安装,该应用程序获得所有被请求的权限。所以,Android 系统实施的主要安全准则是应用程序只有得到权限许可后,才能执行可能会影响到系统其它部分的操作。
每个权限被定义成一个字符串,用来传达权限以执行某个特殊的操作。所有权限可以分为两个类别:一种是执行程序时被应用程序所请求的权限,一种是应用程序的组件之间通信时被其它组件请求的权限。开发者通过在AndroidManifest.xml文件中编写权限标签来定义以上两种类别的权限策略。
权限声明
应用程序可以用一个<permission>元素来声明权限, 用于限制访问特定组件或应用程序 在安装程序时, 这个已声明的权限被加入到系统中,具体可以参看:Android 自定义权限
权限请求
应用程序列出所有需要用来完成任务的权限,分别用 <use-permission>元素标识这些权限。在程序安装时被请求,列表显示在屏幕上用户要么同意安装,要么中止安装。同意安装则意味着授权所有被请求的权限。
获取权限
获取权限,是我们静态分析某个app的第一关,通过知道app所具有的权限,我们一般能够基本知道该app或许会有那些行为。
工具:目前已有多个工具可以静态检测Android app所具有的Permissions,这类工具有:aapt、apktool、androguard等等;