当前位置:   article > 正文

智能合约漏洞检测——时序信息传播网络TMP_智能合约漏洞数据集

智能合约漏洞数据集

The Processing of TMP

首先介绍下对应的数据集

数据集的生成:

源码到Contract图的转化

首先是源码(图a所示),根据程序语句之间的数据与控制的依赖性,可以将程序语句转化为Contract graph

由于源码中不同语句的重要性不同,原文见解:提取三类节点,由源码构建的Contract graph中也正是这三类节点

即图(b)Contact graph中

  1. Major Node #主要节点 自定义的函数(如line1 getBonus、line7 withdraw)or内置函数(如line10 call.value)
  2. Secondary Node #次要节点 关键的变量(如余额Bonus[]、 奖金Reward[])
  3. Fallback Node #回退节点 模拟攻击合约的回退函数,回退函数可以与被测函数交互,回退也是智能合约很多安全漏洞的原因

也就是Contract graph由函数节点、重要变量节点、fallback节点构成

其中节点之间的变是存在顺序的,即e的下角标,对应了源码语句顺序执行的时序

详细的边的类型如下:

第一个block对应的一些程序语句(如循环,判断,断言)为控制流的边

第二个block(赋值等)为数据流的边

第三个block就是正常的语句,为前向边

第四个block为跟回退功能互动的语句,为回退边

至此,由(a)到(b)过程介绍完毕。

Contract graph 的归一化

我们可以看到,由(b)到(a)后只有主要节点被保留

其中次要节点被删除,其特征传递给最近的主要节点,如果周围有多个主要节点,都会传递,回退节点也是如此。

ps:对于被删除的节点存在的残留的边的起点or终点会被连接至相应的主要节点

主要节点的特征主要由三部分组成:1.自身特征 2.in-feature(指向主要节点的节点的特征) 3.out-feature(从主要节点指出的节点特征)

上图最右侧的表 第一个表为边,四个属性组成:起始,终止,时序,类型

第二个表为主要节点:记录了对应的指向和指出的主要节点的次要节点和回退节点

至此,数据集部分介绍结束。


TMP:

如下图 TMP model的输入为归一化后的的图,经过消息传播阶段,最后为计算图的label的读出阶段

Annotation:

 ek 为第k步传播时的边

Vsk 为第k步传播时起始节点 s即start

Vek 为第k步传播时终止节点 e即end

消息传播阶段:

在第k步,信息通过第k条边 ek 传递给   Vek ( Vek 即  ek  的终点)

信息 mk 的计算方式如下:

首先由 ek  的起始节点的隐藏态 hsk与 第k条边 ek 的类型  tk 进行一个concat

然后将乘以权重加bias作为信息  mk

xk=hsktkmk=Wkxk+bk

信息 mk 与  hek  聚合后来更新 hek(U、Z、R 均为矩阵)

h^ek=tanh(Umk+Zhek+b1)hek=softmax(Rh^ek+b2)

读出阶段:

在遍历完图G中所有的边后,TMP计算出每个节点的最终的隐藏状态:hiT

然后通过以下方式计算图G的label: y^=i=1|V|f(hiT)

其中,f为一个映射函数,具体计算公式如下,由于考虑到原始隐藏状态和最终隐藏状态在漏洞检测中都是有信息的,所以采用下面的方式计算label:

si=hiThi0gi=softmax(Wg(2)(tanh(bg(1)+Wg(1)si))+bg(2))oi=softmax(Wo(2)(tanh(bo(1)+Wo(1)si))+bo(2))y^=i=1|V|Sigmoid(oigi)

其中 表示逐元素乘积,权重和bias均为待学习的模型参数

最后通过计算出的label与图真实的label做loss,反向传播优化网络参数

TMP model介绍至此结束


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/500612
推荐阅读