一种识别过权应用程序的方法
技术领域
本发明属于计算机技术领域,尤其涉及一种识别过权应用程序的方法。
背景技术
目前,应用程序的功能越来越多样化,不同的权限请求变得越来越普遍,然而当前许多权限管理平台已无法满足复杂的权限检查要求。公开号为CN109670768A的专利公开了一种多业务域的权限管理方法,应用于权限管理平台,权限管理平台包括多个业务域子系统,当接收到客户端发送的访问请求时,调取本地数据库中存储的用户信息表并基于访问请求所携带的用户账号和密码进行用户验证;当验证通过时,获取用户账号对应的用户信息,并基于用户信息,确定用户请求访问的业务域子系统以及在该业务域子系统下赋予的角色和权限项;将确定的业务域子系统、角色和权限项返回至客户端,以供用户进行访问和使用。公开号为CN109447764A的专利公开了一种移动互联网商城管理平台系统,由商品管理平台、促销管理平台、订单管理平台、广告管理平台、报表统计平台、会员管理平台、权限管理平台、系统设置平台、数据库管理平台、补单管理平台组成;所述权限管理平台包括用于查看当前会员权限、重新分配会员权限以及切换用户状态的管理员列表管理模块、用于查询、删除日志列表的管理员日志管理模块和用于添加角色并选择所述角色需开通权限的角色管理模块;所述角色管理模块与所述管理员列表管理模块相通讯。
现有的权限管理平台存在如下一些缺陷:
1、目前的权限管理平台对于权限设置过于粗粒度,许多权限不能细粒粒度地划分及分配,导致某些应用程序需要请求冗余的权限才能完成工作。
2、目前的权限管理平台几乎没有对权限有审查制度,这些平台是基于默认应用程序提供商都是诚实的前提来进行权限分配。
3、目前的权限管理平台存在静态化管理模式,一旦一个应用程序被授予某种权限,应用程序则能够永久地拥有权限,直到用户特意终止权限的续签。
4、目前的权限管理平台缺乏智能地管理机制,每个应用所有的权限都需要用户一一去判断及授权,极大地增加了用户的负担。
5、目前的权限管理平台在划分权限的时候不能做到去耦合,不同权限之间可能存在线性或非线性的相关关系;一旦一个应用程序被拒绝某权限A,它能够通过权限B和C去完成权限A才能完成的工作。
发明内容
本发明的目的在于提供一种能够克服上述技术问题的识别过权应用程序的方法,本发明所述方法包括以下步骤:
步骤1、创建一个应用程序控制流图CFG生成模块;
创建一个应用程序数据流图DFG生成模块;
创建一个基于自然语言处理NLP的应用程序简介解析模块;
创建一个基于人工智能分类器ML/AI的过权判断模块;
创建一个总体过权判断模块;
应用程序CFG生成模块能够支持源代码和二进制两种控制流图生成模式;
应用程序DFG生成模块能够支持源代码和二进制两种数据流图生成模式;
步骤1.1、基于NLP的应用程序简介解析模块能够支持源至少中文或英文的解析;
步骤1.2、基于ML/AI的过权判断模块支持控制流图和数据流图输出的数据作为输入;
步骤1.3、总体过权判断模块将自然语言处理模块和卷积神经网络处理模块输出结果进行综合判断。
步骤2、在平台运行阶段,应用程序CFG生成模块运行步骤如下:
步骤2.1、接收一个应用程序作为输入;
步骤2.2、如输入的应用程序为源代码模式,模块则会判断源代码为哪种编程语言编写,并调用对应解析器进行语义解析;
步骤2.3、在解析器成功解析出所有的语义结构后,模块将会寻找所有的跳转语句,例如条件判断语句,循环语句;
步骤2.4、模块会根据跳转语句将代码分成代码块;
步骤2.5、模块将会用深度优先搜索算法将代码块连成树状图,每个代码块为图中的一个节点;
步骤2.6、上述步骤2.2中当输入的应用程序为二进制模式,模块则会通过二进制头判断二进制哪种指令集(如x86,ARM,或MIPS),在调用相应的解析器对二进制进行反汇编解析;
步骤2.7、在解析器成功解析出所有的语义结构后,模块将会寻找所有的跳转语句,例如JMP,BR;
步骤2.8、模块会根据跳转语句将代码分成代码块;
步骤2.9、模块将会用深度优先搜索算法将代码块连成树状图,每个代码块为图中的一个节点,此树状图即为CFG;
步骤2.10、模块将输出生成的CFG。
步骤3、在平台运行阶段,应用程序DFG生成模块运行步骤如下:
步骤3.1、接收一个应用程序作为输入;
步骤3.2、如输入的应用程序为源代码模式,模块则会判断源代码为哪种编程语言编写,并调用对应解析器进行语义解析;
步骤3.3、在解析器成功解析出所有的语义结构后,模块将会寻找所有的变量;
步骤3.4、模块将会用利用污点追踪算法将数据所在的代码模块连城树状图,每个代码块为图中的一个节点;
步骤3.5、上述步骤3.2中,当输入的应用程序为二进制模式,模块则会通过二进制头判断二进制哪种指令集(如x86,ARM,或MIPS),在调用相应的解析器对二进制进行反汇编解析;
步骤3.6、在解析器成功解析出所有的语义结构后,模块将会寻找所有的变量;
步骤3.7、模块将会用利用污点追踪算法将数据所在的代码模块连成树状图,每个代码块为图中的一个节点,树状图即为DFG;
步骤3.8、模块将输出生成的DFG。
步骤4、在平台运行阶段,基于NLP的应用程序简介分析模块运行步骤如下:
步骤4.1、接收一个应用程序的介绍作为输入;
步骤4.2、判断介绍的语言种类,并判断语言类别,调用相应的语言解析器,将语句中的各个部分按照语言学的语法进行分割(如主谓宾);
步骤4.3、训练一个NLP算法识别判断简介中应用程序所需要的权限;NLP算法能够是但不局限于循环神经网络(RNN)、隐式狄利克雷分布(LDA)算法;
步骤4.4、判断完成后,模块会将判断出的所需权限按照向量输出,向量由n个二进制(0或1)数字所组成,如果第i个数字为1则表示应用程序需要第i个权限,0则表示不需要;n表示权限的总数。
步骤5、在平台运行阶段,基于ML/AI的过权判断模块运行步骤如下:
步骤5.1、接收一个应用程序的CFG和DFG作为输入,CFG和DFG由上述CFG生成模块和DFG生成模块所生成;
步骤5.2、当输入为CFG,模块将每个CFG中的节点提取k个特征,这些特征能够是但不仅限于赋值指令的数量,定义指令的数量,系统调用的数量,从而形成m*k维特征举证;m为节点的数量;
步骤5.3、模块对CFG求出m*m维邻接矩阵,并对邻接矩阵做必要的转化,这些转换能够是但不局限于改变再置、SVD分解、Gram-Schmidt正交化;
在平台运行阶段,总体过权判断模块运行如下:
步骤5.4、当输入为DFG,模块将每个DFG中的节点提取q个特征,这些特征能够是但不仅限于数据类型、数据所在内存中占有空间、数据有效范围、数据有效时间,从而形成m*q维特征举证;此处m为节点的数量;
步骤5.5、模块对DFG求出m*m维邻接矩阵,并对邻接矩阵做必要的转化,这些转换能够是但不局限于改变再置、SVD分解、Gram-Schmidt正交化;
步骤5.6、模块将步骤5.2与步骤5.3及步骤5.4与步骤5.5产生的矩阵做矩阵乘法,得到新的矩阵,并将新的矩阵作为输入放进ML/AI模型进行判断;
步骤5.7、判断完成后,模块会将判断出的所需权限按照向量输出,向量由n个二进制(0或1)数字所组成,如果第i个数字为1则表示应用程序需要第i个权限,0则表示不需要;n表示权限的总数。
步骤6、在平台运行阶段,总体过权判断模块运行步骤如下:
步骤6.1、模块将上述NLP模块及ML/AI模块最终输出的向量作为输入;
步骤6.2、模块对这两向量做差异分析,差异分析能够是但不仅限于L1/L2距离、向量差乘、熵、均方误差;出现差异大于一个阈值,则阻止程序运行并通知用户,否则运行程序执行;阈值能够根据不同系统场景动态调节。
本发明所述方法相对现在的权限管理系统的优越效果在于:
1、本发明所述方法允许更灵活的权限分配机制,相比起以往的权限管理系统只是简单查验系统配置文件如Manifest/XML,从源代码/二进制入手更灵活地让用户或安全管理员定义权限数量。
2、本发明所述方法打破以往的权限静态化管理模式,每个应用程序每次运行都会经过一次审查,使得应用程序不能永久获得某一权限。
3、提供了一直先进的权限审查机制。
4、提供了智能管理机制,加入了深度学习和机器学习模块,从而对权限更准确更智能地进行管理。
5、本发明的过权检测方法全程全自动执行,并因为深度学习加入的原因具有自我进化自我学习的功能,极大程度地降低了用户的压力。
附图说明
图1是本发明所述方法的识别过权应用程序的平台的工作流程图;
图2是本发明所述方法的应用程序CFG生成模块的工作流程图;
图3是本发明所述方法的应用程序DFG生成模块的工作流程图;
图4是本发明所述方法的基于NLP的应用程序简介解析模块的工作流程图;
图5是本发明所述方法的基于ML/AL的过权判断模块的工作流程图;
图6是本发明所述方法的总体过权判断模块的工作流程图;
图7是本发明所述方法的实施例1的流程图;
图8是本发明所述方法的实施例2的流程图。
具体实施方式
下面结合附图对本发明的实施方式进行详细描述。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本说明书中的“或”仅是一种表示逻辑关联的连接词,表示存在三种关系,比如,“A或B”表示单独存在A,单独存在B,以及A和B同时存在三种状况。
现在结合附图对本发明作进一步详细的说明,这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
本发明所述方法如图1所示,包括以下步骤:
创建一个如图2所示的应用程序控制流图CFG生成模块;
创建一个如图3所示的应用程序数据流图DFG生成模块;
创建一个如图4所示的基于自然语言处理NLP的应用程序简介解析模块;
创建一个如图5所示的基于人工智能分类器ML/AI的过权判断模块;
创建一个总体过权判断模块;
如图2所示的应用程序CFG生成模块能够支持源代码和二进制两种控制流图生成模式。
如图3所示的应用程序DFG生成模块能够支持源代码和二进制两种数据流图生成模式。
如图4所示的基于NLP的应用程序简介解析模块能够支持源至少中文或英文的解析。
如图5所示的基于ML/AI的过权判断模块支持控制流图和数据流图输出的数据作为输入。
如图6所示的总体过权判断模块将自然语言处理模块和卷积神经网络处理模块输出结果进行综合判断。
在平台运行阶段,应用程序CFG生成模块运行步骤如下:
步骤(1)接收一个应用程序作为输入。
步骤(2)如输入的应用程序为源代码模式,模块则会判断源代码为哪种编程语言编写,并调用对应解析器进行如图2所示的语义解析。
步骤(3)在解析器成功解析出所有的语义结构后,模块将会寻找所有的跳转语句,例如条件判断语句,循环语句。
步骤(4)之后,模块会根据如图2所示的跳转语句将代码分成代码块。
步骤(5)之后,模块将会用如图2所示的深度优先搜索算法将代码块连成树状图,每个代码块为图中的一个节点。
步骤(6)上述步骤(2)中,当输入的应用程序为二进制模式,模块则会通过二进制头判断二进制哪种指令集(如x86,ARM,或MIPS),在调用相应的解析器对二进制进行反汇编解析。
步骤(7)在解析器成功解析出所有的语义结构后,模块将会寻找所有的跳转语句,例如JMP,BR。
步骤(8)之后,模块会根据跳转语句将代码分成代码块。
步骤(9)之后,模块将会用深度优先搜索算法将代码块连成树状图,每个代码块为图中的一个节点,此树状图即为CFG。
步骤(10)之后,模块将输出生成的CFG。
在平台运行阶段,如图3所示的应用程序DFG生成模块运行步骤如下:
步骤(1)接收一个应用程序作为输入。
步骤(2)当输入的应用程序为源代码模式,模块则会判断源代码为哪种编程语言编写,并调用如图3所示的对应解析器进行语义解析。
步骤(3)在解析器成功解析出所有的语义结构后,模块将会寻找所有的变量。
步骤(4)之后,模块将会用利用如图3所示的污点追踪算法将数据所在的代码模块连城树状图,每个代码块为图中的一个节点。
步骤(5)上述步骤(2)中,当输入的应用程序为二进制模式,模块则会通过二进制头判断二进制哪种指令集(如x86,ARM,或MIPS),在调用相应的解析器对二进制进行反汇编解析。
步骤(6)在解析器成功解析出所有的语义结构后,模块将会寻找所有的变量。
步骤(7)之后,模块将会用利用如图3所示的污点追踪算法将数据所在的代码模块连成树状图,每个代码块为图中的一个节点,此树状图即为DFG。
步骤(8)之后,模块将输出生成的DFG。
在平台运行阶段,基于NLP的应用程序简介分析模块运行步骤如下:
步骤(1)接收一个应用程序的介绍作为输入。
步骤(2)判断介绍的语言种类,并判断语言类别,调用如图4所示的相应的语言解析器,将语句中的各个部分按照语言学的语法进行分割(如主谓宾)。
步骤(3)训练一个NLP算法识别判断简介中应用程序所需要的权限;NLP算法能够是但不局限于循环神经网络(RNN)、隐式狄利克雷分布(LDA)算法。
步骤(4)判断完成后,模块会将判断出的所需权限按照向量输出,如图4所示,向量由n个二进制(0或1)数字所组成,当第i个数字为1则表示应用程序需要第i个权限,0则表示不需要;n表示权限的总数。
在平台运行阶段,如图5所示的基于ML/AI的过权判断模块:
步骤(1)接收一个应用程序的CFG和DFG作为输入,CFG和DFG由上述CFG生成模块和DFG生成模块所生成。
步骤(2)如图5所示,当输入为CFG,模块将每个CFG中的节点提取k个特征,这些特征能够是但不仅限于赋值指令的数量,定义指令的数量,系统调用的数量,从而形成m*k维特征举证;m为节点的数量。
步骤(3)之后,如图5所示,模块对CFG求出m*m维邻接矩阵,并对邻接矩阵做必要的转化,这些转换能够是但不局限于改变再置、SVD分解、Gram-Schmidt正交化。
在平台运行阶段,总体过权判断模块运行如下:
步骤(4)如图5所示,当输入为DFG,模块将每个DFG中的节点提取q个特征,这些特征能够是但不仅限于数据类型、数据所在内存中占有空间、数据有效范围、数据有效时间,形成m*q维特征举证;m为节点的数量。
步骤(5)之后,如图5所示,模块对DFG求出m*m维邻接矩阵,并对邻接矩阵做必要的转化,这些转换能够是但不局限于改变再置、SVD分解、Gram-Schmidt正交化。
步骤(6)之后,如图5所示,模块将步骤(2)与步骤(3)及步骤(4)与步骤(5)产生的矩阵做矩阵乘法,得到新的矩阵,并将新的矩阵作为输入放进ML/AI模型进行判断。
步骤(7)判断完成后,如图5所示,模块会将判断出的所需权限按照向量输出,向量由n个二进制(0或1)数字所组成,当第i个数字为1则表示应用程序需要第i个权限,0则表示不需要;n表示权限的总数。
在平台运行阶段,总体过权判断模块运行步骤如下:
步骤(1)如图6所示,模块将上述NLP模块及ML/AI模块最终输出的向量作为输入。
步骤(2)之后,如图6所示,模块对这两向量做差异分析,差异分析能够是但不仅限于L1/L2距离、向量差乘、熵、均方误差;差异大于一个阈值,则阻止程序运行并通知用户,否则运行程序执行;阈值能够根据不同系统场景动态调节。
下面用两个实施例结合附图对本发明的过权应用程序识别平台加以说明。
实施例1:
在实施例1中,安卓手机应用被作为例子阐述本发明具体如果强化安卓操作系统使得用户免受过权安卓应用的干扰。
在实施例1中,本发明所展示平台能够运行于安卓操作系统内核层面亦能够运行于第三方云分析平台。
如图7所示,实施例2总共分为以下10个步骤:
步骤100:如图1所示,本发明所展示平台会获取要获取要检查的安卓应用程序代码,若代码为源代码,则直接前往步骤120;若代码为安卓二进制代码,即APK,则继续顺序执行步骤110。
步骤110:若代码为APK形式,平台则用安卓逆向工程工具如APKTool及dex2jar的工具将APK变成伪源代码模式。
步骤120:平台用Java/Kotlin解析器对应用程序源代码进行解析,并根据跳转语句将程序源代码分成不同代码块。
步骤130:利用如图2所示的深度优先搜索算法对步骤120所产生的代码块进行有向连接,生成CFG。
步骤140:利用如图3所示的污点追踪算法对步骤120所产生的代码块进行有向连接,生成DFG。
步骤150:如图5所示,平台对步骤130和140所生成的CFG和DFG分别作不同的特征提取,对应生成CFG特征矩阵及DFG矩阵,并求出CFG邻接矩阵和DFG邻接矩阵,并对邻接矩阵做必要的转化。
步骤160:如图5所示,平台接来将CFG特征矩阵和CFG邻接矩阵做矩阵乘积,DFG特征矩阵和DFG邻接矩阵做矩阵乘积,并把两个乘积所得矩阵合并,变成一个庞大矩阵。
步骤170:平台接着把步骤160所得的庞大矩阵作为如图3所示的CNN模型的输入,让CNN判断应用程序所需细粒度权限(如需后台访问用户相册),并以向量形式输出。
步骤180:同时,平台对于应用程序的描述(在下载商城处)进行分析,用如图4所示的NLP算法判断应用程序所需细粒度权限,仅在用户使用应用时访问用户相册,并以向量形式输出。
步骤190:之后,如图6所示,平台根据步骤170及180输出结果比较差异性,当发现差异(如需后台访问用户相册与仅在用户使用本应用时访问用户相册描述不符),则发出警告;当平台在系统内核层面运行,则直接停止程序运行并弹出警告指示用户;当平台在云端运行,则通过推送通知用户。
至此,实施例1执行结束。
上述流程的顺序不是绝对的,当两个步骤之间没有互相依赖,允许以任意互相调换顺序。
在实施例2中,智能家居应用程序被作为例子阐述本发明具体如果强化智能家居云平台使得用户免受过权智能家居应用的干扰。
在实施例2中,本发明所展示平台能够运行于智能家居控制云IFTTT平台。
如图8所示,实施例2总共分为以下新消息9个步骤:
步骤200:首先,如图1所示,平台会获取需要获取、需要检查的智能家居应用程序代码,本步骤的IFTTT平台均采用即时编译系统JIT,应用程序代码皆为源代码形式。
步骤210:平台用Java/Groovy解析器对应用程序源代码进行解析,并根据跳转语句将程序源代码分成不同代码块。
步骤220:利用图2所示的深度优先搜索算法对步骤210所产生的代码块进行有向连接,生成CFG。
步骤230:利用图3所示的污点追踪算法对步骤210所产生的代码块进行有向连接,生成DFG。
步骤240:如图5所示,平台对步骤220和230所生成的CFG和DFG分别作不同的特征提取,对应生成CFG特征矩阵及DFG矩阵,并求出CFG邻接矩阵和DFG邻接矩阵,并对邻接矩阵做必要的转化。
步骤250:如图5所示,平台将CFG特征矩阵和CFG邻接矩阵做矩阵乘积,DFG特征矩阵和DFG邻接矩阵做矩阵乘积,并把两个乘积所得矩阵合并,变成一个庞大矩阵。
步骤260:如图5所示,平台接着把步骤250所得的庞大矩阵作为CNN模型的输入,让CNN判断应用程序所需细粒度权限(如需访问用户智能门锁),并以向量形式输出。
步骤270:同时,如图4所示,平台对于应用程序的描述进行分析,用NLP算法判断应用程序所需细粒度权限(如仅需访问用户智能灯泡),并以向量形式输出。
步骤280:之后,如图6所示,平台根据步骤260及270输出结果比较差异性,如发现差异(如需访问用户智能门锁与仅需访问用户智能灯泡的描述不符),则发出警告并在IFTTT云端平台停止应用程序的运行,并通过推送通知用户。
至此,实施例2执行结束。
上述流程的顺序不是绝对的,当两个步骤之间没有互相依赖,允许以任意互相调换顺序。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的范围内,能够轻易想到的变化或替换,都应涵盖在本发明权利要求的保护范围内。