一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种电力移动应用漏洞检测方法、装置和电子设备与流程

2023-02-04 13:52:10 来源:中国专利 TAG:


1.本发明涉及电力移动终端安全技术领域,尤其涉及一种电力移动应用漏洞检测方法、装置和电子设备。


背景技术:

2.随着智能电网建设的推进和电力移动互联业务高速发展,越来越多的移动终端接入电力企业信息内网并与内网的应用系统进行信息交互,极大提升了电力系统工作和生产经营的效率;但是,大量电力移动终端的接入也降低了攻击者的攻击成本,攻击者通过利用移动终端的安全漏洞执行恶意代码、获取设备权限、窃取用户信息,对电力企业信息内网发动攻击,增加了电网的安全风险。目前电力移动应用漏洞检测难以发现电力移动终端的潜在安全威胁,而如何有效检测电力移动终端的安全漏洞,在电力移动终端接入电力系统前发现潜在的安全隐患,对保障电力系统的稳定运行有着重要意义。因此,现有技术中存在难以检测电力移动应用中的潜在安全威胁的问题。


技术实现要素:

3.本发明提供了一种电力移动应用漏洞检测方法、装置和电子设备,以至少解决相关技术中存在难以检测电力移动应用中的潜在安全威胁的问题。
4.根据本发明实施例的第一方面,提供了一种电力移动应用漏洞检测方法,该方法包括:获取所述电力移动应用apk包,根据所述apk包确定暴露组件中的目标intent字段和所述暴露组件接收的数据类型;基于所述目标intent字段采用空值和所述数据类型的边界值生成本轮测试用例,其中,所述本轮测试用例包含多个测试用例;发送所述本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录所述漏洞信息;若未检测出漏洞则根据日志是否发生变化判断所述本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃所述测试用例;若测试用例被接收,则根据执行时间计算所述测试用例的适应度;根据多个测试用例的适应度,对所述多个测试用例进行筛选和交叉变异,生成下一轮测试用例;将所述下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的步骤直到迭代次数达到上限。
5.可选地,所述根据多个测试用例的适应度,对所述多个测试用例进行筛选和交叉变异,生成下一轮测试用例包括:将所述多个测试用例中适应度值最大的测试用例直接作为下一轮测试用例之一;对所述多个测试用例中适应度值最大的测试用例以外的其他测试用例采用轮盘赌选择方法进行筛选,得到目标测试用例;根据字段值对所述目标测试用例进行交叉操作,根据数据类型对所述目标测试用例进行变异操作,生成下一轮测试用例。
6.可选地,所述根据字段值对所述目标测试用例进行交叉操作,根据数据类型对所述目标测试用例进行变异操作包括:将任意两个所述目标测试用例中的data和extra字段交换;对intent中的data字段中的host、port和path字段根据scheme字段类型进行随机变
异;对intent中的extra字段根据数据类型进行变异。
7.可选地,所述对intent中的extra字段根据数据类型进行变异包括:将程序允许接收的数据类型变异为其他类型、将数值类型数据的数值进行变异、将字符类型数据的字符变异为不同类型的字符值、将字符串类型数据根据字段类型随机变异、将数组类型数据根据数组元素值和数组长度进行变异。
8.可选地,所述根据执行时间计算所述测试用例的适应度包括:根据所述测试用例对应的变化的日志中的时间戳确定适应度函数,所述适应度函数公式如下:式中,tn为所述测试用例执行后日志变化的最后时间,t0为所述测试用例开始执行时的时间。
9.可选地,所述获取所述电力移动应用apk包,根据所述apk包确定暴露组件中的目标intent字段和所述暴露组件接收的数据类型包括:对所述电力移动应用apk包反编译获取程序源码和配置文件;根据所述配置文件确定暴露组件和所述暴露组件的路径,根据所述程序源码、所述暴露组件和所述暴露组件的路径获取所述暴露组件对应的程序源码;根据所述暴露组件对应的程序源码确定所述暴露组件中的目标intent字段和所述暴露组件接收的数据类型。
10.根据本发明实施例的第二方面,还提供了一种电力移动应用漏洞检测装置,该装置包括:确定模块,用于获取所述电力移动应用apk包,根据所述apk包确定暴露组件中的目标intent字段和所述暴露组件接收的数据类型;生成模块,用于对所述目标intent字段基于空值和所述数据类型的边界值生成本轮测试用例,其中,所述本轮测试用例包含多个测试用例;第一判断模块,用于发送所述本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录所述漏洞信息;第二判断模块,用于若未检测出漏洞则根据日志是否发生变化判断所述本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃所述测试用例;适应度计算模块,用于若测试用例被接收,则根据执行时间计算所述测试用例的适应度;交叉变异模块,用于根据多个测试用例的适应度,对所述多个测试用例进行筛选和交叉变异,生成下一轮测试用例;迭代模块,用于将所述下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的操作直到迭代次数达到上限。
11.可选地,所述交叉变异模块包括:保留单元,用于将所述多个测试用例中适应度值最大的测试用例直接作为下一轮测试用例之一;得到单元,用于对所述多个测试用例中适应度值最大的测试用例以外的其他测试用例采用轮盘赌选择方法进行筛选,得到目标测试用例;生成单元,用于根据字段值对所述目标测试用例进行交叉操作,根据数据类型对所述目标测试用例进行变异操作,生成下一轮测试用例。
12.可选地,所述生成单元包括:交换子模块,用于将任意两个所述目标测试用例中的data和extra字段交换;随机变异子模块,用于对intent中的data字段中的host、port和path字段根据scheme字段类型进行随机变异;变异子模块,用于对intent中的extra字段根据数据类型进行变异。
13.可选地,所述变异子模块包括:变异子单元,用于将程序允许接收的数据类型变异
为其他类型、将数值类型数据的数值进行变异、将字符类型数据的字符变异为不同类型的字符值、将字符串类型数据根据字段类型随机变异、将数组类型数据根据数组元素值和数组长度进行变异。
14.可选地,所述适应度计算模块包括:适应度计算单元,用于根据所述测试用例对应的变化的日志中的时间戳确定适应度函数,所述适应度函数公式如下:式中,tn为所述测试用例执行后日志变化的最后时间,t0为所述测试用例开始执行时的时间。
15.可选地,所述确定模块包括:反编译单元,用于对所述电力移动应用apk包反编译获取程序源码和配置文件;获取单元,用于根据所述配置文件确定暴露组件和所述暴露组件的路径,根据所述程序源码、所述暴露组件和所述暴露组件的路径获取所述暴露组件对应的程序源码;确定单元,用于根据所述暴露组件对应的程序源码确定所述暴露组件中的目标intent字段和所述暴露组件接收的数据类型。
16.根据本发明实施例的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
17.根据本发明实施例的第四方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
18.在本发明实施例中,通过获取电力移动应用apk包,确定暴露组件中的目标intent字段和暴露组件接收的数据类型;基于目标intent字段生成本轮测试用例;发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试;若未检测出漏洞判断本轮测试用例中的各测试用例是否被接收,若未被接收,则抛弃测试用例;若被接收,则根据执行时间计算测试用例的适应度;根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例;将下一轮测试用例作为本轮测试用例,重复执行上述步骤直到迭代次数达到上限。由于根据应用组件之间通信的intent机制构造intent对象作为测试用例,并根据遗传算法思想对测试用例进行交叉变异,提供各种非预期的输入并监视异常结果来发现软件漏洞。从而实现了检测电力移动应用中潜在安全威胁的目的,进而解决了相关技术中存在的难以检测电力移动应用中的潜在安全威胁的问题。
19.在本发明实施例中,基于目标intent字段采用空值和数据类型的边界值生成测试用例,由于intent字段中的data字段和extras字段为空值或边界值时容易引发应用程序崩溃的异常,因此基于空值和边界值生成初始测试用例,达到了提高检测效率的效果。
20.在本发明实施例中,参考侧信道思想提出根据执行时间计算测试用例的适应度,由于执行时间在一定程度上反映了执行代码的数量多少,进而反应了模糊测试用例选择的重要标准覆盖率的大小,从而实现了提高测试效率的目的。
21.在本发明实施例中,通过保留适应度最高的测试用例不进行交叉变异直接作为下一轮测试用例,对剩下的测试用例采用轮盘赌选择方法进行筛选,减小了筛选的用例规模,提高了筛选效率。
22.在本发明实施例中,基于遗传算法思想对电力移动应用进行模糊测试,能够构造更有效的测试用例,对电力移动应用的安全漏洞进行检测,及时发现潜在的安全隐患,提高电力移动终端整体安全防护能力。
附图说明
23.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
24.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
25.图1是根据本发明实施例的一种可选的电力移动应用漏洞检测方法的硬件环境的示意图;
26.图2是根据本发明实施例的一种可选的电力移动应用漏洞检测方法的流程示意图;
27.图3是根据本发明实施例的一种可选的电力移动应用漏洞检测方法的整体流程示意图;
28.图4是根据本发明实施例的一种可选的电力移动应用漏洞检测装置的结构框图;
29.图5是根据本发明实施例的一种可选的电子设备的结构框图。
具体实施方式
30.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
31.需要说明的是,在本发明的描述中,术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,还可以是两个元件内部的连通,可以是无线连接,也可以是有线连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
32.根据本发明实施例的一个方面,提供了一种电力移动应用漏洞检测方法。可选地,在本实施例中,上述电力移动应用漏洞检测方法可以应用于如图1所示的硬件环境中。如图1所示,终端102中可以包含有存储器104、处理器106和显示器108(可选部件)。终端102可以通过网络110与服务器112进行通信连接,该服务器112可用于为终端或终端上安装的客户
端提供服务(如应用服务等),可在服务器112上或独立于服务器112设置数据库114,用于为服务器112提供数据存储服务。此外,服务器112中可以运行有处理引擎116,该处理引擎116可以用于执行由服务器112所执行的步骤。
33.可选地,终端102可以但不限于为可以计算数据的终端,如移动终端(例如手机、平板电脑)、笔记本电脑、pc(personal computer,个人计算机)机等终端上,上述网络可以包括但不限于无线网络或有线网络。其中,该无线网络包括:蓝牙、wifi(wireless fidelity,无线保真)及其他实现无线通信的网络。上述有线网络可以包括但不限于:广域网、城域网、局域网。上述服务器112可以包括但不限于任何可以进行计算的硬件设备。
34.此外,在本实施例中,上述电力移动应用漏洞检测方法还可以但不限于应用于处理能力较强大的独立的处理设备中,而无需进行数据交互。例如,该处理设备可以但不限于为处理能力较强大的终端设备,即,上述电力移动应用漏洞检测方法中的各个操作可以集成在一个独立的处理设备中。上述仅是一种示例,本实施例中对此不作任何限定。
35.可选地,在本实施例中,上述电力移动应用漏洞检测方法可以由服务器112来执行,也可以由终端102来执行,还可以是由服务器112和终端102共同执行。其中,终端102执行本发明实施例的电力移动应用漏洞检测方法也可以是由安装在其上的客户端来执行。
36.以电力移动应用漏洞检测方法应用于中央处理单元为例,图2是根据本发明实施例的一种可选的电力移动应用漏洞检测方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:
37.步骤s201,获取电力移动应用apk包,根据apk包确定暴露组件中的目标intent字段和暴露组件接收的数据类型。可选地,apk包(android application package)是android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。首先获取电力移动应用的apk包,确定其中的暴露组件和暴露组件接收的数据类型,具体地,根据组件标签(android:exported)确认是否允许外部的应用调用该组件。当某一组件允许外部的应用调用时,称其为暴露组件,暴露组件可能存在安全问题。所以本发明利用应用组件之间通信的intent机制对漏洞进行检测,intent对象由六部分组成,分别为:component name、action、data、extra、category和flag,其中,component name字段表示组件名称;action字段决定组件要执行的动作;data和extra字段用来传播数据,通过定位getxxxextras()函数,可以获取暴露组件中extra字段接收的key值以及value的类型即暴露组件接收的数据类型;category字段包含了处理该intent的组件的种类信息;flag字段代表标志,可以管理存放应用显示界面的任务栈。本方法重点关注其中的component name、action、data、extra字段,即将component name、action、data、extra字段作为目标intent字段。也可根据具体需求选取其它字段进行测试。
38.步骤s202,基于目标intent字段采用空值和数据类型的边界值生成本轮测试用例,其中,本轮测试用例包含多个测试用例。可选地,根据上一步分析得到的结果,为每个暴露组件建立一个测试用例数据集。该数据集中每一条测试用例数据格式为:
39.{component name:组件名称xxx
40.action:xxx
41.data:xxx
42.extra:{key:”xxx”;value:xxx}
43.}
44.其中,component name代表组件名称,可以在androidmanifest.xml文件中根据标签android:name=”xxx”获取。action字段表明接收的组件要执行的动作,通常为字符串类型,可以通过androidmanifest.xml文件中或源码中getaction()函数获取组件期待接收的action字段值。data字段为需要操作数据的uri,为scheme://host:port/path格式。extra字段是一个键值对类型的数据,由(key,value)两部分组成,通过在源码中定位getxxxextras()函数,获取该程序接收的extra的key值以及value的类型,例如源码中:str=paramintent.getstringextra("appcode");故该程序接收的extra字段是一个key名称为"appcode",value值为string类型的数据。
45.由于前期测试发现,action、data、extra字段为空值和边界值时引发异常的概率较大,因为程序在获取intent对象时未对相应字段做空值处理等操作,因此根据如下形式构造初始测试用例即本轮测试用例:
46.{component name:组件名称xxx
47.action:null
48.data:null
49.extra:{key:”xxx”;value:null或该类型的边界值}
50.}
51.需要说明的是,每个暴露组件包括一个测试用例数据集,每个测试用例数据集包括多个测试用例,即本轮测试用例包含多个测试用例。
52.步骤s203,发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录漏洞信息。可选地,将步骤s202中生成的本轮测试用例发送给电力移动应用,通过分析系统底层日志以及观察应用运行状态判断是否检测出漏洞。本实施例不对发送测试用例的方法做具体限定,如可以利用drozer工具将测试用例发送给移动终端上的应用。如果检测出漏洞,则停止测试并记录漏洞信息。有些初始测试用例可以检测到组件的越权漏洞,即绕过软件正常的使用逻辑启动相关组件,如未经登录就能启动登录后的组件,这显然是不符合常规的,本实施例将其判定为越权漏洞。若初始测试用例检测出越权漏洞,就停止对该组件的测试并记录下来。
53.步骤s204,若未检测出漏洞则根据日志是否发生变化判断本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃测试用例。可选地,如果发送本轮测试用例后没有检测出漏洞则根据日志是否发生变化判断本轮测试用例中的各测试用例是否被接收。具体地,通过观察android系统底层的events缓冲区日志判断测试用例是否被接收。其中,events缓冲区每一条日志都给出了详细时间、进程id、线程id、日志标签以及日志详细信息,可以利用adb工具查看日志信息,观察日志的变化,也可以使用其他工具或方法。若某一测试用例发送后,系统日志未发生变化则说明该测试用例未被接收,故抛弃该测试用例。
54.步骤s205,若测试用例被接收,则根据执行时间计算测试用例的适应度。可选地,若某一测试用例发送后,系统日志发生变化则说明该测试用例被接收,但暂时未引起应用异常,那么保留该测试用例并计算该测试用例的适应度。
55.步骤s206,根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生
成下一轮测试用例。可选地,根据保留的多个测试用例的适应度对多个测试用例进行筛选,将筛选后的测试用例进行交叉变异,生成下一轮测试用例。
56.步骤s207,将下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的步骤直到迭代次数达到上限。可选地,将步骤s206中生成的下一轮测试用例作为本轮测试用例,重复步骤s203、s204、s205以及s206直到迭代次数达到上限,即若迭代次数达到上限则结束对该组件的检测,否则不断根据生成的新的测试用例进行检测。
57.在本发明实施例中,通过获取电力移动应用apk包,确定暴露组件中的目标intent字段和暴露组件接收的数据类型;基于目标intent字段生成本轮测试用例;发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试;若未检测出漏洞判断本轮测试用例中的各测试用例是否被接收,若未被接收,则抛弃测试用例;若被接收,则根据执行时间计算测试用例的适应度;根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例;将下一轮测试用例作为本轮测试用例,重复执行上述步骤直到迭代次数达到上限。由于根据应用组件之间通信的intent机制构造intent对象作为测试用例,并根据遗传算法思想对测试用例进行交叉变异,提供各种非预期的输入并监视异常结果来发现软件漏洞。从而实现了检测电力移动应用中潜在安全威胁的目的,进而解决了相关技术中存在的难以检测电力移动应用中的潜在安全威胁的问题。
58.作为一种可选的实施例,根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例包括:将多个测试用例中适应度值最大的测试用例直接作为下一轮测试用例之一;对多个测试用例中适应度值最大的测试用例以外的其他测试用例采用轮盘赌选择方法进行筛选,得到目标测试用例;根据字段值对目标测试用例进行交叉操作,根据数据类型对目标测试用例进行变异操作,生成下一轮测试用例。
59.可选地,在生成下一轮测试用例时,将多个测试用例中适应度值最大的测试用例直接作为下一轮测试用例之一,对其他测试用例采用轮盘赌选择方法进行筛选,将筛选后得到的多个测试用例即目标测试用例进行交叉变异。具体的交叉变异方式为:根据字段值对目标测试用例进行交叉操作,根据数据类型对目标测试用例进行变异操作。
60.在本发明实施例中,通过保留适应度最高的测试用例不进行交叉变异直接作为下一轮测试用例,对剩下的测试用例采用轮盘赌选择方法进行筛选,减小了筛选的用例规模,提高了筛选效率。
61.作为一种可选的实施例,根据字段值对目标测试用例进行交叉操作,根据数据类型对目标测试用例进行变异操作包括:将任意两个目标测试用例中的data和extra字段交换;对intent中的data字段中的host、port和path字段根据scheme字段类型进行随机变异;对intent中的extra字段根据数据类型进行变异。可选地,假如目标测试用例中的测试用例1和测试用例2如下所示:
62.测试用例1:
63.{component name:com.freshpower.android.elec.widget.captureactivity
64.action:action_pick
65.data:tel://123
66.extra:{key:”userid”value:123456;
67.key:”url”value:”content://com.android.contacts/contacts/1”}
68.}
69.测试用例2:
70.{component name:com.freshpower.android.elec.widget.captureactivity
71.action:action_view
72.data:content://com.android.contacts/contacts/1
73.extra:{key:”userid”value:987;
74.key:”url”value:”http://www.fkjava.org:123/mypath”}
75.}
76.对这两个测试用例进行交叉操作,即交换data和extra字段,交叉操作后的测试用例如下所示:
77.测试用例1:
78.{component name:com.freshpower.android.elec.widget.captureactivity
79.action:action_pick
80.data:content://com.android.contacts/contacts/1
81.extra:{key:”userid”value:987;
82.key:”url”value:”http://www.fkjava.org:123/mypath”}
83.}
84.测试用例2:
85.{component name:com.freshpower.android.elec.widget.captureactivity
86.action:action_view
87.data:tel://123
88.extra:{key:”userid”value:123456;
89.key:”url”value:”content://com.android.contacts/contacts/1”}
90.}
91.考虑到初始用例中的各个字段为空,因此在变异过程中无需再生成字段为空值的测试用例,对于intent中的data字段,由于data字段通常为uri类型,且满足scheme://host:port/path格式,其中scheme通常有tel://(号码数据格式,后跟电话号码)、mailto://(邮件数据格式,后跟邮件收件人地址)、smsto://(短息数据格式,后跟短信接收号码)、content://(内容数据格式,后跟需要读取的内容)、file://(文件数据格式,后跟文件路径)、http://(网页格式,后跟具体的网页地址)等类型。变异过程中scheme字段无需变异,只需从以上类型中选取;host字段的变异规则由scheme类型决定,当scheme字段为tel://和smsto://时,host字段为随机变异的由数字组成的字符串;当scheme字段为mailto://时,host字段为随机变异的邮箱地址;当scheme字段为content://和file://时,host字段为随机变异的文件地址;当scheme字段为http://时,host字段为随机变异的域名;port字段表示端口号,可以随机变异为由数字组成的字符串或空值;path字段为文件的详细地址或跟在网址中域名后面的内容,可以随机变异为由

/’隔开的字符串或空值。在本发明实施例中,结合可能存在的漏洞给出了测试用例具体的交叉变异操作方法。
92.作为一种可选的实施例,对intent中的extra字段根据数据类型进行变异包括:将程序允许接收的数据类型变异为其他类型、将数值类型数据的数值进行变异、将字符类型数据的字符变异为不同类型的字符值、将字符串类型数据根据字段类型随机变异、将数组类型数据根据数组元素值和数组长度进行变异。可选地,对于intent中的extra字段,由于应用程序接收的extra字段包括多种类型,其变异策略主要有以下两种:(1)将extra字段变异为程序允许接收的数据类型之外的其他类型,以发现程序中存在的类型转换漏洞。例如,若程序允许接收的extra字段的数据类型为int型,则可以变异为float、double、char或string类型等;若程序允许接收的extra字段的数据类型为int[]型,则可以变异为float[]、float[]、char[]或string[]类型等。(2)对于int、float、double等数值类型的数据,根据数值进行变异。例如,对于int类型的x值可以变异为x=-x,x=x^2,x=-x^2等;对于char类型的字符数据,可以变异为与当前不同类型的char值,比如将char类型的
’1’
变异为字母’a’、符号’&’或操作符’ ’等;对于string类型的字符串数据,考虑到很多程序会利用string类型的value值来传递uri等地址数据,因此可以参考data变异策略进行随机变异;对于float[]、float[]、char[]、string[]和boolean[]等数组类型的数据,除了变异数组元素的值,还可以变异数组的长度,其中数组元素的变异可以参考上述变异策略。在本发明实施例中,结合可能存在的漏洞给出了测试用例中extra字段具体的变异操作方法。
[0093]
作为一种可选的实施例,根据执行时间计算测试用例的适应度包括:根据测试用例对应的变化的日志中的时间戳确定适应度函数,适应度函数公式如下:
[0094][0095]
式中,tn为测试用例执行后日志变化的最后时间,to为测试用例开始执行时的时间。其中,tn可以从系统日志中获取,根据日志信息的时间戳部分可获得精确到毫秒的时间。to可以直接通过函数获取系统时间。为避免精度损失,将得到的tn和to以毫秒进行计算。根据该适应度函数公式计算各保留的测试用例的适应度,以供筛选。
[0096]
在本发明实施例中,参考侧信道思想提出根据执行时间计算测试用例的适应度,由于执行时间在一定程度上反映了执行代码的数量多少,进而反应了模糊测试用例选择的重要标准覆盖率的大小,从而实现了提高测试效率的目的。
[0097]
作为一种可选的实施例,获取电力移动应用apk包,根据apk包确定暴露组件中的目标intent字段和暴露组件接收的数据类型包括:对电力移动应用apk包反编译获取程序源码和配置文件;根据配置文件确定暴露组件和暴露组件的路径,根据程序源码、暴露组件和暴露组件的路径获取暴露组件对应的程序源码;根据暴露组件对应的程序源码确定暴露组件中的目标intent字段和暴露组件接收的数据类型。
[0098]
可选地,获取电力移动应用apk包,可以利用apktool对apk包进行解压获取其中的资源文件和androidmanifest.xml文件即配置文件,再利用dex2jar将apk包转化为jar包,利用jd-gui打开转化的jar包获取应用的源码。根据androidmanifest.xml文件分析应用中的暴露组件。具体来说,androidmanifest.xml文件中组件的标签中exported属性若为true或者组件标签中含有《intent-filter》则说明该组件为暴露组件。在androidmanifest.xml注册的组件的名称是该组件在整个应用包中的路径,确定暴露组件之后,可以根据此路径在apk包反编译文件中找到该暴露组件对应的程序源码,然后根据暴露组件对应的程序源
码确定暴露组件中的目标intent字段和暴露组件接收的数据类型。
[0099]
作为一种可选的实施例,图3是一种可选的电力移动应用漏洞检测方法的整体流程示意图,如图3所示,首先反编译apk包并获取暴露组件,这一步是为了获取构造测试用例所需的目标intent字段和暴露组件接收的数据类型。然后构造初始测试用例,其中,初始测试用例基于目标intent字段采用空值和数据类型的边界值生成。发送测试用例到指定app,即将初始测试用发送给待检测的电力移动应用,判断是否检测出漏洞,若检测出漏洞则结束测试,若未检测出漏洞则判断日志是否发生变化,若日志未发生变化,则抛弃该测试用例,若日志发生变化,则计算测试用例的适应度。判断本轮测试用例是否执行完毕,若未执行完毕,则继续发送测试用例到指定app并执行后续步骤,若执行完毕,则根据适应度选择测试用例,对测试用例进行交叉和变异,得到下一轮测试用例,判断迭代次数是否达到上限,若达到上限,则结束测试,若未达到上限,则继续发送测试用例到指定app并执行后续步骤。
[0100]
根据本发明实施例的另一个方面,还提供了一种用于实施上述电力移动应用漏洞检测方法的电力移动应用漏洞检测装置。图4是根据本发明实施例的一种可选的电力移动应用漏洞检测装置的结构框图,如图4所示,该装置可以包括:确定模块401,用于获取电力移动应用apk包,根据apk包确定暴露组件中的目标intent字段和暴露组件接收的数据类型;生成模块402,用于对目标intent字段基于空值和数据类型的边界值生成本轮测试用例,其中,本轮测试用例包含多个测试用例;第一判断模块403,用于发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录漏洞信息;第二判断模块404,用于若未检测出漏洞则根据日志是否发生变化判断本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃测试用例;适应度计算模块405,用于若测试用例被接收,则根据执行时间计算测试用例的适应度;交叉变异模块406,用于根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例;迭代模块407,用于将下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的操作直到迭代次数达到上限。
[0101]
需要说明的是,该实施例中的确定模块401可以用于执行上述步骤s201,该实施例中的生成模块402可以用于执行上述步骤s202,该实施例中的第一判断模块403可以用于执行上述步骤s203,该实施例中的第二判断模块404可以用于执行上述步骤s204,该实施例中的适应度计算模块405可以用于执行上述步骤s205,该实施例中的交叉变异模块406可以用于执行上述步骤s206,该实施例中的迭代模块407可以用于执行上述步骤s207。
[0102]
通过上述模块,由于根据应用组件之间通信的intent机制构造intent对象作为测试用例,并根据遗传算法思想对测试用例进行交叉变异,提供各种非预期的输入并监视异常结果来发现软件漏洞。从而实现了检测电力移动应用中潜在安全威胁的目的,进而解决了相关技术中存在的难以检测电力移动应用中的潜在安全威胁的问题。
[0103]
作为一种可选实施例,交叉变异模块包括:保留单元,用于将多个测试用例中适应度值最大的测试用例直接作为下一轮测试用例之一;得到单元,用于对多个测试用例中适应度值最大的测试用例以外的其他测试用例采用轮盘赌选择方法进行筛选,得到目标测试用例;生成单元,用于根据字段值对目标测试用例进行交叉操作,根据数据类型对目标测试
用例进行变异操作,生成下一轮测试用例。
[0104]
作为一种可选实施例,生成单元包括:交换子模块,用于将任意两个目标测试用例中的data和extra字段交换;随机变异子模块,用于对intent中的data字段中的host、port和path字段根据scheme字段类型进行随机变异;变异子模块,用于对intent中的extra字段根据数据类型进行变异。
[0105]
作为一种可选实施例,变异子模块包括:变异子单元,用于将程序允许接收的数据类型变异为其他类型、将数值类型数据的数值进行变异、将字符类型数据的字符变异为不同类型的字符值、将字符串类型数据根据字段类型随机变异、将数组类型数据根据数组元素值和数组长度进行变异。
[0106]
作为一种可选实施例,适应度计算模块包括:适应度计算单元,用于根据测试用例对应的变化的日志中的时间戳确定适应度函数,适应度函数公式如下:式中,tn为测试用例执行后日志变化的最后时间,t0为测试用例开始执行时的时间。
[0107]
作为一种可选实施例,确定模块包括:反编译单元,用于对电力移动应用apk包反编译获取程序源码和配置文件;获取单元,用于根据配置文件确定暴露组件和暴露组件的路径,根据程序源码、暴露组件和暴露组件的路径获取暴露组件对应的程序源码;确定单元,用于根据暴露组件对应的程序源码确定暴露组件中的目标intent字段和暴露组件接收的数据类型。
[0108]
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
[0109]
根据本发明实施例的又一个方面,还提供了一种用于实施上述电力移动应用漏洞检测方法的电子设备,该电子设备可以是服务器、终端、或者其组合。
[0110]
图5是根据本发明实施例的一种可选的电子设备的结构框图,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501、通信接口502和存储器503通过通信总线504完成相互间的通信,其中,存储器503,用于存储计算机程序;处理器501,用于执行存储器503上所存放的计算机程序时,实现如下步骤:
[0111]
获取电力移动应用apk包,根据apk包确定暴露组件中的目标intent字段和暴露组件接收的数据类型;基于目标intent字段采用空值和数据类型的边界值生成本轮测试用例,其中,本轮测试用例包含多个测试用例;发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录漏洞信息;若未检测出漏洞则根据日志是否发生变化判断本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃测试用例;若测试用例被接收,则根据执行时间计算测试用例的适应度;根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例;将下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的步骤直到迭代次数达到上限。
[0112]
可选地,在本实施例中,上述的通信总线可以是pci(peripheral component interconnect,外设部件互连标准)总线、或eisa(extended industry standard architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。存储器可以包括ram,也可以包括非易失性存储器(non-volatile memory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0113]
作为一种示例,如图5所示,上述存储器503中可以但不限于包括上述电力移动应用漏洞检测装置中的确定模块401、生成模块402、第一判断模块403、第二判断模块404、适应度计算模块405、交叉变异模块406以及迭代模块407。此外,还可以包括但不限于上述电力移动应用漏洞检测装置中的其他模块单元,本示例中不再赘述。
[0114]
上述处理器可以是通用处理器,可以包含但不限于:cpu(central processing unit,中央处理器)、np(network processor,网络处理器)等;还可以是dsp(digital signal processing,数字信号处理器)、asic(application specific integrated circuit,专用集成电路)、fpga(field-programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。此外,上述电子设备还包括:显示器,用于显示电力移动应用漏洞检测结果。可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0115]
本领域普通技术人员可以理解,图5所示的结构仅为示意,实施上述电力移动应用漏洞检测方法的设备可以是终端设备,该终端设备可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobile internet devices,mid)、pad等终端设备。图5并不对上述电子设备的结构造成限定。例如,终端设备还可包括比图5中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图5所示的不同的配置。
[0116]
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、rom、ram、磁盘或光盘等。
[0117]
根据本发明实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行电力移动应用漏洞检测方法的程序代码。
[0118]
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
[0119]
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
[0120]
获取电力移动应用apk包,根据apk包确定暴露组件中的目标intent字段和暴露组件接收的数据类型;基于目标intent字段采用空值和数据类型的边界值生成本轮测试用例,其中,本轮测试用例包含多个测试用例;发送本轮测试用例进行测试,判断是否检测出漏洞,若检测出漏洞则停止测试并记录漏洞信息;若未检测出漏洞则根据日志是否发生变化判断本轮测试用例中的各测试用例是否被接收,若测试用例未被接收,则抛弃测试用例;若测试用例被接收,则根据执行时间计算测试用例的适应度;根据多个测试用例的适应度,对多个测试用例进行筛选和交叉变异,生成下一轮测试用例;将下一轮测试用例作为本轮测试用例,执行发送本轮测试用例,判断是否检测出漏洞,若未检测出漏洞判断是否被接
收,若被接收计算本轮测试用例中各测试用例的适应度以及生成下一轮测试用例的步骤直到迭代次数达到上限。
[0121]
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
[0122]
可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、rom、ram、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0123]
根据本发明实施例的又一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中;计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一个实施例中的电力移动应用漏洞检测方法步骤。
[0124]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0125]
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例电力移动应用漏洞检测方法的全部或部分步骤。
[0126]
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0127]
在本发明所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0128]
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
[0129]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0130]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献