当前位置: 首页 > 专利查询>广州大学专利>正文

一种基于深度学习的区块链智能合约漏洞检测方法技术

技术编号:24575582 阅读:38 留言:0更新日期:2020-06-21 00:20
本发明专利技术涉及以太坊智能合约安全技术领域,为基于深度学习的区块链智能合约漏洞检测方法,包括步骤:将训练集中的字节码反编译为操作码,对操作码切割后,形成切片矩阵;将切片矩阵与其对应标签输入到卷积神经网络进行训练,最终得到漏洞检测模型;对待检测的智能合约,提取其字节码,然后同样通过反编译、切割,提取字节码的切片特征形成切片矩阵,以切片矩阵作为漏洞检测模型的输入,检测智能合约是否存在漏洞。本发明专利技术检测方法灵活,准确度较高。

A vulnerability detection method of blockchain smart contract based on deep learning

【技术实现步骤摘要】
一种基于深度学习的区块链智能合约漏洞检测方法
本专利技术涉及以太坊智能合约安全
,特别地涉及一种基于深度学习的区块链智能合约漏洞检测方法。
技术介绍
智能合约是一种计算机协议,当确认满足某些触发条件时,无需第三方或任何中央机构的干预,即可代表各方在区块链上自动激活。区块链的去中心化,不可篡改等特征契合了智能合约对于安全可靠等方面的需求。区块链(如以太坊)智能合约的引入创新,使得区块链得到里程碑式的发展,在区块链上发布的智能合约日益增多。智能合约的编写与传统的编程存在一定程度的不同,这极易造成一些潜在的漏洞,如has_short_address漏洞、has_flows漏洞等。并且由于智能合约常常带有金融属性,携带着价值巨大的币,这导致某些恶意人员极易利用智能合约的漏洞来攻击并从中牟利。因此,检测智能合约漏洞成了一个很重要的研究方向。目前对于智能合约的漏洞检测,已经有学者或者企业提出一些检测方法,并且开发出相应的工具了。近来有人提出一种框架,可以将solidity源码和合约字节码转换成F*编写的代码,基于F*来检测合约;但它具有一定的局限性,不支持solidity的许多语法特征,测试过程中只能评估部分智能合约数据(例如只能评估396份合同中的46份)。
技术实现思路
为了解决现有技术存在的问题,本专利技术提出一种基于深度学习的区块链智能合约漏洞检测方法,利用智能合约的字节码生成合约特征进行检测,因此针对已经部署到区块链上或者未部署到区块链上的智能合约,均可进行特定漏洞的检测,应用范围广泛。根据本专利技术的基于深度学习的区块链智能合约漏洞检测方法,包括以下步骤:S1、将训练集中的字节码反编译为操作码,对操作码切割后,形成切片矩阵;S2、将切片矩阵与其对应标签输入到卷积神经网络进行训练,最终得到漏洞检测模型;S3、对待检测的智能合约,提取其字节码,然后同样通过反编译、切割,提取字节码的切片特征形成切片矩阵,以切片矩阵作为漏洞检测模型的输入,检测智能合约是否存在漏洞。与现有技术相比,本专利技术取得了如下有益效果:1、利用智能合约的字节码生成合约特征进行检测,因此针对已经部署到区块链上或者未部署到区块链上的智能合约,均可进行特定漏洞的检测,应用范围广泛。2、使用切片矩阵作为合约特征,输入到卷积神经网络对检测模型进行训练,大大提高了检测模型的准确率。首先将智能合约的操作码进行反编译,得到合约操作码;将合约操作码进行切片工作并且对分片中每种操作码的数量进行统计,从而得到一份合约的切片矩阵;将切片矩阵作为卷积神经网络的输入特征并对检测模型进行训练;将训练出来的检测模型用k折交叉验证法检测模型的性能并修改模型参数,从而训练出性能最优的检测模型。附图说明图1是本专利技术漏洞检测的原理流程图;图2是本专利技术切片矩阵的生成流程图。具体实施方式下面结合实施例及附图对本专利技术作进一步详细的描述,但本专利技术的实施方式不限于此。实施例如图1所示,在本实施例中,基于深度学习的区块链智能合约漏洞检测方法,具体步骤包括:S1、将训练集中的字节码反编译为操作码,对操作码切割后,提取字节码的切片特征形成切片矩阵;智能合约漏洞往往只出现在一个或几个函数中,而智能合约的其他部分不存在漏洞。“RETURN”在操作码中往往代表着相邻两个函数的分割,所以本专利技术将智能合约的字节码以“RETURN”作为分割点分割成多个切片,以此将不同函数的操作码特征分离。参见图2,具体生成步骤如下:S11、使用诸如solidity官方的evm工具对字节码进行反编译,16进制的字节码会反编译为操作码与操作数,例如“60606080”可以反编译为“push0x60push0x80”,其中“push”为操作码,“0x60,0x80”为操作数;S12、去除操作数,只保留操作码;S13、操作码,以某个特定的操作码为直接的分界点,例如“return”,“jump”等操作码,将剩下的操作码分割成多块,每块分割出来的操作码集合称为操作码切片;本实施例选择“RETURN”操作码为相邻两个函数直接的分界线。S14、对单个操作码切片进行操作码出现数量的统计,没有出现的操作码记为0,并按操作码首字母进行排列,形成单个操作码切片的特征。假如智能合约代码只有4种操作码,其中某个切片“add”出现了6次,“and”出现了3次,“add”和“and”按照首字母排列分别排第1、2位,那么这个切片的特征就可以表示为“6,3,0,0”(长度为4,其他操作码未出现为0),在本实施例中,统计有75个操作码,形成长度为75的向量。S15、将所有操作码切片的特征按顺序排列,每一行为单个操作码切片的特征,形成切片矩阵。为保证输入的值的规模相同,可使用“0”进行填充。本实施例中,数据集的单个智能合约的最大切片数为82,因此矩阵规模为82X75,即82个函数,单个函数有75种操作码。由于操作码分割时,是以相邻两个函数直接的分界线进行分割,所以最终形成的切片矩阵中,一行代表一个函数的特性。S2、将切片矩阵与其对应标签输入到卷积神经网络进行训练,最终得到漏洞检测模型;卷积神经网络是一种包含卷积运算且结构复杂的前向神经网络。它是深度学习的代表性算法之一。它是一种专门用来处理具有相似网格结构数据的神经网络。其网络结构可能含有多层的卷积层、池化层和全连接层。卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核。在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。卷积层、池化层和全连接层的参数通过反向传播算法进行更新。经过多轮更新,模型达到本地最优。本实施例中,卷积神经网络有一个输入层、一个卷积层、若干全连接层和一个输出层,与常规的卷积神经网络不同之处在于该网络不包括池化层,并且卷积核为1X75,这样可以不破坏切片矩阵一行代表一个函数的特性。在本专利中,切片矩阵中每一行代表着一个函数的特征,卷积核为1X75意味着只对单行进行卷积,也就对单个函数的特征进行卷积,池化是对特征的降采样,但是在切片矩阵中单行特征都是独立的,且有效的,对2行以上特征的池化便会破坏这种独立性和有效性,因此尽量不使用池化。S3、对待检测的智能合约提取其字节码,然后同样通过反编译、切割,提取字节码的切片特征形成切片矩阵,以切片矩阵作为漏洞检测模型的输入,检测智能合约是否存在漏洞。提取字节码的切片特征,具体步骤为:对字节码进行反编译,反编译结果包括操作码与操作数;去除操作数,只保留操作码;根据相邻两个函数直接的分界线(本实施例选取“RETURN”操作码为相邻两个函数直接的分界线),将操作码分割为多个操作码切片;对单个操作码切片进行操作码出现数量的统计,没有出现的操作码记为0,并按操作码首字母进行排列,形成单个操作码切片的特征;将所有操作码切片的特征按切片前的顺序排列,每一行为单个操作码切片的特征,形成切片矩阵。上本文档来自技高网...

【技术保护点】
1.一种基于深度学习的区块链智能合约漏洞检测方法,其特征在于,包括以下步骤:/nS1、将训练集中的字节码反编译为操作码,对操作码切割后,形成切片矩阵;/nS2、将切片矩阵与其对应标签输入到卷积神经网络进行训练,最终得到漏洞检测模型;/nS3、对待检测的智能合约,提取其字节码,然后同样通过反编译、切割,提取字节码的切片特征形成切片矩阵,以切片矩阵作为漏洞检测模型的输入,检测智能合约是否存在漏洞。/n

【技术特征摘要】
1.一种基于深度学习的区块链智能合约漏洞检测方法,其特征在于,包括以下步骤:
S1、将训练集中的字节码反编译为操作码,对操作码切割后,形成切片矩阵;
S2、将切片矩阵与其对应标签输入到卷积神经网络进行训练,最终得到漏洞检测模型;
S3、对待检测的智能合约,提取其字节码,然后同样通过反编译、切割,提取字节码的切片特征形成切片矩阵,以切片矩阵作为漏洞检测模型的输入,检测智能合约是否存在漏洞。


2.根据权利要求1所述的区块链智能合约漏洞检测方法,其特征在于,步骤S1包括:
S11、对字节码进行反编译,反编译的结果包括操作码与操作数;
S12、去除操作数,只保留操作码;
S13、根据相邻两个函数直接的分界线,将操作码分割为多个操作码切片;
S14、对单个操作码切片进行操作码出现数量的统计,没有出现的操作码记为0,并按操...

【专利技术属性】
技术研发人员:李进邢慈湃陈卓容陈乐昕
申请(专利权)人:广州大学
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1