CN116594884B - 一种基于使用并发方式的模糊测试方法及装置 - Google Patents
一种基于使用并发方式的模糊测试方法及装置 Download PDFInfo
- Publication number
- CN116594884B CN116594884B CN202310553129.4A CN202310553129A CN116594884B CN 116594884 B CN116594884 B CN 116594884B CN 202310553129 A CN202310553129 A CN 202310553129A CN 116594884 B CN116594884 B CN 116594884B
- Authority
- CN
- China
- Prior art keywords
- shared memory
- request
- fuzzy
- test
- target program
- 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
- 238000010998 test method Methods 0.000 title claims abstract description 25
- 230000015654 memory Effects 0.000 claims abstract description 197
- 238000012360 testing method Methods 0.000 claims abstract description 132
- 230000006870 function Effects 0.000 claims abstract description 12
- 238000000034 method Methods 0.000 claims description 11
- 230000003993 interaction Effects 0.000 claims description 5
- 238000003780 insertion Methods 0.000 abstract description 3
- 230000037431 insertion Effects 0.000 abstract description 3
- 230000035772 mutation Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3664—Environments for testing or debugging software
-
- 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/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于使用并发方式的模糊测试方法及装置,包括:对目标程序进行插桩,插桩完成后启动目标并进行初始化操作;获取与外部交互的第一、第二共享内存,并将第一、第二共享内存进行初始化;当目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将请求ID以及请求开始状态值分别存储到所述第一、第二共享内存中;当目标程序运行时,将覆盖率实时更新存储到第二共享内存中;当目标程序运行结束后,将请求ID以及请求结束状态值分别存储到第一、第二共享内存中。本发明提供的基于使用并发方式的模糊测试方法及装置,通过将多个模糊测试任务或其它任务运行隔离开,以占据较少的系统资源有效完成多个测试任务。
Description
技术领域
本发明实施例涉及模糊测试技术领域,特别是涉及一种基于使用并发方式的模糊测试方法及装置。
背景技术
现有的大型系统的测试环境过于复杂,并且复制成本过高,无法在现有测试环境基础上快速搭建出另一套独立的测试环境。此外,由于测试环境同时使用人数过多,相互执行的任务会有冲突的可能性,这将大大影响测试结果。
申请号为CN202210765307.5,名称为“一种面向物联网固件漏洞挖掘与靶场搭建的方法与装置”的发明专利,公开了一种面向物联网固件漏洞挖掘与靶场搭建的方法,该方法以固件仿真运行、容器管理、信息展示及漏洞挖掘四大功能为重点内容,为物联网固件的靶场搭建与漏洞挖掘提供技术支撑,方法包括:步骤1:收集所需进行仿真测试和漏洞挖掘的物联网设备固件,并构建固件库;步骤2:提取固件的基本特征、文件系统及内核信息;步骤3:针对固件文件系统进行自检纠错及试错运行,随后启动固件,并制作相应的QEMU镜像;步骤4:启动固件网络服务和依赖环境,搭建容器管理环境,并开启本地Web服务,实现对容器的可视化生命周期管理;步骤5:针对固件网络页面进行自动化测试,获取各类交互报文,并通过反序列化技术构建相应的报文解析树,进而对解析树经过分析、筛选及结构变异操作后,重新序列化为种子报文;步骤6:使用模糊测试变异算法进行漏洞挖掘与固件安全性检测,获取检测报告。然而这种模糊测试方法只能执行单一的测试任务,并不支持多任务并发情况下的模糊测试。
因此,有必要提供一种基于使用并发方式的模糊测试方法及装置,可以有效解决上述问题。
发明内容
本发明提供一种基于使用并发方式的模糊测试方法,通过将多个模糊测试任务或其它任务运行隔离开,从而可以独立运行多个测试任务且互不干扰,以占据较少的系统资源有效完成多个测试任务。
本发明实施例提供一种基于使用并发方式的模糊测试方法,包括:
对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
优选地,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
优选地,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
优选地,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
优选地,所述API的初始值包括异步模式,需要执行两个HTTP调用以完成该请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
本发明实施例还提供一种基于使用并发方式的模糊测试装置,包括:
初始化操作模块,其用于对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
共享内存获取模块,其用于获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
请求ID以及请求开始状态值存储模块,其用于当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
覆盖率实时更新模块,其用于当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
请求ID以及请求结束状态值存储模块,当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
优选地,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
优选地,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
优选地,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
优选地,所述API的初始值包括异步模式,需要执行两个HTTP调用才能完成该请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例的基于使用并发方式的模糊测试方法及装置,对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中,通过将多个模糊测试任务或其它任务运行隔离开,从而可以独立运行多个测试任务且互不干扰,以占据较少的系统资源有效完成多个测试任务;
进一步地,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存,从而多线程完成调度任务执行及在共享内存中实时更新任务覆盖率、请求ID等信息。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图;
图2为本发明的另一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图;
图3为本发明的又一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图;
图4为本发明的另一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图;
图5为本发明的一个实施例提供的基于使用并发方式的模糊测试装置的模块示意图;
图6为本发明的另一个实施例提供的基于使用并发方式的模糊测试装置的模块示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
基于现有技术存在的问题,本发明实施例提供一种基于使用并发方式的模糊测试方法及装置,通过将多个模糊测试任务或其它任务运行隔离开,从而可以独立运行多个测试任务且互不干扰,以占据较少的系统资源有效完成多个测试任务。
图1为本发明的一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图。现在参看图1,本发明实施例提供一种基于使用并发方式的模糊测试方法,包括:
步骤S101:对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
步骤S102:获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
步骤S103:当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
步骤S104:当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
步骤S105:当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
具体地,请求ID(Identification,标识)与模数测试的请求绑定,用来区分不同的模糊测试请求信息。由此,目标程序对于每一个输入的请求能够具有独立且隔离的特性,其独立性能够与请求ID绑定。对同一个目标程序,支持多个模糊引擎进行模糊并发测试,各个模糊测试之间独立运行,互不干扰。在对目标程序进行模糊测试的过程中,允许其他客户端对目标程序进行请求,并且与模糊测试互不干扰。
与外部交互是指将指针与当前线程的指针变量(thread local)绑定起来,通过指针变量来获取对应的内存指针进行操作。整个架构是一个共享内存块,共享内存块划分为64份,对单个线程来说,是64分之一个共享内存块,64分之一个共享内存块又划分成两块用来存储请求ID、覆盖率。第一共享内存和第二共享内存也就是64分之一个共享内存块的组成,分别存储请求ID、覆盖率。请求开始状态值以及请求结束状态值指的都是任务的状态值。在具体实施中,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
具体地,当目标程序为多线程时,采用固定线程池模式的程序,也就是说在插桩代码初始时,所有的线程都已经创建并固定。为了支持多线程模式,共享内存的份数跟系统有关,X32或者X64,共享内存的上限是64份,在编译时进行固定。将内存指针与当前的指针变量绑定起来,在后续使用中,通过指针变量获取相应的内存指针以进行共享内存的操作。
在具体实施中,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
在具体实施中,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
在具体实施中,所述API的初始值包括异步模式,需要执行两个HTTP调用以完成该请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
图2为本发明的另一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图。现在参看图2,待测系统在启动模糊测试的时候,需要携带产品的名称、任务名称、任务执行ID。模糊测试引擎接收到启动指令后,会启动模糊测试任务,并开始变异产生语料,同时将语料发送给路由器。路由器将语料变成请求对象,并生成唯一的请求ID,同时将语料以及请求ID发送给执行机。目标程序在执行时,运行插桩后的代码首先获取请求ID,并根据交互协议更新请求ID,同步更新覆盖率信息,将请求ID和覆盖率信息分别更新至第一共享内存和第二共享内存。待测系统执行时,其它任务因为请求ID不同,对模糊测试任务没有干扰,各自独立运行。
在路由器发送语料后,也会通知相关目标程序的代理服务器,代理服务器会立即对第一共享内存和第二共享内存进行扫描,找到请求ID对应的第一共享内存,并且根据交互协议,获取对应的覆盖率信息。
目标程序的插桩代码的覆盖率信息会与请求ID匹配起来,不同的请求ID进行有效隔离。因此,在目标程序执行模糊测试的时候,同时也可以接收其它的测试请求,对当前的模糊测试没有影响。相应地,对于相同的目标程序来说,也允许同时进行多个模糊测试任务。
图3为本发明的又一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图。现在参看图3,EasyFuzz服务器为第一服务器,ABFuzz服务器为第二服务器,首先使用第一服务器EasyFuzz服务器调度第二服务器ABFuzz服务器的中间服务,用于准备语料、开始/停止任务及获取其状态,准备API(Application Programming Interface,应用程序接口),包括请求路径、请求参数包括Query请求参数、Body请求对象,其中Body请求对象包括Project参数、模糊测试参数以及返回值。
具体如下所示:请求路径:POST/xxx/v1/project
请求参数
Query请求参数:
Body请求对象:
Project
模糊测试初始化:
返回值:
领域 | 类型 | 描述 |
id | string | 项目id |
name | string | 项目名称 |
具体地,启动模糊测试引擎,指定对应项目,开始模糊测试任务。
请求路径:POST/xxx/v1/projects/{id}:start
请求参数
Path参数
Query参数
领域 | 类型 | 描述 |
fuzzing_name | string | 任务名称 |
fuzzing_action_id | string | 任务执行ID |
具体地,实时获取项目模糊测试引擎的状态,请求路径:GET/xxx/v1/projects/{project_id}/status/latest
请求参数
Path参数
Query参数
领域 | 类型 | 描述 |
fuzzing_action_id | string | 任务执行ID |
返回值
最后停止模糊测试,请求路径:POST/xxx/v1/projects/{id}:stop请求参数
Path参数
Query参数
领域 | 类型 | 描述 |
fuzzing_action_id | string | 任务执行ID |
具体地,模糊测试与执行机交互发送语料规格包括:执行机在创建项目时,在fuzzer.tinyapi字段指定的API规格后。在模糊测试启动后,模糊测试引擎会根据该API的规格生成相应的语料,其中,初始语料通过API规格中的example和default字段的值自动生成。而后根据程序的反馈进行变异,并将变异后的数据回报给执行机,由执行机将变异后的语料发送给目标程序;而模糊测试引擎会等待执行机完成请求后将返回的结果回报给模糊测试引擎,这个过程是一个同步的过程。
具体地,包括TinyAPI method的结合模式,以及支持调用的异步模式。在结合模式下,由于模糊测试引擎并不知道执行机接收请求的地址,所以在创建项目的时候,需要提供执行机的地址,在该fuzzer.combinedApiPath字段设置执行接收模糊测试引擎发送语料的地址,而模糊测试引擎会使用HTTP POST方式将变异后的语料发送给执行机,URL的host是在TinyAPI中的server字段,而路径就是uzzer.combinedApiPath的值,通过POST传送的body内容就是变异后语料。合并的语料会通过{"url":"","body":{}}这样的对象数组来发送给执行机。
如果是非结合模式,则模糊测试引擎将每个方法变异后的语料发送给执行机该方法对应的路径上,默认采用POST,HTTP body则为变异后的语料。
如果执行机需要异步执行,也就是说执行机在接收到模糊测试的请求后立刻返回,而具体的目标业务数据的返回可以通过《异步回报语料处理返回值》接口把业务返回值回报给模糊测试引擎。首先,需要在fuzzer.asyncApi字段设置为true以表示采用异步方式和模糊测试引擎交互。其次,在异步方式下,模糊测试引擎在发送语料请求的Header中,会增加两个Header,一个是X-Request-ID,就是该请求的唯一ID,执行机在回报异步结果时,也需要带上该Header,同时该唯一ID需要透传至目标程序;另一个是X-Async-API-Callback-Url,也就是模糊测试引擎接受异步结果回报的url,执行也是通过POST方式,将业务的结果回报给模糊测试引擎。
具体地,对于初始语料进行如下说明:
当模糊测试引擎在变异时,需要执行机提供初始语料的来源(即“准备项目测试任务的语料接口”中的TinyAPI字段);模糊测试引擎接收到TinyAPI的规格时,会通过sample字段获取指定字段的初始值,如果某个类型的sample字段没有设置值,则会取用default的字段的值作为初始值。模糊测试引擎会依据这些值生成初始的语料,即JSON对象,具体的规格符合TinyAPI中的定义。
具体地,对变异规则进行如下说明:
不同类型的变异:所有的字段,包括内嵌的结构体,最终都能到原始类型的变异上;Boolean类型的变异是随机的true和false;Integer类型的变异,根据设置的约束进行变异;Minimum,指定最小值,包括该最小值;Maximum,指定最大值,包括该最大值;exclusiveMinimum,指定最小值,不包括该最小值;exclusiveMaximum,指定最大值,不包括该最大值;number类型的变异和integer一致;Minimum,指定最小值,包括该最小值;Maximum,指定最大值,包括该最大值;exclusiveMinimum,指定最小值,不包括该最小值;exclusiveMaximum,指定最大值,不包括该最大值;multipleOf,指定小数的精度,比如两位小数的精度时,multipleOf的值为0.01;string类型的变异,为随机字符串;maxLength,指定最大的字符串长度;enum类型的变异,根据enum的值进行变异,当前支持integer或者string两种方式进行变异。
具体地,异步回报语料处理返回值包括:执行机发送给模糊测试引擎的代理服务器,请求中url为接收Proxy的请求中的Header:X-Async-API-Callback-Url指定。
请求路径:POST{X-Async-API-Callback-Url}
请求参数
Header参数
Body参数
Response
/>
具体地,获取项目Fuzz的历史状态包括;请求路径:GET/xxx/v1/projects/{project_id}/statuses
请求参数
Path参数
Query参数
/>
返回值
返回对象
返回值为Array<ProjectStatus>数组。
其ProjectStatus结构的说明如下:
/>
具体地,获取项目Fuzz的历史状态包括:请求路径:GET/xxx/v1/projects/{project_id}/fuzzings
请求参数
Path参数
Query参数
/>
返回值
返回对象
图4为本发明的另一个实施例提供的基于使用并发方式的模糊测试方法的流程示意图。现在参看图4,本发明实施例提供一种基于使用并发方式的模糊测试方法,包括:
步骤S401:对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
步骤S402:获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
步骤S403:当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
步骤S404:当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
步骤S405:当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
步骤S206:当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
图5为本发明的一个实施例提供的基于使用并发方式的模糊测试装置的模块示意图。现在参看图5,本发明实施例还提供一种基于使用并发方式的模糊测试装置,包括:
初始化操作模块51,其用于对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
共享内存获取模块52,其用于获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
请求ID以及请求开始状态值存储模块53,其用于当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
覆盖率实时更新模块54,其用于当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
请求ID以及请求结束状态值存储模块55,当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
在具体实施中,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
在具体实施中,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
在具体实施中,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
在具体实施中,所述API的初始值包括异步模式,需要执行两个HTTP调用才能完成该请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
图6为本发明的另一个实施例提供的基于使用并发方式的模糊测试装置的模块示意图,现在参看图6,本发明实施例还提供一种基于使用并发方式的模糊测试装置,包括:
初始化操作模块61,其用于对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
共享内存获取模块62,其用于获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
请求ID以及请求开始状态值存储模块63,其用于当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
覆盖率实时更新模块64,其用于当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
请求ID以及请求结束状态值存储模块65,当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中。
固定份数的共享内存创建模块46,其用于当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
综上所述,本发明实施例的基于使用并发方式的模糊测试方法及装置,对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中,通过将多个模糊测试任务或其它任务运行隔离开,从而可以独立运行多个测试任务且互不干扰,以占据较少的系统资源有效完成多个测试任务;
进一步地,当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存,从而多线程完成调度任务执行及在共享内存中实时更新任务覆盖率、请求ID等信息。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (8)
1.一种基于使用并发方式的模糊测试方法,其特征在于,包括:
对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中;
所述与外部交互是指将指针与当前线程的指针变量绑定起来,通过指针变量来获取对应的内存指针进行操作;
整个架构是一个共享内存块,共享内存块划分为 64 份,对单个线程来说,是 64 分之一个共享内存块,64 分之一个共享内存块又划分成两块用来存储所述请求 ID和所述覆盖率,所述第一共享内存和所述第二共享内存是64分之一个共享内存块的组成,所述第一共享内存和所述第二共享内存用于分别存储所述请求 ID和所述覆盖率;
当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
2.根据权利要求1所述的基于使用并发方式的模糊测试方法,其特征在于,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
3.根据权利要求2所述的基于使用并发方式的模糊测试方法,其特征在于,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
4.根据权利要求2所述的基于使用并发方式的模糊测试方法,其特征在于,所述API的初始值包括异步模式,需要执行两个HTTP调用以完成请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
5.一种基于使用并发方式的模糊测试装置,其特征在于,包括:
初始化操作模块,其用于对目标程序进行插桩,所述插桩完成后启动目标并进行初始化操作;
共享内存获取模块,其用于获取与外部交互的第一共享内存和第二共享内存,并将所述第一共享内存和所述第二共享内存进行初始化;
请求ID以及请求开始状态值存储模块,其用于当所述目标程序在请求函数的入口接收到模糊测试的请求时,获取请求ID以及请求开始状态值,并将所述请求ID以及所述请求开始状态值分别存储到所述第一共享内存和所述第二共享内存中;
覆盖率实时更新模块,其用于当所述目标程序运行时,将覆盖率实时更新存储到所述第二共享内存中;
请求ID以及请求结束状态值存储模块,当所述目标程序运行结束后,将所述请求ID以及请求结束状态值分别存储到所述第一共享内存和所述第二共享内存中;
所述与外部交互是指将指针与当前线程的指针变量绑定起来,通过指针变量来获取对应的内存指针进行操作;
整个架构是一个共享内存块,共享内存块划分为 64 份,对单个线程来说,是 64 分之一个共享内存块,64 分之一个共享内存块又划分成两块用来存储所述请求 ID和所述覆盖率,所述第一共享内存和所述第二共享内存是64分之一个共享内存块的组成,所述第一共享内存和所述第二共享内存用于分别存储所述请求 ID和所述覆盖率;
当所述目标程序为多线程时,所述初始化操作包括创建固定份数的共享内存,所述固定份数的共享内存中的每一份包括所述第一共享内存和所述第二共享内存,通过指针变量访问所述固定份数的共享内存。
6.根据权利要求5所述的基于使用并发方式的模糊测试装置,其特征在于,所述初始化操作包括请求参数初始化、请求对象初始化以及模糊测试初始化;
所述请求参数初始化包括:任务名称、所述请求ID、是否系统准备完成后直接运行模糊测试;
所述请求对象初始化包括:项目ID、项目名称;
所述模糊测试初始化包括:模糊测试的最长时间、模糊测试单次请求的最长超时时间、API的初始值。
7.根据权利要求6所述的基于使用并发方式的模糊测试装置,其特征在于,所述API的初始值包括非结合模式和结合模式;
当所述API的初始值为非结合模式时,模糊测试引擎将语料分别变异后发送给执行机;
当所述API的初始值为结合模式时,所述模糊测试引擎将语料合并变异后发送给执行机。
8.根据权利要求6所述的基于使用并发方式的模糊测试装置,其特征在于,所述API的初始值包括异步模式,需要执行两个HTTP调用才能完成请求流程,所述异步模式包括:
模糊引擎将语料发送给执行机,所述执行机接收后立刻返回;
所述执行机将所述语料推送给所述目标程序;
所述执行机接收到所述目标程序的返回后,通过回调的方式将业务结果主动发送给所述模糊引擎;
所述模糊引擎接收到所述回调的业务结果之后,真正结束该请求流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310553129.4A CN116594884B (zh) | 2023-05-16 | 2023-05-16 | 一种基于使用并发方式的模糊测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310553129.4A CN116594884B (zh) | 2023-05-16 | 2023-05-16 | 一种基于使用并发方式的模糊测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116594884A CN116594884A (zh) | 2023-08-15 |
CN116594884B true CN116594884B (zh) | 2023-10-27 |
Family
ID=87610991
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310553129.4A Active CN116594884B (zh) | 2023-05-16 | 2023-05-16 | 一种基于使用并发方式的模糊测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116594884B (zh) |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103376772A (zh) * | 2012-04-27 | 2013-10-30 | 沈阳高精数控技术有限公司 | 一种嵌入式数控系统性能监测的方法 |
CN103544102A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟方法及装置 |
CN103544103A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟并发方法及系统 |
WO2014049104A1 (en) * | 2012-09-27 | 2014-04-03 | Siemens Aktiengesellschaft | A method, apparatus and system for optimizing test cases in fuzz testing |
CN104216829A (zh) * | 2014-08-29 | 2014-12-17 | 福建联迪商用设备有限公司 | 一种嵌入式模块并发测试的方法及系统 |
CN108399132A (zh) * | 2018-03-21 | 2018-08-14 | 腾讯科技(深圳)有限公司 | 一种调度测试方法、装置及存储介质 |
CN111290942A (zh) * | 2018-12-10 | 2020-06-16 | 北京京东尚科信息技术有限公司 | 压力测试方法、装置以及计算机可读介质 |
CN112463581A (zh) * | 2020-08-18 | 2021-03-09 | 清华大学 | 一种对分布式系统进行模糊测试的方法及系统 |
CN112506801A (zh) * | 2020-12-24 | 2021-03-16 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于注解的模糊测试方法 |
CN112948255A (zh) * | 2021-03-23 | 2021-06-11 | 北京鸿腾智能科技有限公司 | 分布式的内核模糊测试系统及方法 |
CN113438008A (zh) * | 2021-04-20 | 2021-09-24 | 北京控制工程研究所 | 一种适用于姿轨控系统多机容错架构的多机时标仿真方法 |
CN114528123A (zh) * | 2022-02-11 | 2022-05-24 | 北京天融信网络安全技术有限公司 | 数据访问方法、装置、设备及计算机可读存储介质 |
CN115292176A (zh) * | 2022-08-03 | 2022-11-04 | 成都卫士通信息产业股份有限公司 | 一种压力测试方法、装置、设备及存储介质 |
CN115795478A (zh) * | 2022-11-15 | 2023-03-14 | 国网新疆电力有限公司电力科学研究院 | 基于Kubernetes部署的分布式漏洞挖掘方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496524B2 (en) * | 2015-12-31 | 2019-12-03 | Synopsys, Inc. | Separating test coverage in software processes using shared memory |
US10698789B1 (en) * | 2018-12-05 | 2020-06-30 | International Business Machines Corporation | Fuzz testing for quantum SDK |
-
2023
- 2023-05-16 CN CN202310553129.4A patent/CN116594884B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103376772A (zh) * | 2012-04-27 | 2013-10-30 | 沈阳高精数控技术有限公司 | 一种嵌入式数控系统性能监测的方法 |
WO2014049104A1 (en) * | 2012-09-27 | 2014-04-03 | Siemens Aktiengesellschaft | A method, apparatus and system for optimizing test cases in fuzz testing |
CN103544102A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟方法及装置 |
CN103544103A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟并发方法及系统 |
CN104216829A (zh) * | 2014-08-29 | 2014-12-17 | 福建联迪商用设备有限公司 | 一种嵌入式模块并发测试的方法及系统 |
CN108399132A (zh) * | 2018-03-21 | 2018-08-14 | 腾讯科技(深圳)有限公司 | 一种调度测试方法、装置及存储介质 |
CN111290942A (zh) * | 2018-12-10 | 2020-06-16 | 北京京东尚科信息技术有限公司 | 压力测试方法、装置以及计算机可读介质 |
CN112463581A (zh) * | 2020-08-18 | 2021-03-09 | 清华大学 | 一种对分布式系统进行模糊测试的方法及系统 |
CN112506801A (zh) * | 2020-12-24 | 2021-03-16 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于注解的模糊测试方法 |
CN112948255A (zh) * | 2021-03-23 | 2021-06-11 | 北京鸿腾智能科技有限公司 | 分布式的内核模糊测试系统及方法 |
CN113438008A (zh) * | 2021-04-20 | 2021-09-24 | 北京控制工程研究所 | 一种适用于姿轨控系统多机容错架构的多机时标仿真方法 |
CN114528123A (zh) * | 2022-02-11 | 2022-05-24 | 北京天融信网络安全技术有限公司 | 数据访问方法、装置、设备及计算机可读存储介质 |
CN115292176A (zh) * | 2022-08-03 | 2022-11-04 | 成都卫士通信息产业股份有限公司 | 一种压力测试方法、装置、设备及存储介质 |
CN115795478A (zh) * | 2022-11-15 | 2023-03-14 | 国网新疆电力有限公司电力科学研究院 | 基于Kubernetes部署的分布式漏洞挖掘方法及装置 |
Non-Patent Citations (2)
Title |
---|
AFL模糊测试系统的优化方法研究;赵斌;信息科技辑;138-445 * |
面向多线程并发漏洞的定向模糊测试技术研究;谭卓波;信息科技(第11期);139-149 * |
Also Published As
Publication number | Publication date |
---|---|
CN116594884A (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9256516B2 (en) | Business process execution language program simulation | |
Felber et al. | The implementation of a CORBA object group service | |
EP2932370B1 (en) | System and method for performing a transaction in a massively parallel processing database | |
US20110047415A1 (en) | Debugging of business flows deployed in production servers | |
Lichtenwalter et al. | DisNet: A framework for distributed graph computation | |
CN100479458C (zh) | 调度基于模式的Web服务的方法、系统和装置 | |
CN100520732C (zh) | 性能测试脚本生成方法 | |
CN116594884B (zh) | 一种基于使用并发方式的模糊测试方法及装置 | |
US20070039000A1 (en) | Lock order determination method and system | |
Souza et al. | Data flow testing in concurrent programs with message passing and shared memory paradigms | |
CN105550028A (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
CN115221033A (zh) | 接口协议测试方法、装置、计算机可读介质及电子设备 | |
CN101969442B (zh) | 基于进程运行环境感知与迁移的网络模拟框架实现方法 | |
US6038394A (en) | Condition handling using script interpreters | |
van de Pol et al. | Formal Specification of JavaSpaces™ Architecture Using μ CRL | |
WO2001001256A1 (en) | Method and apparatus for static analysis of software code | |
CN107153663B (zh) | 一种域名资源缓存方法及装置 | |
Faasen | Intermediate uniformly distributed tuple space on transputer meshes | |
CN114201404A (zh) | 一种区块链网络的压力测试系统及方法 | |
CN109379453B (zh) | 一种DNS出口服务器ip地址的探测方法及系统 | |
CN113377680A (zh) | Dubbo服务测试系统及方法 | |
Fonyódi et al. | Evaluation of scalability in the Fission serverless framework | |
Cardoso et al. | MLFC: From 10 to 50 planners in the multi-agent programming contest | |
Rose et al. | A model for the coanalysis of hardware and software architectures | |
CN116909930B (zh) | 实现前端网页运行时变量异常检测的方法和装置 |
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 |