一种基于Android平台的细粒度权限控制方法\n技术领域\n[0001] 本发明属于智能手持移动终端安全控制领域,具体地说是一种基于Android平台的细粒度权限控制方法。\n背景技术\n[0002] 在智能手持移动终端操作系统领域,随着Android平台市场份额的不断攀升和应用领域的不断扩展,各种病毒和恶意软件已开始高度关注Android平台,对Android平台进行安全增强的重要性愈发明显。Android平台已有的安全机制可以保证用户安装应用程序后,该应用程序所执行的操作不会超出它申明的权限列表。但是Android这种“安装前申明权限,运行时判断权限”的机制存在如下问题:1)无法处理“给你米”恶意软件。“给你米”隐藏在热门应用软件中诱骗用户安装,并在程序中申明了大量未使用的权限,安装后自动在手机后台启动,并定期连接到“给你米”网站,下载各类恶意软件和恶意组件,下载的恶意软件和组件的运行权限为“给你米”事先申明的暂未使用权限;2)目前的权限授予方式是一个全选或者全不选的决定,即使用户发现了潜在危险的权限(例如“读取联系人”加上“访问网络”权限),但用户为了使用该应用程序,只能将应用程序申明的所有权限授予给应用程序,否则将无法安装该应用程序;3)目前的权限授予方式无法处理两个应用程序通过进程间通信泄漏隐私,例如应用程序A具备读取联系人权限,应用程序B具备访问网络权限,应用程序A通过进程间通信将读取的联系x信息发给应用程序B,应用程序B通过网络将联系人信息泄漏。目前市面上虽然已有一些产品可以完成权限的细粒度的控制功能,但是这些产品普遍需要用户参与权限授予的判定,这种人机交互的方式对于用户不太友好,也很难实施。\n发明内容\n[0003] 本发明解决的技术问题是一种基于Android平台的细粒度权限控制方法,可以实现单个应用程序的危险权限和多个应用程序组合的危险权限的控制。\n[0004] 为解决上述技术问题,本发明一种基于Android平台的细粒度权限控制方法,包括以下步骤:\n[0005] 步骤1、分别采集一组恶意应用程序及普通应用程序,扫描两组应用程序,获取每个应用程序的最小权限列表,所述每个最小权限列表中包括若干个权限值;\n[0006] 步骤2、构建恶意应用程序组的权限列表A和普通应用程序组的权限列表B,所述权限列表A由所有恶意应用程序的最小权限列表组成;所述权限列表B由所有普通应用程序的最小权限列表组成;\n[0007] 步骤3、通过比较恶意应用程序组的权限列表A和普通应用程序组的权限列表B的差异来确定应用程序危险权限组合列表C;并将该应用程序危险权限组合列表C配置到Android平台;所述应用程序危险权限组合列表C包括若干个权限列表;\n[0008] 步骤4、在Android平台上扫描所有需要安装的应用程序,获取相应应用程序的最小权限列表;\n[0009] 步骤5、当安装或运行相应的应用程序时,判断该应用程序或应用程序组合的最小权限列表中是否存在步骤3确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户执行相应操作;否则允许该应用程序安装或运行。\n[0010] 进一步地优选方案,本发明基于Android平台的细粒度权限控制方法中,所述步骤1中获取相应应用程序的最小权限列表,具体为:\n[0011] 1-1、在windows平台上解压相应应用程序安装包获取dex文件,并对该文件进行反编译得到应用程序源码;\n[0012] 1-2、对应用程序源码进行扫描,得到应用程序所使用的API接口列表;\n[0013] 1-3、利用API接口列表与Android权限的映射表来确定该应用程序的权限列表,并对该权限列表进行去重处理得到该应用程序的最小权限列表;\n[0014] 进一步地优选方案,本发明基于Android平台的细粒度权限控制方法中,所述步骤3中确定应用程序危险权限组合列表C,具体如下:\n[0015] 3-1 分别扫描恶意应用程序组的权限列表A和普通应用程序组的权限列表B,获取若干个恶意权限列表a,所述每个恶意权限列表中的权限值只同时出现在恶意应用程序组的权限列表A的一个最小权限列表且同时出现的次数大于阈值K;\n[0016] 3-2 获取若干个普通权限列表b,所述每个普通权限列表b中的权限值必须同时出现在恶意应用程序组的权限列表A中一个最小权限列表和普通应用程序组的权限列表B中一个最小权限列表中且同时出现的次数大于阈值K;\n[0017] 3-3 将步骤3-1获取的若干个恶意权限列表a与步骤3-2中获取若干个普通权限列表b进行两两组合,所述每一种组合为一个新的权限列表,这样所有的权限列表则组成应用程序危险权限组合列表C。\n[0018] 进一步地优选方案,本发明基于Android平台的细粒度权限控制方法中,所述步骤4中获取相应应用程序的最小权限列表,具体在扫描应用程序安装包时执行,具体为:\n[0019] 4-1、解压该应用程序安装包获取dex文件,并对该文件进行反编译得到应用程序源码;\n[0020] 4-2、对应用程序源码进行扫描,得到应用程序所使用的API接口列表;\n[0021] 4-3、利用API接口列表与Android权限的映射表来确定该应用程序的权限列表,并对该权限列表进行去重处理得到该应用程序的最小权限列表。\n[0022] 进一步地优选方案,本发明基于Android平台的细粒度权限控制方法中,所述步骤5判断该应用程序或应用程序组合的最小权限列表中是否存在步骤3确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,具体为:\n[0023] A、当安装相应应用程序时,判断该应用程序的最小权限列表中是否存在步骤\n3中确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户该应用程序存在安全隐患,弹出提示框提醒用户,让用户决定是否进行安装,如果用户选择继续安装,那么将该应用程序的最小权限列表写回到该应用程序的AndroidManifest.xml文件,如果用户选择放弃安装,则跳出安装过程;若不存在则允许该应用程序安装;\n[0024] B、当运行应用程序时,具体为:\n[0025] B1、应用程序运行到相应组件时获取与该组件通信的其他应用程序名称,并分别更新该应用程序和与之通信的其他应用程序的运行权限列表,其中,所有应用程序的运行权限列表的初始值为相应应用程序的最小权限列表;\n[0026] B2、判断该应用程序和与之通信的其他应用程序的运行权限列表中是否存在步骤\n3确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户该应用程序存在安全隐患,弹出提示框提醒用户,让用户决定是否继续运行,如果用户选择是,则继续运行该应用程序;如果用户选择否,则停止运行;若不存在则继续运行该应用程序。\n[0027] 本发明与现有技术相比具有以下显著的进步: (1)本发明通过获取每个应用程序的最小权限列表,克服了Android平台现有技术中“安装前申明权限,运行时判断权限”的机制存在的缺陷;(2)本发明通过采集恶意应用程序和普通应用程序并根据比较两者最小权限列表的差异确定危险权限组合列表,与现有技术中通过人为设定危险权限组合列表相比使得该危险权限组合列表更具有真实性提高了判断的安全系数;(3)本发明使用危险权限组合列表的方式来判断潜在的恶意行为,无需用户频繁干预,有着较好的人机交互特性。\n[0028] 下面结合附图和具体实施方式对本发明作进一步详细的描述。\n附图说明\n[0029] 图1为应用程序安装的四种方式图;\n[0030] 图2为应用程序安装时危险权限组合判断示意图;\n[0031] 图3为应用程序运行时危险权限组合判断示意图;\n[0032] 图4为应用程序安装的具体流程图;\n[0033] 图5为应用程序运行时更新权限列表的示意图。\n具体实施方式\n[0034] 本发明一种基于Android平台的细粒度权限控制方法,包括以下步骤:\n[0035] 步骤1、分别采集一组恶意应用程序及普通应用程序,扫描两组应用程序,获取每个应用程序的最小权限列表,所述每个最小权限列表中包括若干个权限值;具体为:\n[0036] 1-1、在windows平台上解压相应应用程序安装包获取dex文件,并对该文件进行反编译得到应用程序源码;\n[0037] 1-2、对应用程序源码进行扫描,得到应用程序所使用的API接口列表;\n[0038] 1-3、利用API接口列表与Android权限的映射表来确定该应用程序的权限列表,并对该权限列表进行去重处理得到该应用程序的最小权限列表;\n[0039] 步骤2、构建恶意应用程序组的权限列表A和普通应用程序组的权限列表B,所述权限列表A由所有恶意应用程序的最小权限列表组成;所述权限列表B由所有普通应用程序的最小权限列表组成;\n[0040] 步骤3、通过比较恶意应用程序组的权限列表A和普通应用程序组的权限列表B的差异来确定应用程序危险权限组合列表C;并将该应用程序危险权限组合列表C配置到Android平台;所述应用程序危险权限组合列表C包括若干个权限列表;具体为:\n[0041] 3-1 分别扫描恶意应用程序组的权限列表A和普通应用程序组的权限列表B,获取若干个恶意权限列表a,所述每个恶意权限列表中的权限值只同时出现在恶意应用程序组的权限列表A的一个最小权限列表且同时出现的次数大于阈值K;\n[0042] 3-2 获取若干个普通权限列表b,所述每个普通权限列表b中的权限值必须同时出现在恶意应用程序组的权限列表A中一个最小权限列表和普通应用程序组的权限列表B中一个最小权限列表中且同时出现的次数大于阈值K;\n[0043] 3-3 将步骤3-1获取的若干个恶意权限列表a与步骤3-2中获取若干个普通权限列表b进行两两组合,所述每一种组合为一个新的权限列表,这样所有的权限列表则组成应用程序危险权限组合列表C。\n[0044] 步骤4、在Android平台上扫描所有需要安装的应用程序,获取相应应用程序的最小权限列表;具体在扫描应用程序安装包时执行,具体为:\n[0045] 4-1、解压该应用程序安装包获取dex文件,并对该文件进行反编译得到应用程序源码;\n[0046] 4-2、对应用程序源码进行扫描,得到应用程序所使用的API接口列表;\n[0047] 4-3、利用API接口列表与Android权限的映射表来确定该应用程序的权限列表,并对该权限列表进行去重处理得到该应用程序的最小权限列表。\n[0048] 步骤5、当安装或运行相应的应用程序时,判断该应用程序或应用程序组合的最小权限列表中是否存在步骤3确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户执行相应操作;否则允许该应用程序安装或运行,具体为:\n[0049] A、当安装相应应用程序时,判断该应用程序的最小权限列表中是否存在步骤\n3中确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户该应用程序存在安全隐患,弹出提示框提醒用户,让用户决定是否进行安装,如果用户选择继续安装,那么将该应用程序的最小权限列表写回到该应用程序的AndroidManifest.xml文件,如果用户选择放弃安装,则跳出安装过程;若不存在则允许该应用程序安装,如图2所示;\n[0050] B、当运行应用程序时,具体为:\n[0051] B1、应用程序运行到相应组件时获取与该组件通信的其他应用程序名称,并分别更新该应用程序和与之通信的其他应用程序的运行权限列表,其中,所有应用程序的运行权限列表的初始值为相应应用程序的最小权限列表;\n[0052] B2、判断该应用程序和与之通信的其他应用程序的运行权限列表中是否存在步骤\n3确定的应用程序危险权限组合列表C中的任意一个权限列表内的所有权限值,若存在则提醒用户该应用程序存在安全隐患,弹出提示框提醒用户,让用户决定是否继续运行,如果用户选择是,则继续运行该应用程序;如果用户选择否,则停止运行;若不存在则继续运行该应用程序。\n[0053] 如图1所示,步骤2中用户安装应用程序可以通过下述四种方式进行安装:系统开机扫描特定路径安装、用户使用ADB(Android Debug Bridge)工具安装、用户使用包应用程序(Package Installer)安装、用户使用应用程序市场安装。四种应用程序安装方式均调用Android的包管理服务 (PackageManagerSerivie)的扫描应用程序安装包\n[0054] (scanPackageLI)方法,并将欲安装应用程序的路径作为参数传给\n(scanPackageLI)方法,在(scanPackageLI)方法内,执行最小权限列表算法,具体算法执行流程如图4所示;解压应用程序安装包,获得dex文件。应用程序安装文件为apk格式文件,apk格式文件是一种ZIP压缩格式的文件,其内容包括应用程序dex文件、资源文件、配置文件和签名验证文件。对应用程序安装文件进行解压缩获得应用程序dex文件classes.dex。反编译dex文件:Android系统应用程序运行在Dalvik虚拟机上,而虚拟机上可执行的文件格式为dex文件,选用第三方开源工具dedexer进行反编译,可以获取应用程序的类、函数等引用信息。获取调用的API列表:参照Android SDK类和函数字典,对反编译的结果可以获取应用程序所调用的所有API接口。权限映射:Android定义了所有系统接口所需要的权限,根据获取到的API接口,去查询这些接口的使用是否需要权限,如果需要映射为对应的权限。\n[0055] 如图3所示,步骤3中当应用程序运行时的相应组件在Android中四个最基本的组件是Activity、Service、ContentProvider、BroadcastReceiver,而组件间是通过Intent来传递信息的。这些组件可能在一个应用,也可能属于不同的应用,它们可能通过传递信息的方式达到传递权限的效果。因此在组件间交互的地方需要进行危险权限组合动态判定。\n[0056] 在请求方发出intent之后,系统根据intent去匹配相应的组件,在启动目标组件之前,需要进行权限检查。目标为Activity的组件在启动Activity (startActivityLocked)方法中,Service的组件在接收服务(retrieveServiceLocked)方法中,ContentProvider在检查内容提供器是否有权限(checkContentProviderPermissionLocked)方法中,BroadcastReceiver在广播Intent(broadcastIntentLocked)方法中检查权限。\n[0057] 在四个方法处分别调用更新应用程序运行权限updateAppPermissions方法,如图5所示,更新应用及相关联应用的权限列表,如果相关联应用的权限的组合构成危险权限组,弹出警告框让用户选择是否继续执行操作。\n实施例\n[0058] 危险权限组合的获得\n[0059] 从互联网上采集一组(30个)公认的恶意应用程序,例如被篡改的《植物大战僵尸》游戏、给你米类恶意应用程序等,从互联网上采集一组普通应用程序,例如从官方应用商店下载免费的热门游戏、工具类应用程序等,普通的应用程序最好与恶意应用程序相对应,即一个普通应用程序,一个类似的(甚至是直接通过普通应用程序修改而来的)恶意应用程序。扫描两组应用程序,获取相应应用程序的最小权限列表,通过比较两组应用程序的最小权限列表的差异来确定应用程序危险权限组合列表;并将该应用程序危险权限组合列表配置到Android平台,具体为:\n[0060] 1-1、在windows平台下使用unzip软件解压相应应用程序apk安装包获取dex文件,并使用反汇编工具dedex对该文件进行反编译得到应用程序源码;\n[0061] 1-2、对应用程序源码进行扫描,得到应用程序所使用的API接口列表;\n[0062] 1-3、利用API接口列表与Android权限的映射表来确定该应用程序的权限列表,并对该权限列表进行去重处理得到该应用程序的最小权限列表;\n[0063] 1-4、比较两组应用程序的最小权限列表的差异,确定应用程序危险权限组合列表:\n[0064] 例如:恶意应用程序组权限列表A为{<1,2>,<1,3,8>,<1,2,3,5>,<1,2,6>,<1,\n3,7>…}共6个恶意应用程序的最小权限列表,普通应用程序组权限列表B为{<1,3,5>, <1,3,4>, <1,3,6>,<2,7>…}共6个普通应用程序的最小权限列表,此处阈值K=3,恶意应用程序组权限列表中至少出现3次的有<1,2>和<1,3>,但由于权限值1,3在列表B中最小权限列表<1,3,5>中同时出现了;而<1,2>只在列表A的最小权限列表中同时出现,因此这里的恶意权限列表a为<1,2>;\n[0065] <1,3>在列表B的最小权限列表<1,3,5>, <1,3,4>和 <1,3,6>的中同时出现且在列表A的最小权限列表<1,3,8>,<1,2,3,5>和<1,3,7>中同时出现,同时至少出现3次,因此这里的普通权限列表b为<1,3>,去重处理后可以确定危险权限组合列表C为<1,2,\n3>。\n[0066] 比如:一般的联系人增强软件只具备完全访问(读取、修改、创建和删除)联系人的权限,而窃取隐私类恶意应用程序通常还具备完全的互联网权限,以便在后台偷偷地把窃取到的联系人信息发送到指定的服务器。因此,此时的危险权限组合为:读取联系人+完全的互联网访问。\n[0067] 安装从应用程序市场下载的应用程序\n[0068] 用户使用应用程序市场豌豆荚浏览选择安装应用程序“极品列车时刻表”,安装的过程中Android平台调用框架层的 PackageManagerSerivie的scanPackageLI方法,并将欲安装应用程序的路径作为参数传给scanPackageLI方法,在scanPackageLI方法内,执行最小权限列表算法,具体算法执行流程如图4所示;解压应用程序apk安装文件获得应用程序dex文件classes.dex。选用第三方开源工具dedexer反编译dex文件,可以获取应用程序的类、函数等引用信息。获取调用的API列表:参照Android SDK类和函数字典,对反编译的结果可以获取应用程序所调用的所有API接口。权限映射:Android定义了所有系统接口所需要的权限,根据获取到的API接口,去查询这些接口的使用是否需要权限,如果需要映射为对应的权限。最后得到了该应用程序所真正使用的最小权限列表,极品列车时刻表使用的权限只有一个,即“完全的互联网访问”权限。\n[0069] 判断“极品列车时刻表”应用程序是否存在危险权限组合\n[0070] 在安装“极品列车时刻表”应用程序时,判断该应用程序的最小权限列表中是否存在危险权限组合。由于极品列车时刻表应用程序只有一个“完全的互联网访问”权限,不存在危险权限组合,因此允许该应用程序继续安装。\n[0071] “极品列车时刻表”运行时的监控\n[0072] 在startActivityLocked 方 法、retrieveServiceLocked 方 法、checkContentProviderPermissionLocked方法、broadcastIntentLocked方法中分别检查Activity、Service、Content Provider、Broadcast Receiver的权限,上述四个方法处分别调用updateAppPermissions方法。“极品列车时刻表”运行时,调用了联系人应用程序,startActivityLocked方法调用updateAppPermissions方法,updateAppPermissions方法更新“极品列车时刻表”的权限列表为“完全的互联网访问”加“读取联系人”权限,而该权限属于危险权限组合,Android平台给出报警,由用户选择是否继续执行该应用程序,如果用户选择终止执行该应用程序,则“极品列车时刻表”应用程序终止执行。