本发明涉及并发模糊测试,特别涉及一种基于容器技术的大规模并发模糊测试方法。
背景技术:
1、软件技术飞速发展,引入一系列安全问题,软件复杂度越来越高,导致安全防护难度越来越大。模糊测试作为一项动态检测技术,是软件测试、漏洞挖掘有效的手段之一。模糊测试其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言失败,以发现可能的程序错误,并结合程序分析、运行时反馈等方法高效地生成测试用例,减少测试量。目前模糊测试技术在软件测试、漏洞挖掘上的优势已经在多个应用领域得到验证,包括但不限于网络应用程序、桌面应用、操作系统内核、嵌入式设备、浏览器、web应用、车联网、移动端应用。国内外多家厂商,如google、微软,也将模糊测试技术应用到内部开发流程中。
2、传统的模糊测试需要先准备主机(物理机或者虚拟机),创建网络,在多个主机重复人工拉取软件代码,人工执行构建、插桩,启动测试。如此复杂冗长的过程极易出错,且效率低下,缺点明显。
3、首先是安全问题。主要包括资源安全和系统安全,如果被测程序或者模糊测试引擎存在质量问题,或者包含恶意代码,可能消耗大量cpu或者内存、删除或者更改重要文件,从而影响其它软件运行,甚至导致系统崩溃。
4、其次是资源隔离问题。当有多个模糊测试运行在同一主机,可能造成主机上会出现资源竞争、死锁等问题,模糊测试无法按照预期稳定运行。与此同时,正常运行的模糊测试,也可能干扰其它软件正常运行;
5、再次是软件依赖环境污染问题。模糊测试需要一致、纯净的测试环境,在同一个主机启动多个模糊测试,可能污染软件依赖环境,造成测试不准确甚至无法正常运行。
6、最后是性能、效率问题。人工操作需付出大量时间和精力,难以快速做到大规模并行模糊测试。人工操作过程复杂,且耗时,难以做到标准化,容易出错,也难以排查错误,无法进行大规模并行模糊测试。实现模糊测试自动化、标准化、流水化直接关系到测试效率的高低。
技术实现思路
1、本发明提供了一种基于容器技术的大规模并发模糊测试方法,以解决背景技术所提到的技术问题。
2、为达到上述目的,本发明的技术方案是这样实现的:
3、本发明提供了一种基于容器技术的大规模并发模糊测试方法,包括如下步骤:
4、s1、搭建代码托管平台以及私有镜像仓库;在代码托管平台内存储待测目标以及目标构建脚本,在镜像中安装模糊测试引擎、公共服务,并把镜像存储到私有镜像仓库;
5、s2、在主机上安装容器服务并搭建kubernetes集群;
6、s3、在kubernetes集群的服务器节点上创建控制节点pod1,把待测目标、目标构建脚本、平台构建脚本、模糊测试启动脚本部署到控制节点pod1中,完成控制节点pod1的部署;并启动控制节点pod1;
7、s4、生成模糊测试执行节点信息;
8、s5、在kubernetes集群的服务器节点上创建多个执行节点pod2,把待测目标、目标构建脚本、平台构建脚本、模糊测试启动脚本部署到每个执行节点pod2中,完成多个执行节点pod2的部署,并分别启动多个执行节点pod2;
9、s6、建立执行节点pod2与控制节点pod1通信,共同进行模糊测试,直到任务完成。
10、进一步地,所述s1具体包括如下步骤:
11、s11、搭建代码托管平台,并利用代码托管平台存储待测目标以及目标构建脚本,代码托管平台包括多个代码仓库,目标构建脚本存储于指定的代码仓库的根目录中,并在数据库中记录模糊测试任务与代码仓库的关联信息;
12、s12、使用harbor搭建私有镜像仓库,把模糊测试引擎、公共服务安装到镜像中,再把镜像存储到镜像仓库,然后把镜像仓库推送到私有镜像仓库。
13、进一步地,所述s1中的代码托管平台在云主机或者物理主机上搭建,代码托管平台用于储存待测目标以及目标构建脚本。
14、进一步地,所述s1中的镜像安装了多个公共服务,多个公共服务包括模糊测试引擎、ssh服务、启动模糊测试引擎脚本、停止模糊测试引擎脚本,镜像存储于私有镜像仓库中。
15、进一步地,所述s2中的kubernetes集群是一种开源的容器编排和管理平台,管理多个服务器节点,每个服务器节点上均安装有容器服务。
16、进一步地,所述s2中的容器服务为docker容器服务或者podman容器服务。
17、进一步地,所述s3具体包括如下步骤:
18、s31、从模糊测试请求参数中,获取并行总数、镜像信息,任务id,根据并行总数计算控制节点规格,生成控制节点的pod定义信息;
19、控制节点的pod定义信息包括pod名称、接收构建结果、cpu、内存规格,模糊测试结果的服务器地址,其中pod名称包括任务id;
20、s32、根据控制节点的pod定义信息在kubernetes集群的服务器节点上,从私有镜像仓库中拉取docker镜像并创建控制节点pod1,从而生成模糊测试需要的容器;
21、s33、创建kubernetes nodeport服务,连通控制节点pod1中的ssh服务;
22、s34、从代码托管平台中下载待测目标以及目标构建脚本,并通过nodeport服务和sshpass、ssh技术,把待测目标以及目标构建脚本部署到控制节点pod1中;
23、s35、通过nodeport服务和sshpass、ssh技术,把平台构建脚本部署到控制节点pod1中;
24、s36、通过nodeport服务和sshpass、ssh技术,连接到控制节点pod1中执行平台构建脚本;平台构建脚本执行目标构建脚本,通过平台api返回构建结果信息;
25、s37、通过nodeport服务和sshpass、ssh技术,连接到控制节点pod1中执行模糊测试启动脚本;
26、s38、控制节点pod1中的模糊测试引擎通过平台api获取模糊测试配置文件;
27、s39、执行控制节点pod1中的模糊测试引擎。
28、进一步地,所述s31中控制节点规格通过以下公式计算得到:
29、c1=p/n1
30、其中c1为控制节点规格,c1为整数,且>=4,p为并行总数,n1是衡量模糊测试引擎产生种子数量的一个数值。
31、进一步地,所述s4具体包括如下步骤:
32、s41、从模糊测试请求参数中,获取并行总数、单个容器最大并行数、镜像信息、任务id;
33、s42、计算执行节点容器规格,生成模糊测试执行节点列表;
34、s43、根据单个容器最大并行数,计算执行节点规格;
35、执行节点规格采用如下公式计算:
36、c2=p+n2
37、其中p为并行总数,c2为cpu数量,n2是系统消耗的cpu数量。
38、进一步地,所述s5具体包括如下步骤:
39、s51、获取待部署模糊测试的服务器计算节点,以及s3中已经完成部署的控制节点pod1的相关信息,并根据并行数、镜像信息、任务id,生成执行节点的pod定义信息,执行节点的pod定义信息中有控制节点pod1的pod ip信息;
40、s52、根据执行节点的pod定义信息在kubernetes集群的节点上,从私有镜像仓库中拉取docker镜像创建执行节点pod2,生成模糊测试需要的执行节点容器;执行节点pod2通过控制节点pod1的ip信息和控制节点pod1进行通信;
41、s53、创建kubernetes nodeport服务,连通执行节点pod2中的ssh服务;
42、s54、从代码托管平台下载目标及其构建脚本,通过nodeport服务和sshpass、ssh技术,把待测目标及其构建脚本部署到执行节点pod2中;
43、s55、通过nodeport服务和sshpass、ssh技术,把平台构建脚本部署到执行节点pod2中;
44、s56、通过nodeport服务和sshpass、ssh技术,连接到执行节点pod2中执行平台构建脚本;平台构建脚本执行目标构建脚本,通过平台api返回构建结果信息;
45、s57、通过nodeport服务和sshpass、ssh技术,连接到执行节点pod2中执行模糊测试启动脚本;
46、s58、执行节点模糊测试引擎通过平台api获取模糊测试配置文件,配置文件,包含了评测请求参数,和接收模糊测试结果的平台服务器地址等信息,开启执行节点pod2中的模糊测试引擎;
47、s59、如果该模糊测试有多个执行节点pod2,为每个执行节点pod2执行s51-s58,对多个执行节点pod2的执行是并行的。
48、本发明的有益效果:
49、1、本发明提供了一种基于容器技术的大规模并发模糊测试方法,适用于需要进行模糊测试的各种应用场景。由于kubernetes集群具备管理容器集群的能力,能够实现容器集群的负载均衡、任务分发、资源配额及安全控制等功能,且本身扩展性好,便于扩展集群的负载能力;通过使用容器技术,将模糊测试引擎及其依赖打包成镜像从而增加了一致性和可移动性,便于分发部署,快速部署模糊测试。
50、2、本发明在容器技术中提供了命名空间隔离,即容器中的主机名、进程号、用户、文件挂载点、网络是隔离的,运行在不同pod容器中的模糊测试互不干扰,也不干扰运行在主机中的系统应用,从而解决了安全问题。容器技术控制组提供的资源限制,保证了每个测试任务的最小最大资源,保证了测试任务的稳定运行。容器技术使用镜像启动,得到的是未经污染的干净的测试环境,保证了测试的准确性。通过kubernetes集群对资源进行有效管理、调度,通过模糊测试的标准化、自动化,实现了大规模并行模糊测试稳定、高效支持。
51、3、本发明基于容器技术,支持数千节点的大规模并行模糊测试方法,大大提高了模糊测试效率和生产力。
1.一种基于容器技术的大规模并发模糊测试方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s1具体包括如下步骤:
3.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s1中的代码托管平台在云主机或者物理主机上搭建,代码托管平台用于储存待测目标以及目标构建脚本。
4.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s1中的镜像安装了多个公共服务,多个公共服务包括模糊测试引擎、ssh服务、启动模糊测试引擎脚本、停止模糊测试引擎脚本,镜像存储于私有镜像仓库中。
5.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s2中的kubernetes集群是一种开源的容器编排和管理平台,管理多个服务器节点,每个服务器节点上均安装有容器服务。
6.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s2中的容器服务为docker容器服务或者podman容器服务。
7.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s3具体包括如下步骤:
8.根据权利要求7所述的大规模并发模糊测试方法,其特征在于,所述s31中控制节点规格通过以下公式计算得到:
9.根据权利要求1所述的大规模并发模糊测试方法,其特征在于,所述s4具体包括如下步骤:
10.根据权利要求1至9任一项所述的大规模并发模糊测试方法,其特征在于,所述s5具体包括如下步骤: