发明内容
本发明的目的在于提供一种能够克服上述技术问题的识别过权应用程序的方法,本发明所述方法包括以下步骤:
步骤1、创建一个应用程序控制流图CFG生成模块;
创建一个应用程序数据流图DFG生成模块;
创建一个基于自然语言处理NLP的应用程序简介解析模块;
创建一个基于人工智能分类器ML/AI的过权判断模块;
创建一个总体过权判断模块;
应用程序CFG生成模块能够支持源代码和二进制两种控制流图生成模式;
应用程序DFG生成模块能够支持源代码和二进制两种数据流图生成模式;
步骤1.1、基于NLP的应用程序简介解析模块能够支持源至少中文或英文的解析;
步骤1.2、基于ML/AI的过权判断模块支持控制流图和数据流图输出的数据作为输入;
步骤1.3、总体过权判断模块将基于NLP的应用程序简介解析模块和基于ML/AI的过权判断模块输出结果进行综合判断。
步骤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、本发明的过权检测方法全程全自动执行,并因为深度学习加入的原因具有自我进化自我学习的功能,极大程度地降低了用户的压力。
具体实施方式
下面结合附图对本发明的实施方式进行详细描述。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本说明书中的“或”仅是一种表示逻辑关联的连接词,表示存在三种关系,比如,“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所示的总体过权判断模块将基于NLP的应用程序简介解析模块和基于ML/AI的过权判断模块输出结果进行综合判断。
在平台运行阶段,应用程序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:如图7所示,本发明所展示平台会获取要获取要检查的安卓应用程序代码,若代码为源代码,则直接前往步骤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执行结束。
上述流程的顺序不是绝对的,当两个步骤之间没有互相依赖,允许以任意互相调换顺序。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的范围内,能够轻易想到的变化或替换,都应涵盖在本发明权利要求的保护范围内。