本发明涉及一种针对区块链网络进行模糊测试的方法,属于区块链安全。
背景技术:
1、目前针对区块链网络的模糊测试方法较少,已有方法通常是针对区块链网络的智能合约、共识算法、虚拟机或加密算法等某个模块进行测试,或者针对区块链网络的特定漏洞分析挖掘进行测试,显然都在测试覆盖方面存在局限。
2、申请公布号为cn115357902a的中国发明专利申请提出了一种面向区块链系统的模糊测试方法,其利用web3,人工分析区块链底层代码,定位弱点代码,构造弱点种子,并人工构造相应的弱点检测代码,然后利用模糊测试方法对区块链系统进行测试。显然其侧重于发现区块链系统特定方面的漏洞,很难覆盖区块链系统的整体情况,且测试覆盖率侧重于覆盖特定弱点相关代码,对于测试覆盖整体性未做考虑。例如未考虑测试区块链系统的查询区块链交易、查询区块、区块链最新状态、交易费查询等代码逻辑。另外,此方法通过web3发送网络数据进行模糊测试,这种通过网络协议进行模糊测试的做法效率较低。
3、申请公布号为cn114357459a的中国发明专利申请提出了一种面向区块链系统的信息安全检测方法,其对区块链系统的各个层进行安全检测,需要构建漏洞数据库,但其提及的模糊测试方法仅针对区块链系统的智能合约进行安全检测,测试覆盖率低。
技术实现思路
1、本发明的目的在于提供一种针对区块链网络进行模糊测试的方法,其解决了现有技术中针对区块链网络的测试覆盖率低的问题。
2、为了实现上述目的,本发明采用了以下技术方案:
3、一种针对区块链网络进行模糊测试的方法,包括步骤:
4、1)根据rpc接口传输的参数类型,生成用于模糊测试的优质种子,其中,所述优质种子用于表示支持所述rpc接口传输的参数类型的测试种子;
5、2)更改各所述rpc接口获取数据的方式;
6、3)利用所述优质种子对区块链网络进行模糊测试。
7、在具体实施时,步骤1)具体包括:
8、1-1)整理区块链网络涉及的各所述rpc接口传输参数所对应的所有类型,定义出参数类型集合p;
9、1-2)针对所述参数类型集合p的不同参数类型分别生成种子数据;
10、1-3)整理各所述rpc接口各自所对应的参数类型;
11、1-4)针对随机选择的所述rpc接口生成优质种子,建立用于模糊测试的种子数据库。
12、在具体实施时,较佳的方案是,所述步骤1-4)包括:随机选择一个所述rpc接口,基于所述步骤1-1)~1-3),针对所述rpc接口对应的各参数类型分别生成种子作为优质种子,存储并建立所述种子数据库。
13、在具体实施时,所述步骤2)具体包括:分析区块链网络涉及所述rpc接口的代码,找到关于所述rpc接口的网络数据接收代码,将所述网络数据接收代码更改为从本地模糊测试器获取,其中,针对区块链网络,每个节点部署一个模糊测试器作为所述本地模糊测试器。
14、在具体实施时,较佳的方案是,使用模糊测试器提供的编译工具对所述网络数据接收代码进行编译,生成插装后的区块链程序,以使所述插装后的区块链程序支持测试覆盖率监测,且尽可能覆盖区块链网络提供的所有所述rpc接口调用,引导模糊测试器调用所有所述rpc接口。
15、在具体实施时,较佳的方案是,所述rpc接口的所述网络数据接收代码的更改遵循以下逻辑:
16、从所述本地模糊测试器获取模糊测试数据;
17、随机选择一个所述rpc接口及其参数类型;
18、将所述模糊测试数据转换为所述rpc接口对应的参数类型;
19、调用rpc底层方法处理所述参数类型后通过选择的所述rpc接口传输进入。
20、在具体实施时,所述步骤3)具体包括:
21、3-1)为区块链网络部署模糊测试管理器,其中,所述模糊测试管理器包括节点管理模块、节点监控模块和测试报告模块;
22、3-2)所述节点管理模块控制多个节点执行模糊测试,其中:对于每个所述节点,将种子数据库和插装后的区块链程序作为本地模糊测试器的输入;
23、3-3)所述节点监控模块监控每个所述节点的运行情况,其中:如果所有所述节点的测试覆盖率在规定时间内不再增长,则停止测试;
24、3-4)所述测试报告模块收集每个所述节点的模糊测试信息,生成测试报告。
25、在具体实施时,较佳的方案是,在所述步骤3-2)中,选择的多个所述节点部署到不同的网络区域,其中,所述网络区域是指阿里云的不同服务器所在区域。
26、在具体实施时,较佳的方案是,所述节点管理模块间隔设定时间随机选择一个所述节点进行停止或开启操作。
27、在具体实施时,较佳的方案是,所述测试报告包括每个所述节点的ip信息、崩溃信息、引起崩溃的测试用例、测试覆盖率统计数据。
28、本发明的优点是:
29、本发明通过根据rpc接口生成优质种子、将模糊测试数据修改为从本地模糊测试器获取以及部署模糊测试管理器对区块链网络实施优化测试策略,有效实现了对区块链网络的较全面测试,提高了针对区块链网络的测试覆盖率,且测试效率高,响应快,实用性强。
1.一种针对区块链网络进行模糊测试的方法,其特征在于,包括步骤:
2.如权利要求1所述的针对区块链网络进行模糊测试的方法,其特征在于,所述步骤1)包括:
3.如权利要求2所述的针对区块链网络进行模糊测试的方法,其特征在于,所述步骤1-4)包括:随机选择一个所述rpc接口,基于所述步骤1-1)~1-3),针对所述rpc接口对应的各参数类型分别生成种子作为优质种子,存储并建立所述种子数据库。
4.如权利要求1所述的针对区块链网络进行模糊测试的方法,其特征在于,所述步骤2)包括:分析区块链网络涉及所述rpc接口的代码,找到关于所述rpc接口的网络数据接收代码,将所述网络数据接收代码更改为从本地模糊测试器获取,其中,针对区块链网络,每个节点部署一个模糊测试器作为所述本地模糊测试器。
5.如权利要求4所述的针对区块链网络进行模糊测试的方法,其特征在于,使用模糊测试器提供的编译工具对所述网络数据接收代码进行编译,生成插装后的区块链程序,以使所述插装后的区块链程序支持测试覆盖率监测,且覆盖区块链网络提供的所有所述rpc接口调用,引导模糊测试器调用所有所述rpc接口。
6.如权利要求5所述的针对区块链网络进行模糊测试的方法,其特征在于,所述rpc接口的所述网络数据接收代码的更改遵循以下逻辑:
7.如权利要求1所述的针对区块链网络进行模糊测试的方法,其特征在于,所述步骤3)包括:
8.如权利要求7所述的针对区块链网络进行模糊测试的方法,其特征在于,在所述步骤3-2)中,选择的多个所述节点部署到不同的网络区域,其中,所述网络区域是指阿里云的不同服务器所在区域。
9.如权利要求7所述的针对区块链网络进行模糊测试的方法,其特征在于,所述节点管理模块间隔设定时间随机选择一个所述节点进行停止或开启操作。
10.如权利要求7所述的针对区块链网络进行模糊测试的方法,其特征在于,所述测试报告包括每个所述节点的ip信息、崩溃信息、引起崩溃的测试用例、测试覆盖率统计数据。