CN112069061B - 深度学习梯度指导变异的软件安全漏洞检测方法及*** - Google Patents
深度学习梯度指导变异的软件安全漏洞检测方法及*** Download PDFInfo
- Publication number
- CN112069061B CN112069061B CN202010839157.9A CN202010839157A CN112069061B CN 112069061 B CN112069061 B CN 112069061B CN 202010839157 A CN202010839157 A CN 202010839157A CN 112069061 B CN112069061 B CN 112069061B
- Authority
- CN
- China
- Prior art keywords
- gradient
- test case
- test
- array
- test cases
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000013135 deep learning Methods 0.000 title claims abstract description 18
- 238000001514 detection method Methods 0.000 title claims abstract description 18
- 238000012360 testing method Methods 0.000 claims abstract description 255
- 238000003062 neural network model Methods 0.000 claims abstract description 53
- 238000000034 method Methods 0.000 claims abstract description 48
- 238000004364 calculation method Methods 0.000 claims abstract description 34
- 238000012549 training Methods 0.000 claims abstract description 23
- 238000007781 pre-processing Methods 0.000 claims abstract description 13
- 210000004205 output neuron Anatomy 0.000 claims abstract description 10
- 210000002569 neuron Anatomy 0.000 claims description 41
- 230000035772 mutation Effects 0.000 claims description 25
- 239000011159 matrix material Substances 0.000 claims description 8
- 238000012545 processing Methods 0.000 claims description 8
- 230000001172 regenerating effect Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000005065 mining Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 230000015654 memory Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000013528 artificial neural network Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 238000003860 storage Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000010998 test method Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 235000000334 grey box Nutrition 0.000 description 1
- 244000085685 grey box Species 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种深度学习梯度指导变异的软件安全漏洞检测方法及***,该方法包括:获取测试用例并进行预处理,得到最大测试用例的大小和每一测试用例在被测程序中的执行路径;建立深度神经网络模型;其中,输入层的输入维度为最大测试用例的大小,输出层的输出神经元个数为执行路径的总数;将测试用例向量化,然后利用测试用例训练深度神经网络模型;基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;基于梯度信息对测试用例进行变异并进行模糊测试,生成测试结果。本发明采用梯度指导变异技术,结合深度学习辅助生成梯度信息,可有效解决软件安全漏洞挖掘中的瓶颈问题。
Description
技术领域
本发明涉及软件安全漏洞检测技术领域,特别涉及一种深度学习梯度指导变异的软件安全漏洞检测方法及***。
背景技术
模糊测试已经成为发现软件漏洞的事实标准技术。但是,即使是目前最先进的模糊器也不能很有效地找到难以触发的软件错误。目前,现有方法如下:
2020年,国防科技大学的李明磊通过对被测程序的静态分析,构建被测程序的函数调用图和控制流程图,计算基本块距离并插桩到被测程序中。在模糊测试时,通过插桩追踪并计算每个测试用例到指定目标的距离。模糊测试器根据该距离计算种子能量以实现对目标区域的导向。但该方法需要使用到源码,对于一些不提供源码的项目,该方法并不适用。另外该方法是根据测试用例到指定目标的距离计算种子能量以实现对目标区域的导向,但目前静态分析工具还无法识别程序中的间接调用,导致函数距离的精度不高,找到的漏洞数量少。
2019年,美国普渡大学的Wei You通过对模糊测试过程中对漏洞发现起着重要作用的输入字段进行恢复和理解,并智能地调整变异策略以增加找到零日漏洞的机率。模糊测试时,首先突变单个字节,然后分析模糊测试结果以连接相关的字节并识别连接它们的字段类型,接着字节按照特定于类型的策略进一步突变。但该方法需要恢复数据语义结构,实现复杂,效率低下,时间成本高。
2019年,美国哥伦比亚大学的Dongdong She采用两层神经网络来实现程序平滑,并固定选取输出层中的500个神经元计算损失相对于指定输入的梯度值,然后使用梯度值去修改变异策略,最后得到变异后的种子再用于模糊测试。该方法采用的是两层神经网络来训练数据,采用这种神经网络降低程序平滑的效果,随之会影响梯度计算的精度,影响全局导向性。且选取神经元进行梯度计算时随机选取了500个输出层神经元进行梯度计算,这种神经元选取方式缺少普适性,在输出层神经元特别多时发现漏洞的效率会降低。另外,该方法采用分段变异的策略,共分为13段,分割粒度粗,变异效果差,发现漏洞的概率低。
2016年,澳大利亚莫纳什大学的M.采用抽象覆盖的灰盒模糊测试方法,通过无导向性改变种子输入生成新测试。如果测试运行一条新的有趣的路径,它将被添加到种子集中;否则,它被丢弃。该方法主要是通过增加“低频路径”的访问概率来提高代码覆盖率。但该方法计算复杂度高,时间成本高,找到漏洞的数量少。
2015年,Michal Zalewski采用随机突变策略,通过对种子进行随机突变,增加种子的多样性,从而提高分支覆盖率,增加漏洞查找的概率。但该方法在“大破坏”变异阶段会存在随机性,而且该方法发现漏洞的概率低,分支覆盖率低,时间成本高。
综上,目前现有的软件安全漏洞检测方法一般存在以下缺点:使用进化指导变异的模糊器,常常会陷入随机突变中,缺少方向性,导致找到的漏洞少、分支覆盖率低、发现漏洞的速度慢等问题。基于语义和语法指导变异的技术能够推断输入结构,通过观察程序的执行路径的变化来发现程序输入与程序输出行为之间的关系,进而制定变异策略,但是这种方法不能将输入的完整语义结构恢复成功,影响发现漏洞的概率。现有的模糊器变异策略较简单,但是发现漏洞的效果不好。有的模糊器对特定软件结构的输入效率较低,不利于软件安全漏洞检测。现有的梯度指导变异方式获取的梯度信息精确度较低,梯度指导变异策略存在不易扩展的弊端。因此需要针对现有技术问题进行改进。
发明内容
本发明提供了一种深度学习梯度指导变异的软件安全漏洞检测方法及***,以解决现有的软件安全漏洞挖掘技术中的瓶颈问题。
为解决上述技术问题,本发明提供了如下技术方案:
一方面,本发明提供了一种深度学习梯度指导变异的软件安全漏洞检测方法,该深度学习梯度指导变异的软件安全漏洞检测方法包括:
获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;
建立深度神经网络模型,所述深度神经网络模型包括输入层、输出层和位于所述输入层与输出层之间的多个隐藏层;其中,所述输入层的输入维度为所述最大测试用例的大小,所述输出层的输出神经元个数为所述执行路径的总数;
将测试用例向量化,并利用向量化后的测试用例训练深度神经网络模型;
基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
基于所述梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果。
进一步地,基于梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果之后,所述方法还包括:基于变异生成的测试用例重新生成梯度信息。
进一步地,所述对获取的测试用例进行预处理,包括:
随机打乱所获取的测试用例的顺序,获取最大测试用例的大小;
遍历所有测试用例,获取每一测试用例在被测程序中的执行路径;
将获取的执行路径的信息保存在一个二维数组中;其中,所述二维数组的低维表示测试用例名,高维表示对应测试用例的分支信息,将所述二维数组进行01表示,测试用例经过的路径标识为1,没有经过的路径标识为0;
对所述二维数组进行去重处理,经过相同路径的测试用例只保留一个。
进一步地,所述将测试用例向量化,包括:
分批进行训练,每16个测试用例为一批,设lb表示每次训练测试用例标号的左边界,ub表示每次训练测试用例标号的右边界,lb均是16的倍数,ub前N-1个是16的倍数,第N个表示的是每次训练测试用例标号数量;
循环读取每一批次中的16个测试用例的内容,将获取到的测试用例大小跟最大测试用例大小作比较,若当前测试用例的大小小于最大测试用例的大小,则在当前测试用例的后面补零,对补零之后的测试用例转化为长度为最大测试用例大小的字节数组;其中,所述字节数组中每个元素取值范围在0-255之间。
进一步地,所述利用向量化后的测试用例训练深度神经网络模型,包括:
将向量化之后的测试用例作为深度神经网络模型的输入;
深度神经网络模型每一次迭代都将当前批次中的16个向量化之后的测试用例作为输入,16个测试用例对应的执行路径信息作为输出进行训练。
进一步地,所述基于训练好的深度神经网络模型进行梯度计算,包括:
根据被测试程序分支总数按照预设比例随机选取输出层神经元个数m;
若当前为第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到第一数组和第二数组中;若当前不是第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到所述第一数组中,并从变异生成的测试用例中随机选取m个测试用例存到所述第二数组中;
每次计算梯度都从所述第一数组和第二数组中各选取一个组成第三数组;
通过模型获取所选取出的m个输出层神经元的损失,并计算m个输出层神经元的损失相对于所述第三数组对应的两个测试用例的梯度。
进一步地,所述生成梯度信息,包括:
遍历m个输出层神经元,分别按照下式计算梯度值:
其中,n表示最大测试用例的大小,loss表示一个输出层神经元的损失值,seed表示一个向量化后的测试用例,grads表示输出层神经元的损失loss关于向量化后的测试用例seed的导数;
若是第一次执行,则将每个输出层神经元对所述第三数组中对应的两个测试用例进行梯度计算;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个2m*n的二维矩阵;若非第一次执行,则除了使用所述第三数组中对应的两个测试用例计算梯度之外,还会使用第三数组中对应的两个测试用例按照预设拼接规则进行拼接产生新的测试用例去计算梯度;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个3m*n的二维矩阵;最终将梯度值对应的位置信息、梯度值的正负以及计算梯度的测试用例的名称保存在梯度文件中。
进一步地,所述预设拼接规则包括:
确定待拼接的两个文件中文件长度较短的文件对应的长度值lenn;并将待拼接的两个文件中长度较短的文件作为头文件,另一个文件作为尾文件;
遍历0到lenn之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给f_diff,结束循环;接着遍历lenn到0之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给k_diff,结束循环;
将f_diff和1到k_diff的任一值相加作为要从尾文件上替换的位置splice_at,将尾文件的前splice_at位置替换成头文件的前splice_at的值,得到拼接后文件。
进一步地,所述基于所述梯度信息对测试用例进行变异,包括:
对所述梯度文件进行解析,每行数据都分为梯度值对应的位置、梯度符号和求取梯度的测试用例的名称三部分;
根据测试用例的名称获取到测试用例内容,将测试用例根据最大测试用例的大小分为多段,并分别对每一段进行变异;变异时在某一段中找到这段的梯度值对应的测试用例位置,将该位置的字节加1或者减1,之后作为变异之后的测试用例放入模糊测试队列中,以进行模糊测试,接着对下一段进行变异。
另一方面,本发明还提供了一种深度学习梯度指导变异的软件安全漏洞检测***,该***包括服务器和客户端:
所述服务器用于获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;建立深度神经网络模型,所述深度神经网络模型包括输入层、输出层和位于所述输入层与输出层之间的多个隐藏层;其中,所述输入层的输入维度为所述最大测试用例的大小,所述输出层的输出神经元个数为所述执行路径的总数;将测试用例向量化,并利用向量化后的测试用例训练深度神经网络模型;基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
所述客户端用于基于所述服务器生成的梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果。
再一方面,本发明还提供了一种电子设备,其包括处理器和存储器;其中,存储器中存储有至少一条指令,所述指令由处理器加载并执行以实现上述方法。
又一方面,本发明还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述方法。
本发明提供的技术方案带来的有益效果至少包括:
1、本发明既可以使用有源码的程序发现漏洞,也可以使用二进制程序发现漏洞,不依赖程序源代码;
2、本发明采用深度神经网络实现程序平滑,使用多层隐藏层,程序平滑效果比普通神经网络好;
3、本发明计算的梯度值指的是输出层神经元的损失函数相对于输入层种子的导数。其中,用于计算梯度的输出层神经元数量根据不同的程序按照一定比例随机选取。从而使得梯度计算过程具有普适性,发现漏洞效率更高;
4、本发明在使用梯度指导变异时采用参数化分段变异策略,将种子分成若干段,每段都根据该段的梯度进行指导变异。分段粒度细,变异效果好,在相同的时间内能够达到更高的分支覆盖率,从而提高了软件漏洞发现效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的软件安全漏洞检测***的工作机制示意图;
图2是本发明实施例提供的服务器侧的执行流程图;
图3是本发明实施例提供的客户端侧执行流程图;
图4是本发明实施例提供的***工作时序图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
第一实施例
请参阅图1至图3,本实施例提供一种深度学***滑技术来计算梯度信息,程序平滑使用深度神经网络来实现;其中,程序平滑技术是指给定程序输入,程序的输出是连续的。该方法的输入是向量化后的种子文件,输出是所有种子的分支信息,表示种子经过各分支的概率,其执行流程包括以下步骤:
S101,获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;
S102,建立深度神经网络模型,该深度神经网络模型包括输入层、输出层和位于输入层与输出层之间的多个隐藏层;其中,输入层的输入维度为最大测试用例的大小,输出层的输出神经元个数为执行路径的总数;
S103,将测试用例向量化,利用向量化的测试用例训练深度神经网络模型;
S104,基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
S105,基于梯度信息对测试用例进行变异并进行模糊测试,生成测试结果。
进一步地,在基于梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果之后,该方法还包括:基于变异生成的测试用例重新生成梯度信息。
具体地,上述S101至S104在服务器中执行,其实现过程如下:
1、开启socket通信,作为服务端,监听信息;
2、一旦收到客户端信息之后,开始处理客户端传递过来的用于训练深度神经网络的测试用例信息,即种子文件,对获取的种子文件进行预处理,包括:随机打乱所获取的种子文件的顺序,获取最大种子文件的大小,以供深度神经网络模型使用。遍历这些种子,使用afl-showmap获取每一个种子在被测程序中的执行路径,将这些种子的路径信息保存在一个二维数组bitmap中;其中,该二维数组的低维表示种子文件名,高维表示数组低维所示种子的分支信息,将此二维数组进行01表示,该种子经过的路径标识为1,没有经过的路径标识为0。并对该数组进行去重处理,经过相同路径的种子只保留一个。
3、定义深度神经网络模型,将步骤2中计算得到的最大种子文件大小作为深度神经网络模型的输入层输入维度,二维数组bitmap表示的分支数作为深度神经网络模型的输出层输出神经元个数,中间包括多个隐藏层。
4、训练深度神经网络模型,包括:
1)分批进行训练,每16个种子为一批,设lb表示每次训练种子标号的左边界,ub表示每次训练种子标号的右边界,lb均是16的倍数,ub前N-1个是16的倍数,第N个表示的是每次训练种子标号数量;循环读取每一批次中的16个种子的内容,将获取到的种子文件大小跟最大种子文件大小(表示测试该程序的所有种子文件中最大的种子文件)作比较,若当前种子的大小小于最大种子文件的大小,则在当前种子文件后面补零,对补零之后的种子文件转化为长度为最大种子文件大小的字节数组,数组中每个元素取值范围在0-255之间。
2)将向量化之后的种子文件作为深度神经网络模型的输入;使用步骤2中得到的路径总数作为深度神经网络模型的输出层的神经元个数,则深度神经网络模型的输出层表示的是输入种子经过被测程序各个分支的概率。
3)深度神经网络模型每一次迭代都将1)中的16个向量化之后的种子文件作为输入,2)中的16个种子对应的路径信息作为输出进行训练。另外使用召回率、学习率、损失值等作为评估指标。
5、用于计算梯度的种子和输出层神经元的选取,包括:
根据被测试程序分支总数按照一定比例随机选取输出层神经元个数,假设选取的输出层神经元个数为m;如式(1)所示,若当前为第一次执行梯度计算,即rount_cnt为0,则没有变异的种子,则从初始输入种子文件名称列表seed_list中分别随机选取m个种子文件名存到数组A和数组B中。若当前不是第一次执行梯度计算,则从初始输入种子文件名称列表seed_list中随机选取m个种子文件名存放到数组A中,从变异生成的种子文件名称列表new_seed_list中随机选取m个种子文件名存放到数组B中。每次计算梯度都从数组A和数组B中各选取一个组成数组C,如式(2)所示。对于选取好的m个输出层神经元,通过模型获取该神经元的损失,计算该损失相对于数组C对应的两个种子的梯度。
rount_cnt==0?A[]=Random(seed_list),B[]=Random(seed_list);
A[]=Random(seed_list),B[]=Random(new_seed_list)
其中,length(A)=length(B)=m。 (1)
对于任意x,0≤x<m,C={A[x],B[x]} (2)
6、生成梯度信息,包括:
遍历m个输出层神经元,分别按照式(3)计算梯度值:
其中,n表示最大种子文件的大小,loss表示一个输出层神经元的损失值,seed表示一个向量化后的种子,grads表示输出层神经元的损失loss关于向量化后的种子seed的导数;若是第一次执行,即rount_cnt为0,则将每个输出层神经元对数组C中对应的两个种子进行梯度计算;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个2m*n的二维矩阵;若非第一次执行,则除了使用数组C中对应的两个种子计算梯度之外,还会使用数组C中对应的两个种子按照预设拼接规则进行拼接产生新的种子去计算梯度;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个3m*n的二维矩阵;最终将梯度值对应的位置信息、梯度值的正负以及计算梯度的种子文件名称保存在梯度文件中。
其中,本实例所使用的拼接规则如下:
以seed1和seed2分别表示数组C对应的两个种子文件;取seed1和seed2中文件长度较短的文件对应的长度值,作为lenn的值;并将待拼接的两个文件中长度较短的文件作为头head,另一个文件作为尾tail;遍历0到lenn之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给f_diff,结束循环;接着遍历lenn到0之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给k_diff,结束循环;将f_diff和1到(k_diff-f_diff-1)的任一值相加作为要从tail文件上替换的位置splice_at,最后将tail文件的前splice_at位置替换成head文件的前splice_at的值,得到拼接后文件splice_seed。
该拼接算法的伪代码如下:
上述S105则在客户端执行,其实现过程如下:
1、开启socket通信,与服务器建立通信连接。将输入种子文件目录,输出文件目录,输入种子文件大小,被测程序传递给服务器。
2、梯度指导变异,梯度文件共有2*m或者3*m行梯度信息,将服务器生成的梯度文件进行解析,每行数据都分为梯度值对应的位置、梯度符号和求取梯度的种子文件名称三部分。根据种子文件名称获取到种子内容,将种子根据最大种子文件大小分为p段(每一段的边界为aq-1、aq,其中a由用户指定,0≤q≤p)分别对每一段进行变异。变异时在某一段中找到这段的梯度值对应的种子位置,将该位置的byte加1或者减1,之后作为新的种子,即变异之后的种子,将该种子放入模糊测试队列.cur_input中,该队列执行目标应用程序,监控超时信息,根据超时信息返回不同的状态。接着对种子的下一段进行变异。
该梯度指导变异算法伪代码如下:
3、根据梯度文件执行完成变异,与服务器进行通信,告知服务器可使用变异之后的种子作为训练模型的数据。
综上,本实施例使用梯度指导变异的模糊策略,根据梯度信息有方向性地修改变异策略会在很大程度上提高发现漏洞的概率。而且本实施例中的梯度计算是指定输出层神经元的损失函数相对于指定输入层种子的导数,用于计算梯度的输出层神经元数量根据被测试程序输出不同,按照一定的优化比例随机选取,根据得到的梯度信息对输入种子进行变异,使用变异后的输入种子触发更多的程序分支行为。本实施例的方法具有全局方向性,能够有效地找到更多的软件漏洞、达到更高的程序分支覆盖率,从而可提高发现软件安全漏洞的效率。
第二实施例
本实施例提供了一种深度学习梯度指导变异的软件安全漏洞检测***,该软件安全漏洞检测***包括服务器和客户端:其中,
所述服务器用于获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;建立深度神经网络模型,所述深度神经网络模型包括输入层、输出层和位于所述输入层与输出层之间的多个隐藏层;其中,所述输入层的输入维度为所述最大测试用例的大小,所述输出层的输出神经元个数为所述执行路径的总数;将测试用例向量化,并利用向量化后的测试用例训练深度神经网络模型;基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
所述客户端用于基于所述服务器生成的梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果。
本实施例的深度学习梯度指导变异的软件安全漏洞检测***与上述深度学习梯度指导变异的软件安全漏洞检测方法相对应;其中,该深度学习梯度指导变异的软件安全漏洞检测***中的各模块所实现的功能与上述深度学习梯度指导变异的软件安全漏洞检测方法中的各流程步骤一一对应;故,在此不再赘述。
第三实施例
本实施例提供一种电子设备,其包括处理器和存储器;其中,存储器中存储有至少一条指令,所述指令由处理器加载并执行,以实现第一实施例的方法。
该电子设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)和一个或一个以上的存储器,其中,存储器中存储有至少一条指令,所述指令由处理器加载并执行以下步骤:
S101,获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;
S102,建立深度神经网络模型,该深度神经网络模型包括输入层、输出层和位于输入层与输出层之间的多个隐藏层;其中,输入层的输入维度为最大测试用例的大小,输出层的输出神经元个数为执行路径的总数;
S103,将测试用例向量化,利用向量化的测试用例训练深度神经网络模型;
S104,基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
S105,基于梯度信息对测试用例进行变异并进行模糊测试,生成测试结果。
第四实施例
本实施例提供一种计算机可读存储介质,该存储介质中存储有至少一条指令,所述指令由处理器加载并执行,以实现上述方法。其中,该计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。其内存储的指令可由终端中的处理器加载并执行以下步骤:
S101,获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;
S102,建立深度神经网络模型,该深度神经网络模型包括输入层、输出层和位于输入层与输出层之间的多个隐藏层;其中,输入层的输入维度为最大测试用例的大小,输出层的输出神经元个数为执行路径的总数;
S103,将测试用例向量化,利用向量化的测试用例训练深度神经网络模型;
S104,基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
S105,基于梯度信息对测试用例进行变异并进行模糊测试,生成测试结果。
此外,需要说明的是,本发明可提供为方法、装置或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
最后需要说明的是,以上所述是本发明优选实施方式,应当指出,尽管已描述了本发明优选实施例,但对于本技术领域的技术人员来说,一旦得知了本发明的基本创造性概念,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
Claims (7)
1.一种深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,所述深度学习梯度指导变异的软件安全漏洞检测方法包括:
获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;其中,测试用例的大小指的是向量化后的测试用例的长度;
建立深度神经网络模型,所述深度神经网络模型包括输入层、输出层和位于所述输入层与输出层之间的多个隐藏层;其中,所述输入层的输入维度为所述最大测试用例的大小,所述输出层的输出神经元个数为所述执行路径的总数;
将测试用例向量化,并利用向量化后的测试用例训练深度神经网络模型;
基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;
基于所述梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果;
所述基于训练好的深度神经网络模型进行梯度计算,包括:
根据被测试程序分支总数按照预设比例随机选取输出层神经元个数m;
若当前为第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到第一数组和第二数组中;若当前不是第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到所述第一数组中,并从变异生成的测试用例中随机选取m个测试用例存到所述第二数组中;
每次计算梯度都从所述第一数组和第二数组中各选取一个组成第三数组;
通过模型获取所选取出的m个输出层神经元的损失,并计算m个输出层神经元的损失相对于所述第三数组对应的两个测试用例的梯度;
所述生成梯度信息,包括:
遍历m个输出层神经元,分别按照下式计算梯度值:
其中,n表示最大测试用例的大小,loss表示一个输出层神经元的损失值,seed表示一个向量化后的测试用例,grads表示输出层神经元的损失loss关于向量化后的测试用例seed的导数;
若是第一次执行,则将每个输出层神经元对所述第三数组中对应的两个测试用例进行梯度计算;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个2m*n的二维矩阵;若非第一次执行,则除了使用所述第三数组中对应的两个测试用例计算梯度之外,还会使用第三数组中对应的两个测试用例按照预设拼接规则进行拼接产生新的测试用例去计算梯度;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个3m*n的二维矩阵;最终将梯度值对应的位置信息、梯度值的正负以及计算梯度的测试用例的名称保存在梯度文件中;
所述基于所述梯度信息对测试用例进行变异,包括:
对所述梯度文件进行解析,每行数据都分为梯度值对应的位置、梯度符号和求取梯度的测试用例的名称三部分;
根据测试用例的名称获取到测试用例内容,将测试用例根据最大测试用例的大小分为多段,并分别对每一段进行变异;变异时在某一段中找到这段的梯度值对应的测试用例位置,将该位置的字节加1或者减1,之后作为变异之后的测试用例放入模糊测试队列中,以进行模糊测试,接着对下一段进行变异。
2.如权利要求1所述的深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,基于所述梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果之后,所述方法还包括:基于变异生成的测试用例重新生成梯度信息。
3.如权利要求1所述的深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,所述对获取的测试用例进行预处理,包括:
随机打乱所获取的测试用例的顺序,获取最大测试用例的大小;
遍历所有测试用例,获取每一测试用例在被测程序中的执行路径;
将获取的执行路径的信息保存在一个二维数组中;其中,所述二维数组的低维表示测试用例名,高维表示对应测试用例的分支信息,将所述二维数组进行01表示,测试用例经过的路径标识为1,没有经过的路径标识为0;其中,所述分支信息表示测试用例经过各分支的概率;
对所述二维数组进行去重处理,经过相同路径的测试用例只保留一个。
4.如权利要求1所述的深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,所述将测试用例向量化,包括:
分批进行训练,每16个测试用例为一批,设lb表示每次训练测试用例标号的左边界,ub表示每次训练测试用例标号的右边界,lb均是16的倍数,ub前N-1个是16的倍数,第N个表示的是每次训练测试用例标号数量;
循环读取每一批次中的16个测试用例的内容,将获取到的测试用例大小跟最大测试用例大小作比较,若当前测试用例的大小小于最大测试用例的大小,则在当前测试用例的后面补零,对补零之后的测试用例转化为长度为最大测试用例大小的字节数组;其中,所述字节数组中每个元素取值范围在0-255之间。
5.如权利要求4所述的深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,所述利用向量化后的测试用例训练深度神经网络模型,包括:
将向量化之后的测试用例作为深度神经网络模型的输入;
深度神经网络模型每一次迭代都将当前批次中的16个向量化之后的测试用例作为输入,16个测试用例对应的执行路径信息作为输出进行训练。
6.如权利要求1所述的深度学习梯度指导变异的软件安全漏洞检测方法,其特征在于,所述预设拼接规则包括:
确定待拼接的两个文件中文件长度较短的文件对应的长度值lenn;并将待拼接的两个文件中长度较短的文件作为头文件,另一个文件作为尾文件;
遍历0到lenn之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给f_diff,结束循环;接着遍历lenn到0之间的待拼接的两个文件的字节,若字节不同,则记录其位置并赋值给k_diff,结束循环;
将f_diff和1到k_diff的任一值相加作为要从尾文件上替换的位置splice_at,将尾文件的前splice_at位置替换成头文件的前splice_at的值,得到拼接后文件。
7.一种深度学习梯度指导变异的软件安全漏洞检测***,其特征在于,所述深度学习梯度指导变异的软件安全漏洞检测***包括服务器和客户端:
所述服务器用于获取测试用例,并对获取的测试用例进行预处理,得到测试用例中最大测试用例的大小和每一测试用例在被测程序中的执行路径;建立深度神经网络模型,所述深度神经网络模型包括输入层、输出层和位于所述输入层与输出层之间的多个隐藏层;其中,所述输入层的输入维度为所述最大测试用例的大小,所述输出层的输出神经元个数为所述执行路径的总数;将测试用例向量化,并利用向量化后的测试用例训练深度神经网络模型;基于训练好的深度神经网络模型进行梯度计算,生成梯度信息;其中,测试用例的大小指的是向量化后的测试用例的长度;
所述客户端用于基于所述服务器生成的梯度信息对测试用例进行变异,并进行模糊测试,生成测试结果;
所述基于训练好的深度神经网络模型进行梯度计算,包括:
根据被测试程序分支总数按照预设比例随机选取输出层神经元个数m;
若当前为第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到第一数组和第二数组中;若当前不是第一次执行梯度计算,则从初始输入的测试用例中随机选取m个测试用例存到所述第一数组中,并从变异生成的测试用例中随机选取m个测试用例存到所述第二数组中;
每次计算梯度都从所述第一数组和第二数组中各选取一个组成第三数组;
通过模型获取所选取出的m个输出层神经元的损失,并计算m个输出层神经元的损失相对于所述第三数组对应的两个测试用例的梯度;
所述生成梯度信息,包括:
遍历m个输出层神经元,分别按照下式计算梯度值:
其中,n表示最大测试用例的大小,loss表示一个输出层神经元的损失值,seed表示一个向量化后的测试用例,grads表示输出层神经元的损失loss关于向量化后的测试用例seed的导数;
若是第一次执行,则将每个输出层神经元对所述第三数组中对应的两个测试用例进行梯度计算;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个2m*n的二维矩阵;若非第一次执行,则除了使用所述第三数组中对应的两个测试用例计算梯度之外,还会使用第三数组中对应的两个测试用例按照预设拼接规则进行拼接产生新的测试用例去计算梯度;将计算得到的梯度值根据其绝对值从大到小排序,并保存排序前梯度值对应的位置信息,最终得到一个3m*n的二维矩阵;最终将梯度值对应的位置信息、梯度值的正负以及计算梯度的测试用例的名称保存在梯度文件中;
所述基于所述梯度信息对测试用例进行变异,包括:
对所述梯度文件进行解析,每行数据都分为梯度值对应的位置、梯度符号和求取梯度的测试用例的名称三部分;
根据测试用例的名称获取到测试用例内容,将测试用例根据最大测试用例的大小分为多段,并分别对每一段进行变异;变异时在某一段中找到这段的梯度值对应的测试用例位置,将该位置的字节加1或者减1,之后作为变异之后的测试用例放入模糊测试队列中,以进行模糊测试,接着对下一段进行变异。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010839157.9A CN112069061B (zh) | 2020-08-19 | 2020-08-19 | 深度学习梯度指导变异的软件安全漏洞检测方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010839157.9A CN112069061B (zh) | 2020-08-19 | 2020-08-19 | 深度学习梯度指导变异的软件安全漏洞检测方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112069061A CN112069061A (zh) | 2020-12-11 |
CN112069061B true CN112069061B (zh) | 2021-08-20 |
Family
ID=73661407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010839157.9A Active CN112069061B (zh) | 2020-08-19 | 2020-08-19 | 深度学习梯度指导变异的软件安全漏洞检测方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112069061B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112597046A (zh) * | 2020-12-29 | 2021-04-02 | 上海商汤智能科技有限公司 | 测试方法、装置、计算机设备及存储介质 |
CN112328505B (zh) * | 2021-01-04 | 2021-04-02 | 中国人民解放军国防科技大学 | 一种用于提升模糊测试的覆盖率的方法和*** |
CN112506564B (zh) * | 2021-02-04 | 2021-04-27 | 中国人民解放军国防科技大学 | 一种用于建立控制流图的方法、***和介质 |
CN112925710B (zh) * | 2021-02-26 | 2022-05-20 | 西南民族大学 | 一种基于梯度下降优化的模糊测试方法 |
CN113392402B (zh) * | 2021-05-24 | 2022-08-05 | 国网湖北省电力有限公司电力科学研究院 | 一种基于模糊测试的电力物联网协议漏洞检测***及方法 |
CN113434386B (zh) * | 2021-05-26 | 2022-10-04 | 深圳开源互联网安全技术有限公司 | 模糊测试的方法、***及存储介质 |
CN113569252A (zh) * | 2021-07-07 | 2021-10-29 | 四川省信息安全测评中心 | 结合神经网络基于函数与分支覆盖的漏洞检测方法 |
CN113704098B (zh) * | 2021-08-18 | 2023-09-22 | 武汉大学 | 一种基于蒙特卡洛搜索树种子调度的深度学习模糊测试方法 |
CN114064506B (zh) * | 2021-11-29 | 2023-04-04 | 电子科技大学 | 一种基于深度神经网络的二进制程序模糊测试方法及*** |
CN114490316B (zh) * | 2021-12-16 | 2023-04-18 | 四川大学 | 一种基于损失函数的单元测试用例自动生成方法 |
CN115237797B (zh) * | 2022-08-03 | 2023-09-08 | 中国电子科技集团公司信息科学研究院 | 一种基于覆盖率制导的模糊测试方法和装置 |
CN115361240B (zh) * | 2022-10-21 | 2022-12-27 | 北京星阑科技有限公司 | 一种漏洞确定方法、装置、计算机设备及存储介质 |
CN117235745B (zh) * | 2023-11-15 | 2024-05-10 | 北京东方森太科技发展有限公司 | 基于深度学习工控漏洞挖掘方法、***、设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106529818A (zh) * | 2016-11-16 | 2017-03-22 | 河南工程学院 | 基于模糊小波神经网络的水质评价预测方法 |
CN109190379A (zh) * | 2018-08-03 | 2019-01-11 | 清华大学 | 一种深度学习***的漏洞检测方法和装置 |
CN110008710A (zh) * | 2019-04-15 | 2019-07-12 | 上海交通大学 | 基于深度强化学习和程序路径插桩的漏洞检测方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10394694B2 (en) * | 2018-01-15 | 2019-08-27 | Fujitsu Limited | Unexplored branch search in hybrid fuzz testing of software binaries |
CN108470003A (zh) * | 2018-03-24 | 2018-08-31 | 中科软评科技(北京)有限公司 | 模糊测试方法、装置和*** |
US20190391901A1 (en) * | 2018-06-20 | 2019-12-26 | Ca, Inc. | Adaptive baselining and filtering for anomaly analysis |
CN109032942B (zh) * | 2018-07-24 | 2020-10-02 | 北京理工大学 | 一种基于afl的模糊测试框架 |
CN109885479B (zh) * | 2019-01-07 | 2022-02-01 | 中国人民解放军战略支援部队信息工程大学 | 基于路径记录截断的软件模糊测试方法及装置 |
CN109902024B (zh) * | 2019-03-18 | 2022-04-29 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
-
2020
- 2020-08-19 CN CN202010839157.9A patent/CN112069061B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106529818A (zh) * | 2016-11-16 | 2017-03-22 | 河南工程学院 | 基于模糊小波神经网络的水质评价预测方法 |
CN109190379A (zh) * | 2018-08-03 | 2019-01-11 | 清华大学 | 一种深度学习***的漏洞检测方法和装置 |
CN110008710A (zh) * | 2019-04-15 | 2019-07-12 | 上海交通大学 | 基于深度强化学习和程序路径插桩的漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112069061A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112069061B (zh) | 深度学习梯度指导变异的软件安全漏洞检测方法及*** | |
CN110008710B (zh) | 基于深度强化学习和程序路径插桩的漏洞检测方法 | |
US10410121B2 (en) | Adjusting automated neural network generation based on evaluation of candidate neural networks | |
CN109902024B (zh) | 一种程序路径敏感的灰盒测试方法及装置 | |
US20110307423A1 (en) | Distributed decision tree training | |
Abdollahzadeh et al. | Revisit multimodal meta-learning through the lens of multi-task learning | |
CN115563610B (zh) | 入侵检测模型的训练方法、识别方法和装置 | |
Ganatra et al. | Performance analysis of fine-tuned convolutional neural network models for plant disease classification | |
Benatia et al. | Machine learning approach for the predicting performance of SpMV on GPU | |
CN114840857A (zh) | 基于深度强化学习与多级覆盖策略的智能合约模糊测试方法及*** | |
CN110264392B (zh) | 一种基于多gpu的强连通图检测方法 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN115296898B (zh) | 用于构建网络入侵检测***的多目标演化特征选择方法 | |
CN116702157A (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN114417348B (zh) | 多目标导向模糊测试方法及*** | |
CN112990461A (zh) | 构建神经网络模型的方法、装置、计算机设备和存储介质 | |
CN114297053A (zh) | 一种基于多层感知机平滑的软件程序安全检测方法 | |
CN114328221A (zh) | 基于特征和实例迁移的跨项目软件缺陷预测方法及*** | |
CN113821452A (zh) | 根据被测***测试表现动态生成测试案例的智能测试方法 | |
Chitty | Exploiting tournament selection for efficient parallel genetic programming | |
CN111556017A (zh) | 一种基于自编码机的网络入侵检测方法及电子装置 | |
Menshawy et al. | Comparing the Effectiveness of Machine Learning and Deep Learning Techniques for Feature Envy Detection in Software Systems | |
CN115146258B (zh) | 请求处理方法、装置、存储介质及电子设备 | |
Guo et al. | Spatial-Temporal Graph Neural Network for the Detection of Container Escape Events | |
Wu et al. | Robust Neural Network Pruning by Cooperative Coevolution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211228 Address after: 908, block a, floor 8, No. 116, Zizhuyuan Road, Haidian District, Beijing 100089 Patentee after: ZHONGZI DATA CO.,LTD. Patentee after: China Highway Engineering Consulting Group Co., Ltd. Address before: 100083 No. 30, Haidian District, Beijing, Xueyuan Road Patentee before: University OF SCIENCE AND TECHNOLOGY BEIJING |