基于特征调制图神经网络的智能合约源码漏洞检测

师自通 ,  师智斌 ,  刘冬明 ,  石琼 ,  龚晓元

中北大学学报(自然科学版) ›› 2024, Vol. 45 ›› Issue (05) : 601 -607.

PDF (1381KB)
中北大学学报(自然科学版) ›› 2024, Vol. 45 ›› Issue (05) : 601 -607. DOI: 10.3969/j.issn.1673-3193.2024.05.006
自动化与计算机

基于特征调制图神经网络的智能合约源码漏洞检测

作者信息 +

Feature⁃Wise Modulation Graph Neural Network Smart Contract Vulnerability Detection Based on Source Code

Author information +
文章历史 +
PDF (1414K)

摘要

随着区块链技术的广泛应用, 智能合约的安全问题引起广泛关注。针对智能合约源码向字节码转化会丢失部分语义信息, 而现有深度学习漏洞检测方法不能很好地检测重入漏洞和时间戳漏洞等问题, 本文提出一种基于特征调制图神经网络的智能合约源码漏洞检测方法(GNN-film)。首先, 分析重入漏洞和时间戳漏洞的特点, 使用智能合约源码构建图结构并将其精简化; 其次, 搭建基于特征级线性调制的图神经网络模型, 利用该网络模型强大的特征调制能力对合约漏洞特征进行精确表示; 最后, 将精简化后的图结构数据输入搭建的模型中获得检测结果。实验结果显示, 本文方法对重入漏洞和时间戳漏洞检测的准确率达到91.00%和91.64%, 相较基于图神经网络的方法分别提升了4.20百分点和9.70百分点, 证明本文方法对相关漏洞检测的能力要优于其他检测工具。

Abstract

With the wide use of blockchain technology, the security of smart contracts has attracted wide attention. The conversion of smart contract source code to bytecode will lose some semantic information, and the existing deep learning vulnerability detection methods cannot detect reentrancy vulnerabilities and timestamp vulnerabilities well. This paper proposed a smart contract source vulnerability detection method (GNN-film) based on feature-wise modulation graph neural network. Firstly, the characteristics of reentrancy vulnerabilities and timestamp vulnerabilities were analyzed, the graph structure was constructed and simplified by using smart contract source code. Secondly, constructing the model of feature-wise linear modulation graph neural network, and getting accurate representation of contract vulnerability features by using the powerful feature modulation ability of the model. Finally, put simplified graph structure data into the model to obtain the detection results. The experimental results show that the detection accuracy of reentrancy vulnerability and timestamp vulnerability is 91.00% and 91.64% respectively, which is 4.20 and 9.70 percentage points higher than that of graph neural network method. It is proved that the detection ability of this method for related vulnerabilities is better than other detection tools.

Graphical abstract

关键词

智能合约 / 漏洞检测 / 重入漏洞 / 时间戳漏洞 / 特征调制图神经网络

Key words

smart contract / vulnerability detection / reentrancy vulnerability / timestamp vulnerability / feature-wise linear modulation graph neural network

引用本文

引用格式 ▾
师自通,师智斌,刘冬明,石琼,龚晓元. 基于特征调制图神经网络的智能合约源码漏洞检测[J]. 中北大学学报(自然科学版), 2024, 45(05): 601-607 DOI:10.3969/j.issn.1673-3193.2024.05.006

登录浏览全文

4963

注册一个新账户 忘记密码

0 引 言

随着比特币1的成功应用, 其底层的区块链技术开始进入研究者的视野。智能合约作为区块链技术最为成功的应用引起学者的广泛关注2, 其中合约本身的安全问题成为了研究热点。

智能合约漏洞包括错误异常漏洞、 拒绝服务漏洞、 以太冻结漏洞、 重入漏洞、 时间戳漏洞等3, 包含漏洞的合约一旦被攻击者利用, 就会造成巨大的数字资产损失。由于合约被部署便无法更改, 且会在以太坊中自动执行的特性, 在部署之前对智能合约漏洞检测的工作十分必要。

现有的智能合约漏洞检测方法包括形式化验证、 符号执行、 模糊测试、 中间表示法、 深度学习方法等。VaaS是基于形式验证的一键式检测工具, 采用形式化验证检测智能合约漏洞4; Osiris是采用符号执行方法的静态分析框架, 由符号分析、 污染分析和整数错误检测组成5; ContractFuzzer是基于模糊测试的智能合约漏洞检测方法, 在合约执行时, 通过记录、 分析智能合约的行为来检测漏洞6; SmartCheck将智能合约源代码转化为基于xml的中间表示, 根据Xpath模式进行漏洞检测7。上述检测方法存在严重依赖专家规则、 检测精度不高、 效率低下等问题。

RecChecker8是深度学习方法, 该方法将智能合约切片之后, 传入带注意力机制的双向长短期记忆神经网络中进行漏洞检测。沈晨凯9的研究使用由智能合约抽象语法树转化的结构化序列, 输入Bi-GRU模型中进行漏洞检测。张铮等10搭建了基于CNN-LSTM网络模型, 使用由智能合约字节码转化的操作码序列进行漏洞检测。赵波等11的研究, 除了使用字节码生成节点特征, 还使用长短期记忆神经网络提取字节码的语义特征, 综合两种向量表示进行智能合约漏洞检测。白英民等12首次将时间序列引入智能合约漏洞检测领域, 该方法将合约源码转化为操作码序列, 提取操作码执行的Shapelet序列, 同时嵌入词向量, 使用机器学习方法对智能合约进行漏洞检测。对上述研究分析可知, 基于字节码的智能合约漏洞检测方法在向字节码转化的过程中, 会丢失部分语义、 语法信息, 导致漏洞检测的精度较低。另外, 基于文本序列的深度学习方法, 无法保留合约代码中的漏洞逻辑, 也严重影响智能合约漏洞检测的精度。

针对上述智能合约漏洞检测方法存在的不足, 本文基于源码, 采用特征级线性调制的图神经网络13(Feature-wise Linear Modulation Graph Neural Network, GNN-film)模型对智能合约进行漏洞检测。该网络是一种利用深度学习直接对图结构数据进行学习的框架。其最大的优势在于对节点信息的特征调制, 经调制后的节点信息能够精确地表示图结构信息。对于程序片段、 代码采用图结构化表示不但能够保留代码的逻辑与结构, 而且能够保留程序的语法语义信息, 还能使用图神经网络进行分析推理, 相较于字节码和文本序列方法, 能学习图结构数据中更深层的数据信息, 而采用特征级线性调制图神经网络能够在原有图神经网络上, 对节点信息进行特征调制, 进而获得图结构信息的精确表示, 从而提高智能合约漏洞检测的精度。

1 整体模型

本文方法分以下三个步骤实现: 1) 将智能合约源码进行图结构化表示并精简化, 同时构建图数据集。2) 搭建基于特征级线性调制图神经网络的智能合约漏洞检测模型, 利用该模型的线性级特征调制模块获取更精确的图结构表示。3) 向模型输入精简化的图结构数据, 最终得到检测结果。本文方法的整体流程如图 1 所示。

2 智能合约漏洞概述

智能合约是一种预先编写的、 部署后可自动执行的代码。由于合约上链之后的不可更改性, 合约本身存在漏洞会造成严重经济损失。智能合约重入漏洞和时间戳漏洞是两种常见且危害较高的漏洞, 现有方法没有对其原理进行针对性研究, 本章介绍两类漏洞的原理。

2.1 重入漏洞

重入漏洞是由于编码执行流程不当导致的。被攻击合约在执行完转账操作.call.value()()后, 合约中的withdraw()函数会改变合约中余额变量状态使交易终止, 并自动调用fallback()函数, 而攻击合约会在fallback()函数中调用withdraw()函数, 使余额变量状态无法改变, 交易持续进行从而盗取被攻击合约中的所有数字资产。

2.2 时间戳漏洞

时间戳漏洞也是智能合约中常见的一种漏洞, 合约中包含不受信任控制范围约束的功能函数。合约中使用block.timestamp变量来表示当前块的时间戳, 该戳是由矿工打包区块时设置的, 若恶意矿工利用该变量间接作为下一区块的出块条件, 就会获取非法收益, 此时合约具有时间戳漏洞。例如: 恶意矿工利用block.timestamp变量编写一个赌注合约, 当该变量可以被66整除时可以获得出块奖励, 恶意矿工就可以提前计算获得奖励的出块时间, 依据该时间调整当前合约的发布时间而获得非法收益。

3 数据预处理

3.1 漏洞信息提取

本文使用智能合约源码, 依据相关的漏洞模式, 提取源码中代表漏洞信息的元素, 依此来构建列表映射。漏洞模式是在已知特定漏洞发生条件的情况下, 选取源码中函数、 变量等相关元素, 根据选取元素之间的执行、 返回关系构建的判定模式。

重入漏洞模式为: 合约代码中包含withdraw()功能函数, 且该函数包含转账函数.call.value()(), 执行转账操作后, 才会更新账户余额变量balances[msg.sender]。而时间戳漏洞模式为: 合约代码中使用block.timestamp变量(该变量为当前块时间)直接或间接进行算数运算。以重入漏洞为例, 如图 2 中Ⅰ所示, 依据重入漏洞模式可以提取代码片段中的重入漏洞信息。

3.2 生成图结构

Allamanis等14研究表明, 可以使用源代码生成图结构, 保留源代码中的语义、 语法信息。王守梁15的研究证明图结构中包含更丰富的数据信息, 能体现代码深层次的特征。故本文将智能合约源码转化为图结构, 相较文本序列结构数据, 图结构数据能提取程序的漏洞逻辑, 可以保留漏洞的语法、 语义信息。

本文根据3.1节提取的漏洞信息, 依据合约代码的执行顺序、 元素之间的调用关系生成图结构。如图 2 中Ⅰ、 Ⅱ所示, Ⅰ中使用彩色标识的元素与Ⅱ中彩色节点对应, 而Ⅱ中黑色节点代表fallback()函数, 该函数在执行合约后会自动调用, 本文设置自动生成该节点。

3.3 精简图结构

孙逊16的研究提出如下观点: 在同一函数中, 不同程序元素可分为不同级别, 可以消去非核心级别的节点。图结构中每一节点在图神经网络模型训练过程中被视为一个可计算函数, 过多的节点不但会增加神经网络的训练时间, 而且会影响最终检测结果的精度。

在3.2节中生成的图结构中, 导致重入漏洞产生的元素为.call.value()()、 withdraw()以及合约功能执行后自动调用的fallback(), 而其余元素间接影响重入漏洞的产生。常见的图结构精简方法有节点消去法、 邻接矩阵规范化、 图规范化等。本文采用节点消去操作进行图精简化。具体操作为: 保留图结构中的核心节点(例如重入漏洞中.call.value()()、 withdraw()等节点), 消去其余节点并将此类节点信息聚合到邻域中的核心节点。如图 3 中Ⅲ所示, 红色与紫色节点代表核心节点, 绿色和橙色节点代表其余节点, 椭圆图形将其余节点表示的信息聚合到核心节点处, 同时消去其余节点, 最终图像如Ⅳ所示。

最后本文使用word-to-vector方法对精简后的图结构数据进行向量化表示, 经过向量化表示之后的图数据可用于图神经网络训练。

4 漏洞检测模型搭建

基于特征级线性调制的图神经网络是一种图神经网络的变体, 其核心是使用超网络17完成聚合关于目标节点的表示同时更新最相关的特性, 在训练过程中, 允许目标节点对来自边的信息表示动态地调整权重特征。图 4 为本文漏洞检测模型。

将向量化表示的图结构数据输入漏洞检测模型中进行训练, 图中Ⅱ表示数据经过一轮训练之后, 图节点的向量表示发生变化, 经过多次迭代训练后, 使用读出函数计算图结构的信息表示, 最后通过sigmoid函数得出检测结果。

超网络本质上是一个高阶函数, 可以对图结构中目标节点获取的邻域信息动态更新权重, 通过信息聚合, 从而获得更精确的节点信息表示。在实际智能合约漏洞检测过程中, 超网络是一个聚焦于目标节点的计算函数, 在消息传播阶段, 使用计算消息传播函数来计算权重, 更新目标节点的最相关特征信息, 聚合图结构中所有节点的信息, 最后根据该信息检测合约本身是否存在某类漏洞。该阶段涉及的公式如式(1)所示。

γξ,v(t),βξ,v(t)=g(hv(t)),

式中: g()代表可学习函数; γξ,v(t)βξ,v(t)为256维向量, 代表元素级仿射转换, 由所在边消息计算单元求得, 用来调整权重特征, 其中上标代表第t次迭代, 下标代表当前网络指向目标节点v的各种边类型ξhv(t)代表目标节点第t次迭代的向量表示。

在图级读出阶段, 即漏洞判定阶段, 所涉及的公式如式(2)所示。

hv(t+1)=luξvεσ(γξ,v(t)Wξhu(t)+βξ,v(t)),

式中: Wξξ的权值; hu(t)为目标节点v的邻域节点第t次迭代的向量表示; σ为应用非线性函数; l 为应用有界非线性函数; hv(t+1)为第t+1次迭代训练后v的节点表示。

在漏洞图结构训练的过程中, 同一节点的信息表示随着训练次数的增加而动态地发生变化, 利用特征级线性调制模块不断对节点信息进行调制, 从而达到最优节点信息表示, 最终获得模型的最佳检测结果。

图 5 为节点信息计算图示。图 5 中, 左侧图像为原始智能合约漏洞图结构信息表示, 右侧图像为下一轮次的图结构信息表示。图中绿色实线为节点表示的自更新, 虚线代表数据流, 指向绿色节点的三条有向边中的数字代表不同类型的边关系, 绿色节点为观察节点, 黄色、 红色、 蓝色节点为邻域节点。

在一轮信息传递调整之后, 绿色节点的表示信息会与原有信息不同。令自更新边, 即图 5 中的绿色实线, GBYR分别代表对应节点的表示信息。采用传统图神经网络的节点信息表示为式(3), 而使用基于特征级线性调制的图神经网络的节点信息表示为式(4)。图中边上数字代表边的不同类型。

G'=σ(G+W2*B+W1*Y+W1*R),
G'=σ(β0,G+γ0,GW0*G+β1,G+γ1,GW1*Y+β1,G+γ1,GW1*R+β2,G+γ2,GW2*B)

式(3)可以看出, 计算传统图神经网络中的节点表示仅将观察节点表示和邻域节点表示与权重矩阵的乘积相加, 忽略观察节点自身的表示更新以及邻域节点表示的更新, 导致图神经网络的漏洞检测结果低于基于特征级线性调制的图神经网络的结果, 在5.4节实验分析部分也证实了这一结论, 同时证明了本文模型检测重入漏洞和时间戳漏洞的优越性。

将图结构中所有节点表示聚合得到图结构的表示向量hG, 最终获得智能合约的检测结果y, 如式(5)所示。

y=sigmoid(hG)

5 实验分析

5.1 数据集

本文数据集将SmartBugs Wild Dataset18和Tianchi Smart Contract Dataset混合, 选取12 000条智能合约构建重入漏洞数据集, 14 000条智能合约构建时间戳漏洞数据集。由于Tianchi Smart Contract Dataset不是智能合约源码文件, 所以需要利用合约地址属性在https: //cn.etherscan.com/网站上下载源码文件。

5.2 实验指标

本文实验采用准确率(Accuracy)、 精确率(Precision)、 召回率(Recall)、 F1分数(F1 score)四种评价指标。

Accurancy=NTP+NTNN,
Precision=NTPNTP+NFP,
Recall=NTPNTP+NFN,
F1=NTP2NTP+NFP+NFN,

式中: NTPNTNNFPNFN分别为真阳样本、 真阴样本、 假阳样本、 假阴样本的数量; N为样本总数。

5.3 实验环境

本文实验机器为一台处理器为Intel(R) Core(TM) i7-11800H, 16 G内存, 使用RTX-3060显卡的电脑, 实验软件为Pycharm2022, 实验环境使用python3.7、 TensorFlow1.14.0、 cuda11.7、 keras2.2.4等。实验参数设置如表 1 所示。

5.4 实验结果分析

本节对不同漏洞分别进行检测实验, 使用本文方法(GNN-film)与Smartcheck、 oyente、 Mythril三种传统检测方法, 与LSTM、 GRU两种基于深度学习文本序列方法以及GNN、 GCN、 GAT三种基于图神经网络方法进行对比实验。表 2 展示了9种方法对重入漏洞检测的实验结果, 图 6 为GNN-film方法的重入漏洞损失曲线图。

表 2 中的实验数据可以得出, 基于深度学习的LSTM和GRU方法的检测精度要高于Smartcheck、 oyente、 Mythril的传统智能合约漏洞检测方法, 而GNN-film方法的各项指标要优于深度学习方法。其中, 本文方法的Accuracy、 Precision、 Recall和F1 Score分别达到了91.00%, 91.73%, 83.94%和87.66%, 相较于GNN方法分别提高了4.20, 6.12, 5.91和6.02百分点。

表 3 展示了9种方法对时间戳漏洞检测的实验结果, 图 7 为GNN-film方法的时间戳漏洞损失曲线图。

表 3 中的实验数据可以得出, GNN-film方法的各项指标要优于其他漏洞检测方法。其中, 本文方法的Accuracy、 Precision、 Recall和F1 Score分别达到了91.64%, 91.12%, 91.63%和91.37%, 相较于GNN方法分别提高了9.70, 11.08, 8.38和9.76百分点。

6 结 论

本文提出一种基于特征调制图神经网络的智能合约源码漏洞检测方法。文中对该方法的原理和主要优势进行了详细分析。该方法对智能合约进行更加精确的图结构表示, 从而获得更加准确的漏洞检测结果。理论分析及仿真结果表明:

1) 图结构数据能够表达智能合约源码中更深层次的信息;

2) 在同一实验环境下, 图神经网络方法要优于传统漏洞检测方法以及基于深度学习文本序列漏洞检测方法;

3) 增加特征调制模块后的有效性证明了基于特征级线性调制的图神经网络执行漏洞检测任务具有更高准确性。

参考文献

[1]

WRIGHT C S. Bitcoin: A peer-to-peer electronic cash system [J]. SSRN Electronic Journal2008: 1-9.

[2]

DI PIERRO M. What is the blockchain?[J]. Computing in Science & Engineering201719(5): 92-95

[3]

BUTERIN V. A next-generation smart contract and decentralized application platform[EB/OL].[2023-11-22].

[4]

GARFATTA IKLAI KGAALOUL Wet al. A survey on formal verification for solidity smart contracts[C]//2021 Australasian Computer Science Week Multiconference, 2021: 1-10.

[5]

TORRES C FSCHUTTE JSTATE R. Osiris: Hunting for integer bugs in ethereum smart contracts[C]//Proceedings of the 34th Annual Computer Security Applications Conference, 2018, 664⁃676.

[6]

JIANG BLIU YCHAN W K. Contractfuzzer: Fuzzing smart contracts for vulnerability detection[C]//33rd ACM/IEEE International Conference on Automated Software Engineering(ASE). IEEE: 2018, 259⁃269.

[7]

TIKHOMIROV SVOSKRESENSKAYA EIVANITSKIY Iet al.SmartCheck: static analysis of ethereum smart contracts[C]//Proceedings of the 2018 IEEE/ACM 1st International Workshop on Emerging Trends in Software Engineering for Blockchain (WETSEB).Gpthenburg: IEEE,2018: 9-16.

[8]

QIAN PLIU ZHE Qet al.Towards automated reentrancy detection for smart contracts based on sequential models[J]. IEEE Access20208: 19685⁃19695.

[9]

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

[10]

张铮, 张星娜, 吕卓, .基于深度学习的智能合约漏洞检测方法[J].重庆邮电大学学报(自然科学版)202234(5): 914-920.

[11]

ZHANG ZhengZHANG XingnaZhuo LYUet al.Detecting vulnerabilities in smart contracts based on deep learning models[J]. Journal of Chongqing University of Posts and Telecommunications(Natural Science Edition )202234(5): 914-920.(in Chinese)

[12]

赵波, 上官晨晗, 彭小燕, .基于语义感知图神经网络的智能合约字节码漏洞检测方法[J].工程科学与技术202254(2): 49⁃55.

[13]

ZHAO BoSHANGGUAN ChenhanPENG Xiaoyanet al. Semantic-aware graph neural network for smart contract bytecode vulnerability detection[J].Advanced Engineering Sciences202254(2): 49-55.(in Chinese)

[14]

白英民, 师智斌, 信文阁, .基于词嵌入与Shapelet时序特征的智能合约漏洞检测方法研究[J].中北大学学报(自然科学版)202344(4): 381-387.

[15]

BAI YingminSHI ZhibinXIN Wengeet al. Research on smart contract vulnerability detection method based on word embedding and shapelet time series features[J]. Journal of North University of China (Natural Science Edition)202344(4): 381-387.(in Chinese)

[16]

BROCKSCHMIDT M. GNN-FiLM: Graph neural networks with feature-wise linear modulation[DB/OL]. (2019-06-28)[2023-11-22].

[17]

ALLAMANIS MBROCKSCHMIDT MKHADEMI M.Learning to represent programs with graphs.[DB/OL]. (2017-11-01)[2023-11-22].

[18]

王守梁.基于代码序列与图结构的源代码漏洞检测方案[J].中北大学学报(自然科学版)202344(6): 641-653.

[19]

WANG Shouliang.A source code vulnerability detection scheme based on code sequence and graph structure[J].Journal of North University of China(Natural Science Edition)202344(6): 641-653.(in Chinese)

[20]

孙逊. 基于图注意力网络的智能合约漏洞检测[D].成都: 电子科技大学, 2022.

[21]

HAMILTON W LYING RLESKOVEC J. Inductive representation learning on large graphs[C]//Proceedings of the 31st International Conference on Neural Information Processing Systems, 2017: 1025⁃1035.

[22]

DURIEUX TFERREIRA J FABREU Ret al.Empirical review of automated analysis tools on 47,587 ethereum smart contracts[C]//Proceedings of the 2020 ACM/IEEE 42nd International Conference on Software Engineering (ICSE).Seoul: IEEE,2020: 530⁃541.

AI Summary AI Mindmap
PDF (1381KB)

486

访问

0

被引

详细

导航
相关文章

AI思维导图

/