本说明书一个或多个实施例涉及计算机软件,尤其涉及一种智能合约的漏洞检测方法、智能合约漏洞检测模型的构建方法、电子设备及计算机可读存储介质。
背景技术:
1、区块链是一个去中心化的共享账本和数据库。智能合约是部署在区块链上能自动执行的程序代码,能保证多个不受信任的主体之间协作交易的正常执行。部署在区块链平台上的智能合约的实际应用包括但不限于金融交易、供应链、线上银行、拍卖和游戏开发等等。近年来,利用智能合约包含的合约代码中的代码漏洞窃取非法经济利益的安全事件频频发生,使得检测智能合约包含的合约代码中的代码漏洞、防护智能合约安全变得至关重要。
技术实现思路
1、有鉴于此,本说明书一个或多个实施例提供一种智能合约的漏洞检测方法、智能合约漏洞检测模型的构建方法、电子设备及计算机可读存储介质。
2、为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
3、根据本说明书一个或多个实施例的第一方面,提出了一种智能合约的漏洞检测方法,包括:
4、获取与智能合约包含的合约代码对应的知识图谱,所述知识图谱包含用于记录代码指令的节点和用于表示连接的节点所记录的代码指令的程序执行方向的边;
5、确定与所述知识图谱中包含的各个节点对应的节点特征,并基于确定的节点特征构建与所述知识图谱对应的特征矩阵,以及,根据所述知识图谱中的边所指示的节点之间的连接关系构建与所述知识图谱对应的邻接矩阵;
6、将所述特征矩阵和所述邻接矩阵输入智能合约漏洞检测模型中,以由所述智能合约漏洞检测模型根据所述特征矩阵和所述邻接矩阵对所述智能合约包含的合约代码进行漏洞检测;
7、其中,所述智能合约漏洞检测模型基于若干智能合约分别对应的特征矩阵、邻接矩阵和用于描述智能合约包含的合约代码是否存在代码漏洞的标签进行有监督训练得到。
8、根据本说明书一个或多个实施例的第二方面,提出了一种智能合约漏洞检测模型的构建方法,包括:
9、获取与若干智能合约包含的合约代码分别对应的知识图谱、和与各个智能合约对应的用于描述所述智能合约包含的合约代码是否存在代码漏洞的标签;其中,所述知识图谱包含用于记录代码指令的节点和用于表示连接的节点所记录的代码指令的程序执行方向的边;
10、确定与所述知识图谱中包含的各个节点对应的节点特征,并基于确定的特征构建与所述知识图谱对应的特征矩阵,以及,根据所述知识图谱中的边所指示的节点之间的连接关系构建与所述知识图谱对应的邻接矩阵;
11、将若干所述智能合约对应的所述特征矩阵、所述邻接矩阵以及所述标签作为训练样本进行有监督训练得到智能合约漏洞检测模型;
12、其中,所述智能合约漏洞检测模型用于基于输入的与待检测的智能合约包含的合约代码对应的特征矩阵和邻接矩阵,对所述智能合约包含的合约代码进行漏洞检测。
13、根据本公开实施例的第三方面,提供一种电子设备,包括:
14、处理器;
15、用于存储处理器可执行指令的存储器;
16、其中,所述处理器执行所述可执行指令时,用于实现第一方面所述的方法。
17、根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
18、本说明书提出的一种智能合约的漏洞检测方法,通过知识图谱综合了智能合约中代码指令的执行流程和结构信息,知识图谱中的节点和边记录了代码指令及其执行方向,为模型提供了细致入微的合约代码表示;通过确定每个节点对应的节点特征并构建了特征矩阵,捕获了每个代码指令的属性,为漏洞检测提供了详细的输入信息;并且构建了用于表示节点之间的连接关系的邻接矩阵,有助于保留智能合约的整体图结构,使模型能够更好地理解代码的关联性;将构建的特征矩阵和邻接矩阵输入智能合约漏洞检测模型,能够使模型全面地捕捉智能合约中代码指令的执行流程和结构信息,提高了模型对代码特征的理解,使得模型能够实现对合约代码中细粒度漏洞的检测,提高了漏洞检测的准确性。
19、本说明书提出的一种智能合约漏洞检测模型的构建方法,基于智能合约的知识图谱构建特征矩阵和邻接矩阵,能够全面地捕捉智能合约中代码指令的执行流程和结构信息,提高了模型对代码特征的理解。利用有监督训练,使得模型能够学习到智能合约中存在的代码漏洞的模式,从而在未知数据上进行准确的漏洞检测。并且由于使用了知识图谱,模型的决策基于图形结构,使其更具可解释性,有助于理解漏洞检测的原因,有利于提高漏洞检测的准确性。
20、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
1.一种智能合约的漏洞检测方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,与所述知识图谱中包含的各个节点对应的节点特征包括基于以下至少一种信息确定的特征:
3.根据权利要求2所述的方法,其特征在于,基于所述节点记录的代码指令中隶属于预设的指令类型的代码指令的数量,确定与所述知识图谱中包含的节点对应的节点特征,包括:
4.根据权利要求3所述的方法,其特征在于,所述预设的指令类型包括多种类型;
5.根据权利要求4所述的方法,其特征在于,所述预设的指令类型包括以下至少一种:算数类型、存储类型、调用类型。
6.根据权利要求2所述的方法,其特征在于,基于节点的子孙节点的数量,确定与所述知识图谱中包含的节点对应的节点特征,包括:
7.根据权利要求2所述的方法,其特征在于,基于检测所述节点记录的代码指令是否包含存在代码漏洞的代码指令的第一检测结果,确定与所述知识图谱中包含的节点对应的节点特征,包括:
8.根据权利要求7所述的方法,其特征在于,所述预设的代码漏洞包括多种类型的代码漏洞;
9.根据权利要求8所述的方法,其特征在于,所述代码漏洞包括以下示出的任一或者多种类型:可重入漏洞、时间戳依赖漏洞、整数溢出漏洞。
10.根据权利要求2所述的方法,其特征在于,所述第二检测结果为检测所述节点记录的代码指令是否包含用于描述代码保护机制的代码指令,并且包含的所述用于描述代码保护机制的代码指令是否满足预设条件的检测结果;
11.根据权利要求10所述的方法,其特征在于,基于检测所述节点记录的代码指令是否包含用于描述代码保护机制的代码指令的第二检测结果,确定与所述知识图谱中包含的节点对应的节点特征,包括:
12.根据权利要求11所述的方法,其特征在于,代码保护机制包括多种类型的代码保护机制;
13.根据权利要求1至12任意一项所述的方法,其特征在于,所述节点所记录的代码指令包括对智能合约中的字节码进行反编译所得到的操作码。
14.根据权利要求1至12任意一项所述的方法,其特征在于,所述基于提取到的节点特征构建与所述知识图谱对应的特征矩阵,包括:
15.根据权利要求14所述的方法,其特征在于,初始化的特征矩阵的行数根据所述知识图谱包含的节点的数量确定,以及初始化的特征矩阵的列数根据所述知识图谱包含的节点的特征的维度确定。
16.根据权利要求1所述的方法,其特征在于,所述根据所述知识图谱中的边所指示的节点之间的连接关系构建与所述知识图谱对应的邻接矩阵,包括:
17.根据权利要求16所述的方法,其特征在于,所述邻接矩阵的行数和列数等于所述知识图谱包含的节点的数量;
18.根据权利要求1所述的方法,其特征在于,所述智能合约漏洞检测模型包括基于图注意力神经网络构建的机器学习模型。
19.根据权利要求1所述的方法,其特征在于,所述知识图谱包括控制流图。
20.一种智能合约漏洞检测模型的构建方法,其特征在于,包括:
21.根据权利要求20所述的方法,其特征在于,所述若干智能合约包含合约代码不存在漏洞的智能合约和合约代码存在指定的漏洞类型的智能合约;所述标签为二分类标签,所述标签包括用于描述合约代码无漏洞的第一类标签、以及用于描述合约代码存在指定的漏洞类型的第二类标签;
22.一种电子设备,其特征在于,包括:
23.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1至21中任一项所述方法的步骤。