论文笔记[2] Smart Contract Vulnerability Detection Using Graph Neural Networks
1 简介
论文题目:Smart Contract Vulnerability Detection Using Graph Neural Networks
论文来源:IJCAI-20 [ccf-a]
组织机构:1浙江工商大学、2牛津大学、3新加坡国立大学、4浙江大学
论文链接:https://static.aminer.cn/storage/pdf/ijcai/20/0454.pdf
1.1 问题
- 现有的智能合约漏洞检测方法严重依赖于固定的专家规则,导致检测精度较低
1.2 创新
- 使用GNN进行智能合约漏洞检测
- 具体:
i)构造了一个表示智能合约函数的句法和语义结构的合同图;
ii)为了显示主要节点,设计了一个消除阶段来规范化图;
iii)提出了一种度自由图卷积神经网络(DR-GCN)和一种新的时态消息传播网络(TMP),用于从规范化图中学习漏洞检测。
2 背景知识
- 本文主要关注三种漏洞:可重入性(Reentrancy)、无限循环(Infinite loop)、时间戳依赖(Timestamp dependence)。前两种漏洞与回调函数的触发有关,后一种则是与区块时间戳的设置有关。
3 方法
分为三个阶段;图生成阶段、图规范阶段、神经网络
3.1 Graph Generation 图生成阶段
构建了一套自动化工具,将智能合约源转换为符号图表示,图中的节点分别代表不同的程序元素(即函数、变量)。由于不同程序元素的重要性不同,我们提取了三种主要节点类型:主节点、次节点、回调节点。
- 主节点:对定制或内置函数的调用,对检测特定漏洞非常重要。记为Mi,i=1,2,...,n
- 次节点:用于建模关键变量,记为Si,i=1,2,...,n
- 回调节点:用于触发攻击合约的回调函数
进一步构造边来模拟节点之间的关系,每条边描述了被测试合约函数可能通过的一条路径,边的时间数表征了它在函数中的顺序,以元组(Vs,Ve,o,t)来表示,分别代表起始节点、终止节点、时间顺序、边类型,其中边类型分为四种:控制流、数据流、前向边、回调边。

3.2 Contract Graph Normalization图规范阶段
大多数图神经网络在传播信息时本质上是扁平的,忽略了一些节点比其他节点发挥更大的中心作用。此外,不同的合约源代码产生不同的图形,阻碍了图形神经网络的训练。因此,我们提出了一个节点消除过程来归一化。
- 节点消除:删除每个次节点并将其特征传递给它最近的主节点,如果有多个最近的主节点,则将它的特征传递给所有主节点。回调节点以类似次节点的方式被删除,连接被移除节点的边被保留,但它们的开始或结束节点移动到相应的主节点。
- 主节点特征:主节点Mi经过聚合相邻被移除节点的特征后,更新为Vi。Vi的特征由三部分组成:
i)自特征,即原始主节点的特征
ii)内特征,即聚合到Mi并且有一条边直接从自身指向Mi的次节点的特征
iii)外特征,即聚合到Mi并且有从自身到Mi的连通路径的次节点的特征
3.3 Message Propagation Neural Networks信息传播神经网络
在本节中,我们首先将GCN扩展到度自由GCN (DR-GCN),然后提出了一种新的时间信息传播网络(TMP)。这两个网络都以智能合约函数的归一化图形G作为输入,并输出标签\(\hat{y}\)\(\in\){0,1}表示该函数是否存在某种类型的漏洞。
- DR-GCN:[Kipf and Welling, 2017]提出将卷积神经网络应用于图结构数据,它开发了一种分层传播网络:
![]()
其中,\(\hat{A}\)是邻接矩阵A与自环矩阵I的和,Xl是第l层的特征矩阵,对角节点度矩阵(即对角线元素为每个节点度的矩阵)\(\hat{D}\)用于规范化\(\hat{A}\),Wl是可被训练的权重矩阵。
本文对此公式进行了更新,首先将邻接矩阵A平方以增大节点之间的连通性,且考虑到此前以对合约图进行了规范化,所以移除了矩阵\(\hat{D}\),最后得到新的DR-GCN传播公式:
![]()
- TMP:包括消息传播阶段和读出阶段。
![]()
消息传播阶段:按照时间顺序依次沿着边传递信息。在第0个时刻,对每个节点Vi,其隐藏状态hi0初始化为Vi的特征向量。在第k个时刻,信息通过第k条边ek传递,并更新Vek(即ek的终止节点)的隐藏状态。
第k个时刻的信息mk由边ek的初始节点的隐藏状态hsk和边类型tk计算得来:
![]()
\(\bigoplus\)表示拼接操作。原始信息xk包含ek的开始节点和ek自身的信息,然后经过网络参数Wk和b转换为一个向量。
在收到信息之后,ek的结束节点通过聚合传递来的信息和它先前的状态,更新其隐藏状态hek:
![]()
读出阶段:遍历图中所有边后,TMP网络计算出所有节点的最终隐藏状态,最后得到G的预测标签:
![]()
其中hiT是每个节点的最终状态,f是一个映射函数,如一个神经网络,\(\mid\)V\(\mid\)是主节点的数量。考虑到最后的隐藏状态hiT和最初隐藏状态hi0对漏洞预测任务由启发性作用,因此更新\(\hat{y}\)的计算方式:
![]()
\(\bigodot\)表示两个矩阵对应位置元素进行乘积
4 实验
4.1 数据
- 数据集:ESC(Ethereum Smart Contracts)用于实验可重入漏洞和时间戳依赖漏洞 ; VSC(VNT Chain Smart Contracts) 用于实验无限循环漏洞【ESC和VSC中所有有源码的合同】
- 测试集:训练集=2 : 8
- 指标:accuracy、recall、precision、F1 score
- 对比:12种其它方法
Oyente; Mythril; Smartcheck; Securify
Vanilla-RNN, LSTM, GRU, GCN(神经网络方法)
Jolt; PDA; SMT; Looper(用于无限循环漏洞)
4.2 结果
首先将提议的方法(DR-GCN和TMP)与最先进的方法分别在可重入性、时间戳依赖性和无限循环漏洞方面进行基准测试。然后,将我们的方法与其他基于神经网络的方法进行了比较。
可重入漏洞检测对比:

时间戳依赖漏洞检测对比:

无限循环漏洞检测对比:

可视化:

与神经网络方法比较:

分析:实验结果表明,传统的递归神经网络Vanilla-RNN、LSTM和grum的漏洞检测性能并不优于现有的漏洞检测方法。相比之下,能够处理图形的图神经网络GCN、DR-GCN和tmp的结果明显优于现有的方法。这表明,盲目地将源代码视为序列是不适合漏洞检测任务的,而将源代码建模成图形,采用图形神经网络是有前景的。我们猜想传统的循环模型忽略了合约程序的结构信息,比如数据流和调用关系。
GCN和DR-GCN的准确度低于TMP,归因于GCN无法捕获由数据流和控制流引起的时间信息,这在我们的TMP模型中是使用有序边明确解决的。
补充:smartcheck从根本上依赖于一些严格而简单的逻辑规则来检测漏洞,这导致了较低的准确性和F1分数。oyente使用数据流分析来提高准确性,但其底层的漏洞检测模式并不准确。mythrl需要复杂的技术,如污点分析或手工审计,以达到中等准确度。与其他方法不同,securify将智能合约函数分类为违反、警告和遵守,其中违反表示函数保证具有漏洞(阳),遵守表示函数是安全的(阴)。我们认为所有的警告都是负面的,因为用户通常会被违规行为所吸引,而忽略了许多警告。security的性能优于现有的其他方法,但存在较高的假阴性率。
4.3 图归一化效果的研究
是否归一化的影响:


5 相关工作
- 智能合约漏洞检测:(1)符号执行方法,由于无法探索所有可能的程序路径,存在较高的假阴性率。(2)动态执行,但需要手工的代理合约来进行重入检测,防止其完全自动化应用程序
- GNN:现有的方法大致分为两类:(1)基于频谱的方法为图形数据推广了成熟的神经模型,如cnn。(2)基于空间的方法继承了循环gnn的思想,采用消息传递的方法进行图卷积。







浙公网安备 33010602011771号