【论文阅读】Smart Contract Vulnerability Detection Using Graph Neural Networks

论文题目

1、摘要

1、使用图神经网络(GNN)进行智能合约漏洞检测:构建了一个合约图来表示智能合约函数的句法和语义结构,图中的节点表示关键函数调用或变量,而边则捕获其时态执行轨迹。
2、为了突出显示主要节点,设计了一个消除阶段来规范化图形
3、提出了一种无度图卷积神经网络(DR-GCN)和一种新型的时间消息传播网络(TMP),从归一化图中学习漏洞检测
研究现状:
目前智能合约漏洞检测的方法主要受到编程语言社区现有测试方法的启发,围绕符号执行和动态执行方法。
1、现有方法严重依赖几个专家定义的硬规则来检测智能合约漏洞:专家规则容易出错;复杂的模式是难以涵盖的。
2、攻击者可能很容易绕过规则进行攻击,会导致高误报率和假阴性率
3、因为规则是由开发检测工具的少数“集中式”专家贡献的,因此可扩展性本质上是有限的。随着智能合约数量的快速增长,少数专家不可能筛选所有合约来设计精确的规则,而其他“去中心化”专家的知识也无法用于改进模型。
将 GCN 扩展到无度 DR-GCN来处理归一化图;考虑不同程序元素的不同作用和时间关系,提出了一种新颖的时间消息传播网络(TMP)。主要检测包括重入、时间戳依赖和无限循环漏洞,具体漏洞介绍之前有。

2、研究方法

三个阶段:
(1)图生成阶段:从源代码中提取控制流和数据流语义,并显式建模回退机制;
(2)受k-partite图启发的图规范化阶段;
(3)用于漏洞建模和检测的新型消息传播网络TMP
部图(partite graph)是一类特殊的图,即一个图的节点集可分成若干个子集,使得每一条边的两端点不在同一子集内,若一个图的节点集能分成k个两两不交的非空子集,使得这个图的每一条边的两端点不在同一个子集内,则称这个图为k部图。若k=2,则称这种k部图为二部图;若k=3,则称这种k部图为三部图,若在一个k部图中,任一节点与其他部的所有节点都相邻,则称它为完全k部图。

2.1 图生成阶段

通过考虑边缘的时间顺序来构造边缘并提取了三类节点:主节点、辅助节点和回退节点。
流程图

2.1.1 主节点

主节点表示对自定义或内置函数的调用,这些函数对于检测特定漏洞非常重要。
例如,对于重入漏洞,主节点对传递函数或内置 call.value 函数的调用进行建模,这是检测重入的关键。针对时间戳依赖漏洞,提取内置函数 invocation block.timestamp 作为主节点。对于无限循环,合约中的所有自定义函数都被视为主要函数。从形式上讲,我们将所有关键函数描述为主节点,用 M1、M2、. . . , Mn 表示。

2.1.2 辅助节点

辅助节点构建。主节点代表重要的调用,而辅助节点用于对关键变量进行建模,例如用户余额和奖励标志。从形式上讲,关键变量被定义为辅助节点 S1、S2、. . . , Sn

2.1.3 回退节点

回退节点F用来刺激攻击合约的回退函数,该函数可以与被测函数交互。回退功能是智能合约中的一种特殊设计,是导致许多安全漏洞的原因。

2.1.4 边缘

每条边都描述了被测合约函数可能遍历的路径,而边的时间编号表征了它在函数中的顺序。
边的特征被提取为元组==(Vs、Ve、o、t)==,其中 Vs 和 Ve 表示其起始和结束节点,o 表示其时间顺序,t 表示边类型:四种类型的边缘,即控制流、数据流、前向和后退边缘。语义边缘的详细信息如下图。
语义边缘信息

2.2 图归一化

大多数图神经网络在传播信息时本质上是扁平的,忽略了某些节点比其他节点发挥更多的核心作用。此外,不同的合约源代码会产生不同的图,阻碍了图神经网络的训练。因此,提出一个节点消除过程来规范化图。

2.2.1 节点消除

图的节点被划分为主要节点 {Mi},辅助节点 {Si},以及回退节点 F。

  1. 删除每个辅助节点 Si,但将 Si 的特征传递给最近的主节点Mi。(如果 Si 有多个最近的主节点,则其特征将传递给所有主节点)
  2. 回退节点也被删除,类似于辅助节点。
  3. 连接到已移除节点的边将保留,但其起始节点或结束节点将移动到相应的主节点。

2.2.2 主节点特征

主节点的特征通过聚合其相邻移除节点(主要有辅助节点和回退节点)的特征来更新。为了区分聚集后的原始主节点及其对应的主节点,文章将 Mi 的新主节点表示为 Vi 。Vi的特征由三部分组成:
i)自特征,即主节点Mi的特征;
ii) 输入特征,即辅助节点的特征 {Pj},该节点被合并到 Mi 并具有从 Pj 指向 Mi 的路径;
iii) 输出特征,即辅助节点 {Qk},该节点被合并到 Mi 并具有从 Mi 从 Qk 指向的路径。

2.3 消息传播神经网络TMP

2.3.1 DR-GCN

首先将GCN扩展到无度GCN(DR-GCN),然后提出一种新的时间消息传播网络(TMP)。所提出的两个网络都以智能合约函数的归一化图G为输入,输出标签yˆ∈{0,1},表示该函数是否存在某种类型的漏洞,开发出逐层传播网络:传统GCN网络,其中D~是新度矩阵,包括D+I,
公式1
而在本文中,使用的是
公式2
其中 Aˆ = A + I 是用自循环 (I) 增强的邻接矩阵 (A),Xl 是层 l 的特征矩阵,Wl 是可训练的权重矩阵。在方程中,对角节点度矩阵 Dˆ 用于归一化 Aˆ。使用 A 的平方来增加归一化图 G 中节点之间的连通性

2.3.2 TMP

TMP网络由消息传播阶段和读出阶段组成。
在消息传播阶段,TMP 按照边缘的时间顺序依次传递信息。TMP 使用读出函数计算整个图 G 的标签,该函数聚合了 G 中所有节点的最终状态。 形式上,G = {V, E},其中 V 由所有主节点组成,E 包含所有边。表示 E = {e1, e2, . . . , eN },其中 ek 表示第 k 个时间边。

  1. 消息传播阶段
    在时间步长为0 时,每个节点 Vi 的隐藏状态 h0i 使用 Vi 的特征初始化。
    在时间步长 k 处,消息流经第 k 个时间边 ek 并更新 Vek 的隐藏状态,即 ek 的结束节点。
    具体而言,消息 mk 是基于 hsk:ek 起始节点的隐藏状态和 edge 类型 tk 计算的:
    公式3
    其中 ⊕ 表示串联运算,矩阵 Wk 和偏置向量b 是网络参数。原始消息 xk 包含来自 ek 和边 ek 本身的起始节点的信息hsk,然后使用 Wkb 将其转换为向量嵌入mk
    收到消息mk后,ek 的终端节点通过聚合来自传入消息的信息mk及其先前状态hek来更新其隐藏状态 h^ek
    公式4
    其中UZR为矩阵
  2. 读出阶段
    在连续遍历 G 中的所有边后,TMP 通过读出所有节点的最终隐藏状态来计算 G 的标签。设 hTi 是第 i 个节点的最终隐藏状态,就可以基于此生成预测标签 yˆ。
    公式5
    其中 f 是映射函数,例如神经网络, |V|表示主节点的数量。按照如下方式计算 yˆ,其中W和b是需要学习的参数
    公式6

3、实验

3.1 数据集

数据集: ESC(以太坊智能合约)和 VSC(VNT 链智能合约)
ESC 由 40932 个以太坊智能合约组成,总共大约有 307396 个函数。在这些函数中,大约有 5013 个函数至少调用了一次 call.value,因此它们可能受到重入漏洞的影响。大约 4833 个函数包含 block.timestamp 语句,使其容易受到时间戳依赖漏洞的影响。
VSC 由 4170 个从 VNT 链收集的智能合约组成,大致包含 13761 个函数。
对于每个数据集,我们随机选择20%的合同作为训练集,而其余的合同用于测试集(这里应该写错了)。在比较中,指标准确性、召回率、精确度和 F1 分数都参与其中。
针对不同平台的特点,在ESC数据集上进行了重入漏洞和时间戳依赖漏洞的实验,在VSC数据集上进行了无限循环漏洞检测实验

3.2 方法比较

  1. 四种现有的智能合约漏洞检测方法Oyente 、Mythril、Smartcheck和 Securify
  2. 四种基于神经网络的方法VanillaRNN、LSTM、GRU 和 GCN
  3. 四种程序循环检测方法Jolt、PDA 、SMT 和 Looper。
    比较结果如图
    结果1

3.2.1 重入漏洞检测比较

  1. 现有工具在重入漏洞检测方面尚未达到令人满意的准确度,其中最好的效果只产生了71.89%的准确率
  2. TMP的性能远远优于其中最好的方法。与最先进的工具相比,准确度提高了 12.39%,TMP的F1得分比现有方法高出24.54%
  3. DR-GCN在所有四个指标上也比其他现有方法取得了更好的结果。

3.2.2 时间依赖性漏洞检测比较

现有工具的准确率相当低,这可能是因为现有方法大多通过粗略检查函数中是否存在 block.timestamp 语句来检测时间戳依赖漏洞。

  1. TMP在所有四个指标上都保持最佳性能,而DR-GCN排名第二。
  2. 与最先进的方法相比,TMP 的准确度提高了 22.37%。
    文章进一步研究了现有的智能合约漏洞检测工具,以调查观察结果背后的原因。
    Smartcheck 从根本上依赖于一些严格而简单的逻辑规则来检测漏洞,这导致准确性和 F1 分数低。
    Oyente 采用数据流分析来提高准确性,而其检测漏洞的基本模式并不那么准确。
    关于Mythril,它需要复杂的技术,如污点分析或人工审计,达到中等精度。
    Securify 将智能合约函数分为违规、警告和合规,其中违规表示保证函数存在漏洞(正面),合规表示函数安全(负面)。我们将所有警告视为负面警告,因为用户通常会被违规行为所吸引,而忽略很多警告。Securify 的性能优于其他现有方法,但假阴性率较高。

3.2.3 无限循环漏洞检测比较

几乎所有现有的方法都无法检测到智能合约的回退机制导致的无限循环bug。相比之下,文章的方法可以成功识别此漏洞。从结果可以看出,TMP 在无限循环漏洞检测任务中始终且明显优于其他方法。特别是,TMP 和 DR-GCN 的准确率分别提高了 15.05% 和 8.78%。
具体结果的可视化如图
结果2
其中,ab是比较漏洞1,cd是比较漏洞2,ef是比较漏洞3。ace是DR-GCN和TMP与现有工具的比较,而bdf是与其它模型的比较。

3.2.4 与其它模型的比较

Vanilla-RNN、LSTM、GRU 和 GCN 与 DR-GCN 和 TMP 网络进行了比较。为了公平比较,所有方法都提供了从源代码中提取的归一化图的向量表示,并且需要检测相应的错误。
实验结果表明,传统的循环神经网络Vanilla-RNN、LSTM和GRU的性能并不比现有的漏洞检测方法好。相比之下,能够处理图的图神经网络 GCN、DR-GCN 和 TMP 的结果明显优于现有方法。这表明,盲目地将源代码视为序列并不适合漏洞检测任务,而将源代码建模为图并采用图神经网络是有希望的。文章推测,传统的循环模型会丢失智能合约代码中的宝贵信息,因为它们忽略了合约程序的结构信息,例如数据流和调用关系。GCN是其它模型中最好的,而它无法捕获由数据流和控制流引起的时间信息,但是在TMP模型中使用有序边可以解决

3.3 图归一化效果研究

进行了部分消融实验来说明
从 TMP 和 DR-GCN 中删除了图形归一化阶段,并将它们与默认的 TMP 和 DR-GCN 进行了比较。这两个变体分别表示为 TMP-WON 和 DR-GCN-WON(没有归一化)。可以看到,使用所提出的归一化模块,DR-GCN 和 TMP 的性能都更好。例如,在重入漏洞检测任务中,DR-GCN模型的准确率和F1得分分别提高了4.39%和4.04%,而TMP的准确率和F1得分分别提高了2.57%和2.41%。如图是定量结果和ROC曲线图
结果3
ROC曲线图
采用ROC分析来显示图归一化模块的影响。AUC曲线下面积用作性能的衡量标准,AUC越高,性能越好。

  1. DR-GCN和TMP在归一化模块的重入漏洞检测任务中取得了更好的结果,即AUC分别增加了0.07和0.03。
  2. 在时间戳依赖性检测任务方面,DR-GCN和TMP的AUC分别提高了0.05和0.03
  3. 对于无限环检测任务,DR-GCN 和 TMP 的 AUC 提高了 0.08 和 0.05
  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值