APP下载

基于胶囊网络和注意力机制的智能合约漏洞检测方法

2023-06-30陆璐赖锦雄

关键词:源代码字节合约

陆璐 赖锦雄

基于胶囊网络和注意力机制的智能合约漏洞检测方法

陆璐 赖锦雄

(华南理工大学 计算机科学与工程学院,广东 广州 510006)

近年来,随着智能合约的数量越来越多,因合约漏洞而造成的经济损失愈发严重,智能合约的安全性越来越受到广泛的关注。基于深度学习的漏洞检测方法能够解决早期传统智能合约漏洞检测方法检测效率低、准确率不足的问题,但大多现有基于深度学习的漏洞检测方法都是直接使用智能合约源代码、操作码序列或字节码序列作为深度学习模型的输入,会因引入过多无效信息而削弱有效信息。为此,文中提出了一种基于胶囊网络和注意力机制的智能合约漏洞检测方法。考虑到程序的执行时序信息,文中通过提取智能合约的关键操作码序列作为源代码特征,然后利用胶囊网络和注意力机制的混合网络进行训练,其中胶囊网络模块用于提取智能合约的上下文信息以及局部与整体的联系,注意力机制用于给不同的操作码按照其重要程度分配不同的权重。实验结果表明,文中提出的算法在智能合约数据集中的1分数和准确率分别为94.48%和97.15%,与其他传统检测方法和深度学习方法相比有较明显的性能提升。

智能合约;关键操作码序列;胶囊网络;注意力机制

近年来,以太坊中的智能合约被创新性地应用在多个领域,如数字货币、产品溯源、企业征信等。智能合约的广泛应用促进了去中心化金融交易的快速发展,但其安全漏洞问题也面临了极大的挑战。如在DAO事件[1]中,攻击者利用Solidity[2]中的扣除与转账的顺序错误,多次调用了转账函数,而扣除函数始终没有调用,导致了6 000万美元的损失。Parity多签名钱包先后遭遇了两次安全漏洞的困扰,分别导致了3 000万美元和1.52亿美元的损失。因此智能合约漏洞检测研究得到了广泛的关注,目前的检测方法主要分为传统的漏洞检测方法和基于深度学习的检测方法。

传统的智能合约自动化漏洞检测方法主要分为符号执行、模糊测试和形式化验证3种。Luu等[3]提出了一种基于符号执行的漏洞检测方法Oyente,该方法从智能合约字节码层面出发,通过符号执行来捕获与定义的漏洞类型的特征相匹配的痕迹,进而确定智能合约是否具有漏洞。符号执行技术虽然能够得到精确的程序执行路径,但有很大几率会出现约束求解困难的问题。ContractFuzzer[4]是一种针对以太坊智能合约安全漏洞检测的模糊测试方法。该方法首先在本地部署离线的私有链,接着分析合约的应用程序二进制接口(ABI)和字节码,生成模糊测试输入和变异输入,最后将生成的数据输入到对应的ABI接口中,分析执行日志检测漏洞。模糊测试在检测智能合约漏洞的表现可以称为合格,但由于智能合约相较于传统的应用程序具有很多不同的特征,而智能合约这些独有的特征会使模糊测试得到的结果达不到预期。Kalra等[5]提出了一种基于抽象解释和符号模型的智能合约形式化验证方法ZEUS。该方法先静态分析智能合约源代码,在正确的程序点插入Assert语句;接着将智能合约源代码转换为低级中间表示LLVM[6]位码,并利用XACML编写公平的验证标准,再利用SeaHorn[7]结合CHC验证智能合约的安全性。形式化验证方法虽然能够提取到更深层的语义信息,但这种漏洞检测方法需要人为分析,制定一些模式、规则,也需要进行检验,从而导致检测效率低下。

随着深度学习的快速发展,人们试图结合深度学习进行智能合约漏洞检测方法的研究,目前已有很多成功的典例。其中,Zhuang等[8]利用图神经网络技术,根据程序语句之间的数据依赖关系和控制依赖关系,将智能合约的源代码描述为合约图,捕捉其时间执行轨迹,并设计了一个消除阶段来规范合约图,提出了一个无度GCN模型和时间消息传播网络模型TMP,实验结果显示该方法在检测重入漏洞、时间戳依赖和无限循环漏洞方面取得很好的效果。随后,Liu等[9]对该方法进行了改进,结合专家定义的漏洞匹配模式,对数据流的关键变量进行建模,并以TMP作为训练模型,实验结果显示该方法显著提升了漏洞检测性能。沈晨凯[10]将智能合约转换为抽象语法树后,直接对抽象语法树进行中序遍历得到一个结构化序列,提出了基于单头注意力机制和多头注意力机制的网络模型,实验结果表明该方法取得不错的检测效果。Wang等[11]将Solidity源代码转换成操作码序列,通过去除无用的操作码及将类似的操作码归为一类进行简化,并利用-gram算法提取特征,最后利用多个机器学习方法进行训练得到检测模型。Tann等[12]提出了一种用以检测智能合约漏洞的序列学习方法,该方法主要关注以太坊的智能合约(编写语言为Solidity),将智能合约源代码转换成字节码序列后,为每个字节码进行独热编码,得到一个唯一向量,然后将向量化后的字节码序列作为长短期记忆神经网络(LSTM)的输入,在实验中取得较好的检测结果。但这种方法将整个合约的字节码序列作为输入,引入了一些无效信息,同时对字节码进行独热编码,忽略了字节码之间的关联。

综上所述,基于深度学习的漏洞检测方法能够解决传统自动化漏洞检测方法检测时间长、准确度不高的问题。但大多现有基于深度学习的检测方法,都是直接使用智能合约源代码、操作码序列或字节码序列作为深度学习模型的输入,这样会因引入过多无效信息而削弱有效信息。为此,文中从智能合约操作码层面入手,根据漏洞原理分析选取适合的操作码作为关键操作码,并根据重组方法得到关键操作码序列,提出了基于胶囊网络[13]和注意力机制[14]的网络模型,用于学习特征序列中的漏洞信息。该网络模型利用注意力机制为不同的操作码分配重要性权重,并对胶囊网络的结构进行改进,以学习操作码序列中的全局语义信息和局部语义信息。

1 智能合约源代码特征提取

文中提取的智能合约源代码特征为智能合约的关键操作码序列特征。图1所示为关键操作码序列特征的提取流程图。

图1 关键操作码序列特征的提取流程

Solidity合约源代码在执行前需要先编译,编译后得到一串基于堆栈的字节码。而以太坊虚拟机(EVM)被定义为一种堆栈式虚拟机,通过与操作数栈进行交互来执行运算,因此真正在EVM执行的就是前面编译得到的一串字节码。在以太坊白皮书中,规定了字节数值与指令类型(即操作码)的对应关系,同时制定了划分操作码和操作数据的规则,每个操作码会指定其需要操作多少字节的数据。例如,字节数值0x60对应操作码PUSH1,需要操作1 B数据,字节数值0x61对应操作码PUSH2,需要操作2 B数据。文中提出的关键操作码序列特征提取模块主要有3个步骤:

(1)使用Solc编译器将Solidity源代码编译成字节码序列,再根据以太坊白皮书中字节码和操作码的转换规则将字节码序列转换成操作码序列。图2为智能合约的转换流程。

图2 智能合约的转换流程

(2)对智能合约漏洞类型产生的原理进行分析,选取与漏洞产生相关的关键操作码。例如,未检查的外部调用漏洞,Solidity底层实现了多个外部调用函数来转移以太币或者调用外部合约函数。当这些函数的调用出现问题,如没有被正确调用、遇到网络异常或没有充足的gas时,只会返回False而没有抛出异常。如果调用者未对返回值进行核查,则可能导致代码执行逻辑出现错误,从而埋下漏洞。与外部调用函数address.call()、address.delegatecall()相关的是操作码CALL、DELEGATECALL,因此选取其作为关键操作码。选取完关键操作码后,需要对操作码序列进行重组,即将选取的关键操作码的前后(为超参数,后续通过实验确定)个操作码作为关键操作码的上下文序列,若相邻两个关键操作码的上下文序列有重合,则只保留一份上下文序列,最后得到关键操作码序列。文中根据漏洞原理的分析选取了ADDRESS、BALANCE、ORIGIN、CALLER、CALLDATALOAD、DELEGATECALL、BLOCKHASH、TIMESTAMP、GASLIMIT、CALLVALUE、CALL、GAS、CALLCODE、GASPRICE、SELFDESTRUCT作为关键操作码。

(3)将步骤(1)、(2)处理后得到的关键操作码序列输入到代码嵌入向量学习模块,而每个代码片段则嵌入到一个固定维度的数值向量中,最后得到关键操作码特征向量。代码嵌入向量学习模块使用连续词袋模型CBOW作为代码嵌入学习模型,并将层次化Softmax作为加速训练的手段,以降低CBOW模型训练时的计算量。

2 网络结构

文中提出了基于胶囊网络和注意力机制的智能合约漏洞检测网络CapsNet-Att,其结构示意图如图3所示。

图3 CapsNet-Att网络结构

2.1 胶囊网络模块

胶囊网络(CapsNet)模块主要包括卷积层、主胶囊层、卷积胶囊层和全连接胶囊层,卷积层用于提取智能合约的局部特征,主胶囊层和卷积胶囊层用于提取局部和整体的位置关系。

2.1.1卷积层

2.1.2主胶囊层

=(b+1)(3)

式中,()是非线性压缩函数,1是胶囊偏置项。对于所有的个滤波器,生成的胶囊特征映射可以表示为

式中,的维度为(-+ 1)××。

2.1.3动态路由

在网络模型CapsNet-Att中使用的是共享权重矩阵。

动态路由其实就是使用迭代的方法将每个胶囊的输出映射到适当的父胶囊中,达到动态学习、调整的目的:

胶囊网络正是利用动态路由策略来调整每个子胶囊和父胶囊之间的联系,从而达到自动学习部分与整体关系的目的。

假设迭代次数为,每一轮的迭代中动态路由算法流程如下:

接着,采用点积的形式融合两个权重因子,并采用Softmax函数进行计算,得到最终的连接强度的耦合系数为

式中,a是父胶囊的存在概率,Squash()是一个非线性函数。

生成所有父胶囊后,每个耦合系数b|i按式(13)进行更新,即

2.1.4卷积胶囊层

式中,c是利用动态路由算法更新得到的耦合系数,()是一个非线性压缩函数(文中为2.1.3节中介绍的Squash函数)。

2.1.5全连接胶囊层

2.2 注意力机制模块

注意力机制模块由双向LSTM(Bi-LSTM)层和自注意力层构成,双向LSTM是由前向LSTM和后向LSTM组成的,可以通过前后向的学习获取上下文信息;接着自注意力层为每个操作码分配权重。

文中所研究的操作码序列是一个按执行顺序排列的指令序列,对于漏洞的分析不仅需要考虑前文指令的执行,也需要考虑后文指令的执行,因此在这种场景下使用双向LSTM可以更好地学习到上下文信息,有利于漏洞的检测。对于一个关键操作码序列,双向LSTM层通过式(16)、(17)进行正向计算和反向计算,即

在关键操作码序列中,不同操作码对模型训练结果的影响是不同的。因此模型需要关注重要程度高的操作码,避免出现因忽略重要的操作码、关注重要程度低的操作码而引入过多无效信息或误导信息。因此,文中引入自注意力层为每个操作码动态分配权重,即

经双向LSTM层和自注意力层训练提取得到的特征向量,作为胶囊网络CapsNet的输入进行训练,得到一个展平的胶囊列表。最后将胶囊网络模块和注意力机制模块提取到的特征拼接起来,作为全连接层的输入,全连接层的输出接入Softmax分类器,得到漏洞检测结果。

3 实验

3.1 实验环境与参数设置

实验仿真环境:显卡为AMD的MI 100,显存大小为64 GB,硬盘大小为1 TB,CPU处理器型号为AMD 5950X,实验平台为Ubantu 18.04、Python3.8和基于深度学习的框架Tensorflow。文中实验Batch大小设置为32,训练采用的优化器为Adamax优化器,学习率为0.001,Dropout率为0.2。所有模型均训练20轮,直至网络收敛,选取最佳的模型进行测试。

3.2 数据集

由于智能合约漏洞检测研究的发展尚未成熟,目前大多数文献使用的实验数据集均为使用传统漏洞检测工具打标签所得,但这并不够权威、准确。因此,文中结合多个文献工作,选取人工标签的智能合约作为数据集,并假定智能合约的人工标签是准确的。

文中收集了1 299份无漏洞的智能合约源代码和1 330份有漏洞的智能合约源代码。无漏洞的智能合约全部来自Durieux等[16]的工作,他们使用9种漏洞检测方法对以太坊上47 587份智能合约进行漏洞检测,所有方法检测结果均为“无漏洞”,并且合约地址有效的智能合约共计1 299份。有漏洞的智能合约中587份来自Chen等[17]的工作,他们对智能合约进行人工标注,涵盖了20种漏洞类型;另外743份来自文献[8],他们通过制定漏洞规则人为地标注智能合约文件的漏洞类别,涵盖了未检查的外部调用、整数溢出、可重入和时间戳依赖4种漏洞类型。

3.3 评估指标

由于文中模型是一个二分类模型,对于实际分类结果和预测结果,有以下4种情况:实际有漏洞的文件预测为有漏洞,实际有漏洞的文件预测为无漏洞,实际无漏洞的文件预测为有漏洞,实际无漏洞的文件预测为无漏洞。文中选取了4个评价指标用于评估模型的性能,具体如下:

(1)精确率,即实际有漏洞的文件预测为有漏洞的文件数占所有预测为有漏洞的文件数的比值,计算式为

(2)召回率,即实际有漏洞的文件预测为有漏洞的文件数占所有实际有漏洞的文件数的比值,计算式为

(3)准确率,即所有预测结果与实际结果相同的文件数占所有样本文件数的比值,计算式为

(4)1分数,这是一个综合精确率和召回率的评分指标,一般来说,1分数越高,说明模型的性能越好,取值范围为0~1。其计算公式为

式中,TP是实际有漏洞的文件预测为有漏洞的文件数,TN是实际无漏洞的文件预测为无漏洞的文件数,FN是实际有漏洞的文件预测为无漏洞的文件数,FP是实际无漏洞的文件预测为有漏洞的文件数。

3.4 对比方法

将文中提出的方法与比较优秀的一些智能合约漏洞检测方法进行分析比较,并进行了超参数实验。对比方法包括以下7种:

(1)Mythril[18],这是一种针对Ethereum智能合约的符号执行方法,通过检查程序执行可能出现的状态来确定漏洞根源。

(2)SmartCheck[19],这是一种静态分析方法,用于寻找漏洞模式和不良编码实践。先将由Solidity语言编写的智能合约翻译成可扩展标记语言XML,再根据Xpath模式匹配进行检查。

(3)Oyente[3],这是一种符号执行方法,接收合约的字节码和当前以太坊的全局状态,作为模型的输入,通过分析程序控制图和全局状态的变化判断漏洞的存在。

(4)Securify[20],这是一种轻量级和可扩展的智能合约形式化验证方法。它是基于模式匹配,在给定特征的情况下分析智能合约是否存在漏洞。

(5)SmartEmbed[21],这是一种代码嵌入结合相似度比较的漏洞检测方法。该方法将智能合约转换成抽象语法树,分别以合约级别和语句级别将抽象语法树序列化成令牌流,生成一个嵌入向量矩阵,通过向量相似度比较进行漏洞检测和克隆检测。

(6)AWD-LSTM[22],这是基于AWD-LSTM的漏洞检测模型,将智能合约源码转换为字节码序列,并利用FastText生成特征向量作为模型的输入。

(7)TMP[9],这是一个时间消息传播网络模型。

上述7种方法的输入均为智能合约源代码。

3.5 实验结果分析

文中方法在智能合约数据集上与其他方法4个评价指标的对比如表1所示。从表中可以看出,4种传统漏洞检测方法Mythril、SmartCheck、Oyente、Securify的精确率均为1,这是由于文中构建的数据集中无漏洞的智能合约是使用9种检测方法检测得到的,而其中就包括这4种方法。因此,精确率并不能完全凸显这4种方法的性能。除了精确率,文中方法在其他3项评分指标上均远超过4种传统检测方法。文中方法在1指标上与表现较好的传统漏洞检测方法Securify相比提升了30.44%,可以看出文中的网络结构能够更好地提取智能合约的局部和整体结构信息,从而获得更好的检测结果。另外,与现有主流的深度学习检测算法TMP和AWD-LSTM相比,CapsNet-Att的1分别比TMP和AWD-LSTM高4.27%和3.90%,说明CapsNet-Att能够对智能合约的漏洞进行更为准确的检测。

表1 8种方法的精确率、召回率、F1分数和准确率对比

Table 1 Comparison of precision, recall,F1 score and accuracy among eight methods

实验方法rprrF1ra Mythril1.000 00.561 60.719 20.896 0 SmartCheck1.000 00.428 60.600 00.852 4 Oyente1.000 00.458 00.628 30.886 3 Securify1.000 00.567 80.724 30.915 6 SmartEmbed0.831 40.652 30.731 00.814 6 TMP0.881 50.923 50.902 10.935 6 AWD-LSTM0.901 40.910 30.905 80.910 0 CapsNet-Att0.954 20.935 60.944 80.971 5

另外,文中对一些传统检测方法、基于深度学习的方法进行时间复杂度和参数量的对比实验,使用各种方法对文中数据集中所有“有漏洞”的智能合约文件进行检测,得到各种方法的平均检测耗时和参数量,如表2所示。从表中可以看出,传统漏洞检测方法的检测效率(耗时)与基于深度学习、机器学习的方法差距很大。虽然基于深度学习、机器学习的方法在训练过程中耗时较长,但一旦训练完成得到漏洞检测模型,在漏洞检测阶段的平均检测耗时远远低于传统漏洞检测方法。综合来看,基于深度学习的方法的检测效率具有巨大的优势。

表2 8种方法的平均检测耗时和参数量比较

Table 2 Comparison of average detection time and parameter amount among eight methods

实验方法检测耗时/s参数量/106 Oyente8.36 SmartCheck5.24 Mythril49.26 Securify105.29 SmartEmbed0.52 TMP0.257.45 AWD-LSTM0.379.87 CapsNet-Att0.155.46

综合上述两个实验,文中方法通过提取关键操作码序列,设计胶囊网络和注意力机制的混合网络结构,能够很好地检测出智能合约是否具有漏洞,具有较高的检测准确率,同时检测效率保持在秒级的水平。

由于分析漏洞原理确定关键操作码后,需要截取关键操作码的上下文序列,即截取关键操作码的前位操作码和后位操作码。实验中采用2到7之间的所有整数作为的取值,每个取值进行10次实验,图4展示了取不同值时1分数平均值的变化。当为4和6时1分数均达到顶峰,但考虑到越大时,关键操作码的上下文信息越多,一方面会引入无效信息,另一方面会增大关键操作码序列的长度,从而增加模型的训练时间。因此取4时会更加合适。

图4 n的取值对CapsNet-Att性能的影响

为了探究CapsNet-Att模型中胶囊网络的动态路由迭代次数对检测结果的影响,文中将迭代次数作为唯一变量进行了10次实验,并将10次实验的1分数的平均值作为比较指标。图5展示了迭代次数对模型检测性能的影响。可以看出,随着迭代次数的增加,模型的1分数先提高后降低,在迭代次数为4时达到性能的最高峰。因此将4作为CapsNet-Att模型中动态路由的迭代次数。

图5 动态路由迭代次数对CapsNet-Att性能的影响

4 结论

文中提出了一种基于胶囊网络和注意力机制的智能合约漏洞检测方法,实现对智能合约Solidity源代码的漏洞检测。文中根据智能合约漏洞的原理,选取与漏洞相关的关键操作码,重组得到关键操作码序列,提取到智能合约有效的语义信息;提出了基于胶囊网络和注意力机制的混合网络结构,以有效提取智能合约的局部信息以及局部信息之间的位置关系,提高漏洞检测效果。实验结果表明,文中方法在实验数据集上取得了优异的综合性能,在维持优秀的检测效率的同时,极大地提升了漏洞检测的准确率。由于目前仍未有较可靠的开源智能合约漏洞数据集,而文中所使用的数据集相对较小,没有涉及所有智能合约漏洞类型,不够全面。未来希望能够构建一个较为全面的大型数据集,致力于智能合约漏洞检测研究。

[1] DHILLON V,METCALF D,HOOPER M.The DAO hacked[M]∥ Blockchain enabled applications.Berkeley:Apress,2017:67-78.

[2] DANNEN C.Introducing Ethereum and solidity[M].Berkeley:Apress,2017:69-88.

[3] LUU L,CHU D H,OLICKEL H,et al.Making smart contracts smarter[C]∥ Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security.Vienna:ACM,2016:254-269.

[4] JIANG B,LIU Y,CHAN W K.ContractFuzzer:fuzzing smart contracts for vulnerability detection[C]∥ Proceedings of 2018 the 33rd IEEE/ACM International Conference on Automated Software Engineering.Montpellier:IEEE,2018:259-269.

[5] KALRA S,GOEL S,DHAWAN M,et al.ZEUS:analyzing safety of smart contracts[C]∥ Proceedings of 2018 Network and Distributed Systems Security Symposium.San Diego:Internet Society,2018:1-12.

[6] LATTNER C,ADVE V.LLVM:A compilation framework for lifelong program analysis and transformation[C]∥ Proceedings of 2004 International Symposium on Code Generation and Optimization.San Jose:IEEE,2004:1-12.

[7] GURFINKEL A,KAHSAI T,NAVAS J A.SeaHorn:a framework for verifying C programs (competition contribution)[C]∥ Proceedings of the 21st International Conference on Tools and Algorithms for the Construction and Analysis of Systems.London:Springer,2015:447-450.

[8] ZHUANG Y,LIU Z,QIAN P,et al.Smart contract vulnerability detection using graph neural network[C]∥ Proceedings of the Twenty-Ninth International Joint Conference on Artificial Intelligence.Yokohama:International Joint Conferences on Artificial Intelligence,2020:3283-3290.

[9] LIU Z,QIAN P,WANG X,et al.Combining graph neural networks with expert knowledge for smart contract vulnera bility detection[J].IEEE Transactions on Knowledge & Data Engineering,2021,35(2):1296-1310.

[10] 沈晨凯.基于深度学习的智能合约漏洞检测方法研究[D].武汉:武汉大学,2021.

[11] WANG W,SONG J,XU G,et al.ContractWard:automated vulnerability detection models for Ethereum smart contracts[J].IEEE Transactions on Network Science and Engineering,2020,8(2):1133-1144.

[12] TANN W J W,HAN X J,GUPTA S S,et al.Towards safer smart contracts:a sequence learning approach to detecting security threats[EB/OL].(2018-11-16)[2022-03-30].https://arxiv.org/pdf/1811.06632.pdf.

[13] SABOUR S,FROSST N,HINTON G E.Dynamic routing between capsules[C]∥ Proceedings of the 31st International Conference on Neural Information Processing Systems.Long Beach:ACM,2017:3859-3869.

[14] SHAW P,USZKOREIT J,VASWANI A.Self-attention with relative position representations[C]∥ Proceedings of 2018 Conference of the North American Chapter of the Association for Computational Linguistics:Human Language Technologies.New Orleans:Association for Computational Linguistics,2018:464-468.

[15] ZHAO W,YE J,YANG M,et al.Investigating capsule networks with dynamic routing for text classification[C]∥ Proceedings of 2018 Conference on Empirical Methods in Natural Language Processing.Brussels:Association for Computational Linguistics,2018:3110-3119.

[16] DURIEUX T,FERREIRA J F,ABREU R,et al.Empirical review of automated analysis tools on 47587 Ethereum smart contracts[C]∥ Proceedings of the 42nd International Conference on Software Engineering.Seoul:Association for Computing Machinery,2020:530-541.

[17] CHEN J,XIA X,LO D,et al.Defining smart contract defects on Ethereum[J].IEEE Transactions on Software Engineering,2022,48(1):327-345.

[18] MUELLER B.Mythril:a reversing and bug hunting framework for the Ethereum blockchain[EB/OL].(2017-11-08)[2022-03-30].https://pypi.org/project/mythril/0.8.2.

[19] TIKHOMIROV S,VOSKRESENSKAYA E,IVANITSKIY I,et al.SmartCheck:static analysis of Ethereum smart contracts[C]∥ Proceedings of 2018 IEEE/ACM the 1st International Workshop on Emerging Trends in Software Engineering for Blockchain.Gothenburg:IEEE,2018:9-16.

[20] TSANKOV P,DAN A,DRACHSLER-COHEN D,et al.Securify:practical security analysis of smart contracts[C]∥ Proceedings of 2018 ACM SIGSAC Conference on Computer and Communications Security.Toronto:ACM,2018:67-82.

[21] GAO Z,JAYASUNDARA V,JIANG L,et al.SmartEmbed:a tool for clone and bug detection in smart contracts through structural code embedding[C]∥ Proceedings of 2019 IEEE International Conference on Software Maintenance and Evolution.Cleveland:IEEE,2019:394-397.

[22] GOGINENI A K,SWAYAMJYOTI S,SAHOO D,et al.Multi-class classification of vulnerabilities in smart contracts using AWD-LSTM,with pre-trained encoder inspired from natural language processing[J].IOP SciNotes,2020,1(3):035002/1-6.

Smart Contract Vulnerability Detection Method Based on Capsule Network and Attention Mechanism

(School of Computer Science and Engineering,South China University of Technology,Guangzhou 510006,Guangdong,China)

In recent years, with the increasing number of smart contracts and the increasing economic losses caused by contract loopholes, the security of smart contracts has attracted more and more attention. The vulnerability detection method based on deep learning can solve the problems of low detection efficiency and insufficient accuracy of the early traditional smart contract vulnerability detection method. However, most of the existing deep learning-based vulnerability detection methods directly use smart contract source code, opcode sequence or bytecode sequence as the input of the deep learning model. This fact will weaken the effective information due to the introduction of too much invalid information. To solve this problem, this paper proposed a smart contract vulnerability detection method based on capsule network and attention mechanism. Considering the execution timing information of the program, the study extracted key operation code sequence of the smart contract as the source code feature. Then a hybrid network structure of capsule network and attention mechanism was used for training. The capsule network extracts the context information of the smart contract and the connection between the part and the whole; while the attention mechanism is used to assign different weights to different opcodes according to their importance. The experimental results show that the1score and accuracy of the algorithm proposed in this paper in the smart contract data set are 94.48% and 97.15%, indicating that this algorithm is superior to other detection methods in performance.

smart contract;key opcode sequence;capsule network;attention mechanism

Supported by the General Program of the Natural Science Foundation of Guangdong Province (2021A1515011798)

10.12141/j.issn.1000-565X.220167

2022⁃03⁃30

广东省自然科学基金面上项目(2021A1515011798);中山市产学研重大项目(201602103890051)

陆璐(1971-),男,博士,教授,主要从事计算机视觉和软件质量保障研究。E-mail:lul@scut.edu.cn

TP391

1000-565X(2023)05-0036-09

猜你喜欢

源代码字节合约
No.8 字节跳动将推出独立出口电商APP
基于TXL的源代码插桩技术研究
No.10 “字节跳动手机”要来了?
软件源代码非公知性司法鉴定方法探析
基于语法和语义结合的源代码精确搜索方法
简谈MC7字节码
揭秘龙湖产品“源代码”
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望
人类进入“泽它时代”