本发明涉及针对智能合约技术领域,特别是涉及一种基于图神经网络的智能合约漏洞自动化检测方法。
背景技术:
智能合约是运行在区块链上的程序,是一种执行合约条款的可计算交易协议,通过程序代码规定合约条款和触发条件,一旦满足出发条件合约便会自行执行。bert是2018年10月由googleai研究院提出的一种预训练模型。bert的全称是bidirectionalencoderrepresentationfromtransformers,可以使用bert从源码数据中提取特征训练出漏洞嵌入向量。
智能合约无法避免地存在安全漏洞,但频发的智能合约漏洞事件严重威胁着智能合约应用安全。当前智能合约漏洞检测的方法多基于专家经验的代码审计以及依赖已有的智能合约漏洞数据库,但是现涵盖的智能合约漏洞类型不完整,误报及漏报多,并且依赖人工复核。无法满足智能合约数量及规模不断扩大、功能日益复杂、漏洞挖掘难度大等挑战。
本发明基于图神经网络的智能合约漏洞自动化检测方法,本发明所提的智能合约漏洞检测方法具有更高的自动化程度,减少对领域专家知识的依赖,大大节约代码审计的成本,提高代码审计的效率。而相较于其它使用深度学习进行智能合约漏洞检测的方法,本方法基于图神经网络方法,使用智能合约代码属性图能更好地保留源代码中地语法和语义信息。
技术实现要素:
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种基于图神经网络的智能合约漏洞自动分析方法。其特征在于:如图1所示,包含以下步骤:
(1)智能合约虚拟机编译智能合约漏洞源码;
(2)构建智能合约代码属性图(cpg);
(3)使用bert预训练对代码属性图(cpg)进行预训练;
(4)创建图嵌入模型提取漏洞特征;
(5)训练漏洞检测模型;
(6)使用模型进行漏洞检测。
进一步地,所述步骤(1)具体为:搭建智能合约编译运行、环境,安装智能合约虚拟机,使用智能合约虚拟机进行编译智能合约源码,生成字节码。
进一步地,所述步骤(2)具体为:构建智能合约代码属性图(cpg),包含从编译器获取智能合约抽象语法树(ast)、函数控制流图(cfg)、程序依赖图(pdg)。
进一步地,所述步骤(3)具体为:先将代码属性图进输入到bert中进行预训练提取其中的语义信息,使用bert预训练模型对cpg行预训练,修改最顶层softmax层,微调参数。
进一步地,所述步骤(4)具体为:使用创建图嵌入模型提取漏洞特征,可以是使用消息传递神经网络(mpnn)、门控图神经网络(ggnn)等图神经网络模型进行计算代码属性图(cpg)。将包含语义信息的向量输入mpnn或ggnn中提取图结构信息,通过图神经网络模型对特征进行聚合,最后通过全连接层输出更新系数与重置系数。
进一步地,所述步骤(5)具体为:训练漏洞数据集分为测试集和验证集,当数据量比较小时,可以使用7:3训练数据和测试数据,或者6:2:2训练数据,验证数据和测试数据。训练过程需要进行调试,使用正则化技术、残差连接等方法。
进一步地,所述步骤(6)具体为:使用模型进行漏洞检测,需要对智能合约代码进行编译和构建智能合约代码属性图(cpg),构建方法与步骤(2)相同。传入训练好的图神经网络模型,图神经网络模型将给出输入的智能合约存在的漏洞。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。本发明的目标及特征考虑到如下结合附图的描述将更加明显,附图中:
图1为本发明基于图神经网络的智能合约漏洞自动化检测方法的流程图。
具体实施方式
为了使得本发明能够针对其发明要点更加明显易懂,下面将结合附图和实例对本发明作进一步的说明。在下面的描述中阐述了很多细节和具体实例,提供这些实例是为了能够更透彻地理解本发明,并且能够将本发明完整形象地传达给本领域的技术人员。虽然本发明能够以很多不同于此描述的其它方式实施,但是本领域技术人员可以在不违背本发明内涵的情况下做相应的推广,因此本发明不受下面公开的具体实例及具体附图所限制。
下面将附图结合具体实施方式对本发明的技术加以详细说明。
如图1所示,本发明提供的基于图神经网络的智能合约漏洞自动化检测方法包括有以下步骤:
s1.智能合约虚拟机v编译智能合约漏洞源码s,经过编译,生成字节码b。
s2.基于生成字节码b构建智能合约代码属性图c,该智能合约代码属性图c包含从编译器获取智能合约抽象语法树(ast)、函数控制流图(cfg)、程序依赖图(pdg)。
s3.使用bert预训练对代码属性图c进行预训练,先将代码属性图进输入到bert中进行预训练提取其中的语义信息,使用bert预训练模型对cpg行预训练,修改最顶层softmax层,微调参数。最终智能合约代码属性图c表示为g(v,a),v为图中所有的节点向量列表,a为图的邻接矩阵。
s4.使用消息传递神经网络(mpnn),从g(v,a)学习到更好的节点向量化表示,通过图神经网络模型对特征进行聚合,最后通过全连接层输出更新系数与重置系数。
s5.训练漏洞检测模型,训练漏洞数据集分为测试集和验证集,使用6:2:2训练数据,验证数据和测试数据。训练数据和测试集智能合约源码经过构建智能合约代码属性图处理后传入mpnn模型m,进行训练和测试。
s6.使用模型m进行漏洞检测,对待检测的智能合约代码进行编译和构建智能合约代码属性图(cpg),构建方法与步骤(2)相同。传入训练好的mpnn模型,mpnn模型将给出输入的智能合约存在的漏洞。
1.一种基于图神经网络的智能合约漏洞自动化检测方法,具体包括如下步骤:
(1)智能合约虚拟机编译智能合约漏洞源码;
(2)构建智能合约代码属性图(cpg);
(3)使用bert预训练方法对cpg代码属性图进行预训练;
(4)创建图嵌入模型提取漏洞特征;
(5)训练漏洞检测模型;
(6)使用模型进行漏洞检测。
2.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(1)智能合约虚拟机编译智能合约漏洞源码,可以是特定智能合约虚拟机,也可以是通用的智能合约虚拟机。
3.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(2)构建智能合约代码属性图(cpg),可以使用自动化工具进行构建,包含智能合约抽象语法树、控制流图、程序依赖图语义。
4.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(3)使用bert预训练模型对cpg代码属性图进行预训练,修改最顶层softmax层,微调参数。
5.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(4)使用创建图嵌入模型提取漏洞特征,可以是使用消息传递神经网络(mpnn)、门控图神经网络(ggnn)等图神经网络模型进行计算代码属性图(cpg)。
6.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(5)训练漏洞数据集分为测试集和验证集,训练过程需要进行参数调试。
7.根据权利要求6所述的智能合约漏洞训练的数据集,其特征在于,智能合约漏洞训练的数据集可以是来公开已知的漏洞,也可以是自行标记的漏洞。
8.根据权利要求1所述的一种基于图神经网络的智能合约漏洞自动化检测方法,其特征在于,所述步骤(6)使用模型进行漏洞检测,需要对智能合约代码进行编译和构建智能合约代码属性图(cpg)。