一种支持Android运行时权限机制的第三方应用间通信访问控制方法与流程

文档序号:11387071阅读:576来源:国知局
一种支持Android运行时权限机制的第三方应用间通信访问控制方法与流程

本发明属于android系统访问控制领域,特别涉及一种支持android运行时权限机制的第三方应用间通信访问控制方法。



背景技术:

android是目前市场占有率最高的开源移动平台操作系统,系统采用了软件叠层架构,由定制的linux内核层、中间件层及应用层组成。其中,中间件层提供了大量的系统服务,例如该层中的activitymanager组件包含了对应用间通信进行强制访问控制的功能。

android系统通过沙箱机制隔离各应用的运行环境(签名相同的应用将运行于同一沙箱内,共享其中的资源与权限);同时,android权限机制利用由其定义的权限标签以及强制访问控制机制,控制应用对沙箱外资源的访问过程。当应用请求访问沙箱外的资源(包括系统api、其他应用等)时,android权限机制将根据被访问者所设定的访问权限限制要求,对该应用所拥有的权限进行检查,从而对该访问进行控制。

android系统将其定义的权限分为普通级(normal),危险级(dangerous),签名级(signature)和系统/签名级(signatureorsystem)。其中,普通权限与危险权限是第三方应用普遍使用的权限类别,而危险权限则进一步根据其功能相关性被分为若干组。由于危险权限涉及通话、短信等敏感服务,更易造成用户损失,成为了各类基于权限的保护技术的关注重点。此外,从android6.0marshmallow(apilevel23)开始,android系统引入了运行时权限机制。应用在安装时,其在manifest.xml文件中所声明的危险权限不会被立即授予,而是在应用运行时发出权限请求,由用户以权限组为单位自行决定是否授予。即当用户根据应用请求授予其某一危险权限时,系统将自动赋予该应用在manifest.xml文件中声明的其它同组权限。另外,在系统运行时,用户可以随时以组为单位对应用的危险权限进行授予或撤销操作。

android系统为应用提供了组件间通讯机制(inter-componentcommunitation,icc),为不同应用间的通信与功能重用提供了极大的便利,然而android权限机制由于依赖开发者自主制定的应用访问限制策略来实现对应用间通信的控制,因此留下了巨大的安全隐患:一个未被授予相关权限的恶意程序可以通过icc通信调用其它具有相关权限的应用的未受保护的接口,利用后者非法使用相关服务及数据,从而实现一类特定的权限提升攻击:混淆代理人攻击。在android市场中,由于第三方应用的开发者往往缺乏相应的安全意识,未对其应用设置适当的访问策略,因而十分容易成为混淆代理人攻击的对象。



技术实现要素:

本发明提出了一种支持android运行时权限机制的第三方应用间通信访问控制方法,其目的在于,通过增加对通信请求双方间的访问控制关系进行合法性计算,依据合法性计算结果对通信请求进行管理控制,从而避免android系统中发生的混淆代理人攻击的问题。

一种支持android运行时权限机制的第三方应用间通信访问控制方法,其特征在于,首先,通过在android系统中间件层扩展pms服务和扩展activitymanager中的icc监控器;其次,构建应用危险权限编码映射表、访问控制决策管理器及由其动态维护的访问控制信息库;接着,访问控制决策管理器实时查询访问控制信息库中通信请求中双方应用的运行权限,同时更新访问控制信息库,拒绝不具有客体应用危险权限的第三方应用所发起的通信请求,实现对android第三方应用间通信的访问控制;

所述扩展pms服务是指增加将应用程序最新的危险权限信息与应用uid打包发送至控制决策管理器的过程语句;所述扩展icc监控器是指对checkcomponentpermission()方法增加将通信双方的应用uid打包发送至控制决策管理器,并依据控制决策管理器的决策结果,返回是否允许本次通信;

所述访问控制信息库包括访问控制关系图和应用危险权限状态字集,其中,所述访问控制关系图用于记录应用间的合法通信关系的有向图,由邻接矩阵与十字链表构成,所述邻接矩阵记录应用间访问控制关系的合法性计算结果,所述十字链表记录应用间的访问控制关系;

所述应用危险权限状态字集为short数组,其中第i个数是uid为10000+i的应用的危险权限状态字;

pms为packagemanagerservices,icc为应用间组件间通信,uid为标识符;

所述危险权限编码映射表是指对具有危险权限的应用进行映射编码;

所述访问控制决策管理器包括应用权限信息管理模块和icc通信处理模块,

应用权限信息管理模块通过接收来自扩展的pms服务的消息,对访问控制信息库进行实时维护;icc通信处理模块同时通过扩展的icc通信监控器实时监控android系统中发起的icc通信。

所述危险权限编码映射表为hash表结构。提供了将危险权限字符串映射为一个特定整数编号的查询功能。其中,属于同一个group的权限将被分配至同一个状态字位号。

进一步地,在系统初次启动时,对访问控制信息库进行初始化,过程如下:

首先,应用权限信息管理模块在系统启动时检查访问控制信息库是否已经初始化,并返回结果;

若访问控制信息库尚未初始化,应用权限信息管理模块将扫描系统中所有应用的信息,并根据信息更新访问控制信息库中的应用危险权限状态字集,同时将访问控制关系图进行初始化,十字链表初始化为空,并将邻接矩阵初始化为合法性未计算状态。

进一步地,所述访问控制决策管理器实时查询访问控制信息库中通信请求中双方应用的运行权限,同时更新访问控制信息库的过程如下:

首先,依据发起通信请求的应用方查询邻接矩阵中通信请求双方的访问控制关系是否合法,返回查询结果;

若所查询的访问控制关系合法性尚未计算,则依据危险权限比较方法计算通信请求双方的访问控制关系的合法性,将合法性计算结果返回,并更新邻接矩阵,且在十字链表中增加通信请求双方间的访问控制关系节点。

进一步地,应用权限信息管理模块对访问控制信息库的维护过程如下:

1.1)在系统开机时对访问控制信息库进行检查,若访问控制信息库尚未初始化,则调用扩展的pms服务扫描应用信息,通过查询危险权限编码映射表将已安装应用的危险权限状态写入访问控制信息库中的应用危险权限状态字集中,并将访问控制关系图初始化;

1.2)当接收到扩展的pms服务传来的应用安装的消息时,获取待安装应用的所有权限更新引用危险权限状态字集。

进一步地,icc通信处理模块对通信请求进行监测过程如下:

2.1)当接收到来自扩展的icc通信管理机制的消息时,调用扩展后的pms服务,对存放通信双方应用的mpackage进行扫描,实时获取双方应用的flag及uid,依据flag和uid判断当前应用中存在非第三方应用,则不对此次通信实施访问限制,否则,进入步骤2.2);.

2.2)查询访问控制信息库,对邻接矩阵对应的两应用间的访问控制关系进行查找,若其值为1,则认为访问合法,不对本次访问进行限制,若值为0,则认为本次访问不合法,通知icc通信监控器拒绝本次访问,若值为-1或发生arrayindexoutofboundexception异常,则转入步骤2.3);

2.3)利用危险权限比较方法判断访问主体应用所拥有的危险权限集合是否完全包含访问客体的危险权限集合,若结果为true则允许本次访问,若结果为false则拒绝本次访问,并根据计算结果更新访问控制关系图。

进一步地,所述危险权限比较方法的具体过程如下:

3.1)对icc通信发起者应用a的危险权限状态字与icc通信接受者应用b的危险权限状态字进行位或运算,将所得的结果与a的危险权限状态字进行比较;

3.2)若步骤3.1)所得的结果为两者相等,则认为通信合法,返回true;否则,通信不合法,返回false。

所述危险权限以group的形式进行操作。在android系统中被划分为同组的危险权限在本方法中被视为同一权限进行操作。

采用危险权限状态字能够加快访问合法性的计算速度;

用十字链表+邻接矩阵来记录访问控制关系而不是直接采用十字链表,提高了邻接矩阵更新时的速度(通过查询十字链表避免了更新邻接矩阵的整行、整列);

当android系统中的应用进行以下操作时,访问控制决策管理器进行如下控制:

当应用安装时:

首先,对邻接矩阵中的应用对应所在的行列进行初始化,将行列上的所有项重新置为未计算的状态;接着,扫描该应用所拥有的所有权限,更新应用危险权限状态字;

当应用卸载时:

首先,查找访问控制信息库中的十字链表里该应用的对应行链表与列链表中的所有节点,对邻接矩阵中与十字链表中节点对应的项进行初始化,并删除十字链表中的与该应用有关的节点;接着,对该应用的危险权限状态字进行清零处理;

当应用权限增加时:

首先,在十字链表结构查找所有已记录的与该应用发生过icc通信请求的应用;

接着,根据在十字链表中查询到的所有结果,查找邻接矩阵中的对应位置的储存数据;

最后,对于查找到的存储数据中所有先前由该应用发起的不合法的访问所对应的访问控制关系,及所有先前以该应用为访问客体的合法的对应访问控制关系,采用危险权限比较方法,对查找到的访问控制关系的合法性进行重新计算并更新邻接矩阵,同时更新应用危险权限状态字;

当应用权限撤销时:

首先,在十字链表结构查找所有已记录的与该应用发生过icc通信请求的应用;

接着,根据在十字链表中查询到的所有结果,查找邻接矩阵中的对应位置的储存数据;

最后,对于所有查找到的先前合法的、由该应用发起的访问所对应的访问控制关系,及所有先前不合法的、以该应用为访问客体的对应访问控制关系,通过危险权限比较方法对查找到的访问控制关系的合法性进行重新计算并更新邻接矩阵,同时更新应用危险权限状态字。

有益效果

本发明提供了一种支持android运行时权限机制的第三方应用间通信访问控制方法,该方法根据通信双方的所具有的危险权限组对android第三方应用间的通信进行访问控制,从而防范企图利用第三方应用危险权限的混淆代理人攻击,为第三方应用及其相应危险权限提供保护,其优点主要体现在以下几个方面:

1)通过基于访问者与被访问者的实时权限进行访问控制的规则,实现了在权限动态变更条件下的访问控制,避免了因权限变化而导致的权限漏洞与权限传递;

2)以组的形式对危险权限进行比较的方法符合用户的意图与android权限系统的规则设计,可以有效降低访问控制的误报率;

3)通过严格限制应用间通信的权限要求,阻止恶意应用通过将存在漏洞的第三方应用作为混淆代理人从而获取其所没有的权限,降低应用间访问导致混淆代理人攻击的可能性,从而提高系统的安全性;

4)实现了android6.0以上版本系统动态权限技术下对权限的实时监控及访问控制关系的动态更新;

5)通过运用邻接矩阵与十字链表对图结构进行存储,并利用已知的权限信息减少权限更新时的重复计算量,使得访问控制关系图的读取、更新的时间复杂度分别降至o(1)与o(m),运行效率大幅提高。

附图说明

图1是本发明所述方法的流程示意图;

图2是本发明中扩展pms服务的主要工作流程示意图;

图3是本发明中访问控制决策管理器的主要工作流程示意图。

具体实施方式

以下将结合附图和实例对本发明做进一步的说明。

如图1所示,一种支持android运行时权限机制的第三方应用间通信访问控制方法,首先,在android系统中间件层扩展packagemanagerservices(pms)服务并扩展activitymanager中的应用间组件间通信(icc)监控器,其次,构建应用危险权限编码映射表、访问控制决策管理器及由其动态维护的访问控制信息库,此后,访问控制决策管理器将实时查询访问控制信息库中已保存的计算结果或进一步比较通信双方运行时权限的方式,拒绝不具有客体应用危险权限的第三方应用所发起的通信请求,实现对android第三方应用间通信的访问控制。

所述扩展pms服务是指在若干个系统用于处理应用安装、删除及权限变化的函数中分别增加将应用程序最新的危险权限信息与应用uid打包发送至控制决策管理器的过程语句,在本例中修改的系统函数为installnewpackageli()、removepackagelpw()、grantruntimepermission()、revokeruntimepermission()。所述扩展icc监控器是指对checkcomponentpermission()方法增加将通信双方的应用uid打包发送至控制决策管理器、并依据控制决策管理器的决策结果,返回是否允许本次通信的过程语句。

如图2所示,所述访问控制信息库中包括访问控制关系图、应用危险权限状态字集。其中,所述访问控制关系图用于记录应用间的合法通信关系的有向图,由二维数组与十字链表构成,所述邻接矩阵用于记录应用间访问控制关系的合法性计算结果,十字链表用于标记应用与应用间的访问关系是否被计算过。所述应用危险权限状态字集为short数组,其中第i个数是uid为10000+i的应用的危险权限状态字,反映了应用所拥有的危险权限。

为了节约存储资源,在本例具体实现时限定二维数组的大小为1000乘1000,即仅对uid在10000以上、11000以内的应用的访问关系的计算结果进行存储,而对超过此范围的应用的访问关系每次进行重新计算;而应用危险权限状态字集为short数组,其中第i个数是uid为10000+i的应用的危险权限状态字,反映了应用所拥有的危险权限。在本例中,我们以其每一个二进制位对应一个dangerous权限组的拥有情况,其值为1表示其拥有对应的权限组权限,为0表示其不具有对应的权限组权限或该位不存在对应的危险权限组。

在本例中访问控制信息库按照以下要求实现:

1.1)为了持久化存储信息库,信息库继承java提供的serializable接口,将其数据通过java输入输出流中的fileoutputstream方法以序列化的形式持久存储于文件中。

1.2)以应用的uid-android.os.process.first_application_uid作为应用在访问控制关系图中的节点编号,用于之后的查询与修改操作。

1.3)访问控制关系图中邻接矩阵主要用于提供对第三方应用的访问控制关系的查询。其中中的每一项的取值为合法、不合法或尚未计算过。为方便表述,我们在下文中以0、1和-1分别表示对应uid为10000+x和10000+y的id之间的访问不合法、访问合法或访问合法性未知。

1.4)访问控制关系图中的十字链表结构用于提高查找、修改邻接矩阵中项目的执行效率。结构中存储的形如(x,y)的节点表示uid为10000+y的应用对uid为10000+y的应用的访问合法性已经计算过并记录于步骤2)中所述的邻接矩阵结构中。

所述危险权限编码映射表是指对具有危险权限的应用进行映射编码。在本例中,使用hash表结构实现编码映射。

如图3所示,所述访问控制决策管理器包括应用权限信息管理模块与icc通信处理模块,其中应用权限信息管理模块通过接收来自扩展的pms服务的消息,对访问控制信息库进行实时维护;icc通信处理模块同时通过扩展的icc通信监控器实时监控android系统中发起的icc通信。

应用权限信息管理模块通过以下步骤维护访问控制信息库:

2.1)在系统开机时对访问控制数据数据库进行检查,若访问控制信息库尚未初始化,则调用扩展的pms服务对存放应用相关信息的mpackage进行扫描,通过查询危险权限编码映射表将已安装应用的危险权限状态字写入访问控制信息库中的应用危险权限状态字集中,将十字链表结构清空,并将邻接矩阵全部置-1。

2.2)当接收到扩展的pms服务传来的应用安装的消息时,对访问控制信息库中的邻接矩阵中的对应行列进行写入-1的操作,该过程中若发生越界操作无需额外处理。并从mpackage中读取该应用所拥有的危险权限列表,针对其拥有的每一危险权限(组),通过查找危险权限编码映射表得到该权限组所对应的编号,将该应用的危险权限状态字的对应位修改为1。

2.3)当接收到扩展的pms服务传来的应用卸载的消息时,查找访问控制信息库中的十字链表里的对应行链表与列链表中的所有节点,对邻接矩阵中与十字链表中节点对应的项进行置-1操作,并删除十字链表中的这些节点,该过程中若发生越界操作无需额外处理。此后对该应用的危险权限状态字进行清零处理。

2.4)当接收到扩展的pms服务传来的应用权限增加的消息时,通过十字链表结构查找所有已记录的与该应用间发生过icc通信请求的应用,查找邻接矩阵中的对应位置的储存数据,对于所有取值为0的(即当前认定为不合法的)、由该应用发起的访问所对应的访问控制关系,及所有取值为1的(即当前认定为合法的)、以该应用为访问客体的对应访问控制关系,通过危险权限比较方法与危险权限状态字集对其进行重新计算并更新邻接矩阵,并将应用危险权限状态字的对应编号位置相应修改为1或0。

2.5)当接收到扩展的pms服务传来的应用权限撤销的消息时,通过十字链表结构查找所有已记录的与该应用间发生过icc通信请求的应用,查找邻接矩阵中的对应位置的储存数据,对于所有取值为1的(即当前认定为合法的)由该应用发起的访问所对应的访问控制关系,及所有取值为0的(即当前认定为不合法的)以该应用为访问客体的对应访问控制关系,通过危险权限比较方法与危险权限状态字集对其进行重新计算并更新邻接矩阵,并将应用危险权限状态字的对应编号位置相应修改为1或0。

icc通信处理模块对通信请求进行监控并实施访问控制决策的过程如下:

3.1)当接收到来自扩展的icc通信管理机制的消息时,调用扩展的pms服务,对存放应用相关信息的mpackage进行扫描,实时获取双方应用的的flag及uid,若根据flag和uid判断当前应用中存在非第三方应用,则不对此次通信实施访问限制,否则,进入步骤3.2)。

3.2)查询访问控制信息库,对其中访问控制关系矩阵内对应的两应用间的访问控制关系进行查找。若其值为1,则认为访问合法,不对本次访问进行限制,若值为0,则认为本次访问不合法,通知icc通信监控器拒绝本次访问,若值为-1或发生arrayindexoutofboundexception异常,则转入步骤4)

3.3)利用危险权限比较方法判断访问主体应用所拥有的危险权限集合是否完全包含访问客体的危险权限集合,若结果为true则允许本次访问,若结果为false则拒绝本次访问,并根据计算结果更新访问控制关系图

所述的危险权限比较方法按以下步骤进行:

4.1)对icc通信发起者应用a的危险权限状态字与icc通信接受者应用b的危险权限状态字进行位或运算,将所得的结果与a的危险权限状态字进行比较。

4.2)若步骤1)所得的结果为两者相等,则意味着a拥有b所拥有的全部危险权限,则认为通信合法,返回true;否则返回false。

为了提高访问控制决策的效率,对所述危险权限以group的形式进行操作。在android系统中被划分属于同组的危险权限在本方法中被视为同一权限进行操作。

所述扩展的icc通信监控器实现了对android系统中发起的icc通信的实时监控,扩展后的机制将把本次通信双方的uid信息打包发送至访问控制决策管理器并请求访问控制决策管理器对第三方应用间的icc通信进行决策,从而根据访问控制决策管理器的决策阻止通信发起方所拥有的危险权限(组)少于通信对象拥有的危险权限(组)的icc通信,具体按以下要求实现:

5.1)当应用发起icc访问请求时,系统将调用checkcomponentpermission()方法对访问合法性进行验证;

5.2)被修改的checkcomponentpermission()方法将在通常的合法性判断规则之后,将将要通信的双方应用的uid信息打包发送至访问控制决策管理器,请求访问控制决策管理器进行进一步的访问关系合法性计算;

5.3)根据根据访问控制决策管理器返回的决策结果,若允许本次通信则在checkcomponentpermission()中返回允许通信(即android系统中的permission_granted常数),否则返回拒绝通信(即permission_denied常数)。

5.4)若checkcomponentpermission()返回访问合法,则系统将允许本次icc通信,否则拒绝本次通信。

当android系统中的应用进行以下操作时,访问控制决策管理器进行如下控制:

当应用安装时:

首先,对邻接矩阵中的应用对应所在的行列进行初始化,将行列上的所有项重新置为未计算的状态;接着,扫描该应用所拥有的所有权限,更新应用危险权限状态字;

当应用卸载时:

首先,查找访问控制信息库中的十字链表里该应用的对应行链表与列链表中的所有节点,对邻接矩阵中与十字链表中节点对应的项进行初始化,并删除十字链表中的与该应用有关的节点;接着,对该应用的危险权限状态字进行清零处理;

当应用权限增加时:

首先,在十字链表结构查找所有已记录的与该应用发生过icc通信请求的应用;

接着,根据在十字链表中查询到的所有结果,查找邻接矩阵中的对应位置的储存数据;

最后,对于查找到的存储数据中所有先前由该应用发起的不合法的访问所对应的访问控制关系,及所有先前以该应用为访问客体的合法的对应访问控制关系,采用危险权限比较方法,对查找到的访问控制关系的合法性进行重新计算并更新邻接矩阵,同时更新应用危险权限状态字;

当应用权限撤销时:

首先,在十字链表结构查找所有已记录的与该应用发生过icc通信请求的应用;

接着,根据在十字链表中查询到的所有结果,查找邻接矩阵中的对应位置的储存数据;

最后,对于所有查找到的先前合法的、由该应用发起的访问所对应的访问控制关系,及所有先前不合法的、以该应用为访问客体的对应访问控制关系,通过危险权限比较方法对查找到的访问控制关系的合法性进行重新计算并更新邻接矩阵,同时更新应用危险权限状态字。

以上内容是本发明具体实施方式的进一步详细说明,不能认定本发明的具体实施方式仅限于此,对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单的推演或替换,都应当视为本发明由所提交的权利要求书确定的专利保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1