背景
实在是没办法,不翻译印象不深。。。

我们的方法
为了解决现有工具在智能合约检测方面的不足,我们提出了一种超出传统基于规则的框架的方法。特别地,我们根据程序中的数据流和控制流关系将智能合约源代码提取特征为一个合约图。图上的节点表示关键的函数调用或关键变量,图上的边捕捉它们的时间执行路径。由于大多数GNN模型都是在信息传播过程中显现出与生俱来的“平”,我们设计了一个消除阶段来使得图规范化。我们将GCN扩展成无度数的GCN,这样就可以解决规范化图的问题。进一步来说,我们将不同角色和程序元素之间的暂时关系也纳入考虑范围,同时提出了一种全新的暂时消息传播网络(tmp)。我们在超过30w的现实智能合约方程中做了大量的实验,实验表明我们的方法在重入漏洞、时间戳依赖漏洞、无限循环漏洞中展现了无与伦比的效果。

贡献:
总结来说,我们的关键贡献是:
1.提出了tmp和drcgm从而完全自动化地检测智能合约漏洞
2.将合约源代码特征化为合约图,然后将图规范化从而突出关键节点
3.最终实验效果很完美

问题描述:

问题表达
给出一个sc源码,我们希望可以发明一种全自动地方法对函数级别地漏洞进行漏洞检测。也就是说,我们考虑每个合约中的函数的标签y,如果y=1就是有某种漏洞,如果y=0就是安全的。本文中,我们关注三种漏洞:

重入
dao事件的漏洞。弱一个函数F1向接受方合约C1发钱,C1合约中fallback函数会被自动触发。C1可能会重新通过fallback函数调用F1函数从而再进入F1中偷钱。由于F1的目前执行状态都会等待这笔钱传输结束,因此C1可以利用这个F1的中间等待间隔把钱偷走。

无限循环
一种常见的漏洞。比如说某个循环没有退出条件或者退出条件不可达。除此之外,fallback函数也会引起一个无限循环的bug,也就是函数和fallback函数之间的无限循环调用。比如说,函数A调用函数B,但是呢参数写错了,这样的化就是自动触发函数B所在合约中的fallback函数,再假设这个fallback函数调用了A,这样就会陷入A和fallback函数中的无限call循环。

时间戳依赖
Sc利用区块的时间戳作为某些关键运算的触发条件,例如发送以太币或决定游戏的胜利者。然而,矿工具有再短时间间隔(900秒)内设置区块时间戳的权力。因此,矿工可能可以通过操控时间戳来获取不正当的利益。

模型综述:
1.图生成阶段,从源代码中提取控制流和数据流的语义,精确地对fallback机制进行建模
2.图规范化阶段,受启发于k-partite图
3.全新的消息传播网络,用于漏洞建模和检测

图生成阶段
现有的工作 [Allamanis et al., 2018]表明程序可以转化成有象征性的图表示,同时可以保留程序元素之间的语义关系。受这个启发,我们将一个智能合约函数表达成一个合约图,同时给不同的程序元素(如节点)分配不同的角色。进一步地,我们通过考虑它们地暂时顺序来构造边的关系。图1中的a和b解释了一条段合约和其对应的构造图。

ps:初看看不懂任何关系
ps:这幅图记录的也是一个重入攻击,虽然说它先置了0,但是由于bonus的标志一直无法置为true,所以当fallback反调用bonus的时候,仍然会给它+100块,然后在将这100块一次次地送回给recipient

我们第一眼就可以看到一个函数中的不同程序元素的重要程度并不是一样的。因此,我们将其划分为三类节点,分别是主要节点、次要节点和fallback节点。

主要节点的构造
主节点主要表示对自定义或内置函数的调用,这些往往是对检测具体漏洞起到重要作用的调用。例如,在重入漏洞中,一个主节点可以是对transfer函数的调用或者是内置call.value函数的调用,这两个都是侦察重入的关键。对时间戳依赖而言,内置调用block.timestamp将提取为一个主节点。对无限循环漏洞而言,所有合约内自定义的函数都被看成主节点。更正式来说,我们将关键的函数视为主节点,它们记为M1,M2…

次要节点的构造
主节点表示的是重要的调用,那么次要节点就用来表示模型中重要的变量,例如用户的余额和是否奖励的标志。这些关键的变量将会被定义为次要节点,记为S1,S2…

fallback节点的构造
更进一层地,我们通过构造fallback节点F来模拟fallback函数对合约进行攻击,它是可以与合约进行交互的。fallback函数是智能合约中的一个特殊的设计,也是许多安全漏洞中的原因。

边的构造
我们通过构造边来描述模型中各节点的关系。每一条边都描述了一条路径,该路径可能会被测试的合约函数遍历,而这条边的暂时的数字表示了它在该函数里面的顺序。具体来说,一条边的特征被提取为一个元组: (Vs , Ve , o, t),其中,Vs和Ve表示它的起始和结束节点,o表示它暂时的顺序,t表示边的类型。为了获取节点之间更丰富的语法依赖,我们构建了四种不同类型的边,分别是控制流、数据流、正常前向和fallback流边。具体的语义边表1:

基于GNN的智能合约漏洞检测(tmp)方法部分翻译(1)相关推荐

  1. 基于GNN的智能合约漏洞检测(tmp)方法部分翻译(2)

    合约图的规范化 大多数图神经网络在信息传播时都是内在的平等的,忽略了某些节点更重要的作用.而且,不同的合约源代码生成不同的图,从而阻碍了图神经网络的训练.因此,我们提出了一种节点消除过程来实现图的规范 ...

  2. Oyente:智能合约漏洞检测工具的安装与使用

    写在前面 当你阅读到这篇 博客 时,大概率你已经阅读并尝试过 Oyente 官方安装指导,甚至可能还在其它地方搜过安装教程,如果没有就当我没说... 那为什么在有各种版本的教程的情况下我依旧去写一个新 ...

  3. 区块链论文7(oyente智能合约漏洞检测工具)

    Making Smart Contracts Smarter 文章路径 参考链接1 参考链接2 参考链接3 Abstract: Cryptocurrencies record transactions ...

  4. java调试生命周期,一种基于JAVA的智能合约生命周期的管理方法与流程

    本发明涉及区块链技术,尤其涉及一种基于JAVA的智能合约生命周期的管理方法. 背景技术: 区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交 ...

  5. 这些智能合约漏洞,可能会影响你的账户安全!

    摘要:区块链联盟链智能合约形式化验证揭秘,解释了我们为什么要对区块链上的智能合约进行形式化验证,以及形式化验证的分类和业界针对每种分类所推出的形式化验证工具,最后作者描述了一下目前形式化验证的种种方法 ...

  6. 智能合约自动检测工具『链必验』,如何带你解锁Web3.0世界

    在我们发布[链必验]新版本之后,目前已有大批开发者前来试用,今天,我们还需要详细介绍这款工具. [链必验]智能合约自动检测工具,可用来检测区块链智能合约漏洞.平台针对每个用户模拟了一条单独的测试链,用 ...

  7. oyente—合约漏洞检测工具安装

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 oyente-合约漏洞检测工具安装 前言 一.oyente是什么? 二.安装 1.在docker安装 2.linux安装 1.首先就是 ...

  8. 基于图神经网络的代码漏洞检测方法

    文章结构 1. 引言 1.1 漏洞现状 1.2 漏洞研究传统特点 现有的研究方案大多把源代码转化为文本序列,使用自然语言处理中常用的循环神经网络进行自动化特征提取,但这忽略了代码中由于跳转.循环.判断 ...

  9. 智能合约漏洞攻击事件_智能合约百科全书攻击漏洞

    智能合约漏洞攻击事件 Applications on Ethereum manage financial value, making security absolutely crucial. As a ...

最新文章

  1. 转:中国互联网十五年的22个创新模式
  2. 他开发了基因界的百科全书,贡献却少有人知
  3. java mybatis enum_mybatis处理枚举类的简单方法
  4. Chart of Accout-科目表
  5. centos nginx重启_nginx学习笔记
  6. 使用 cProfile 和火焰图调优 Python 程序性能
  7. mysql8 win10启动_Windows10 mysql 8.0.12 非安装版配置启动方法
  8. python周天为一周的开始_周天-和周天相关的内容-阿里云开发者社区
  9. 公司消费一卡通“变法”记
  10. 洛谷 P4503 [CTSC2014]企鹅QQ 解题报告
  11. Jzoj5425 数论
  12. Linux-shell获取天气
  13. php指定时间转为时间戳,将时间转换为时间戳_php日期转时间戳,指定日期转换成时间戳...
  14. 闲置eSATA接口影响Windows 7启动速度
  15. 手提计算机10发现不到打印机,笔记本电脑连接打印机的详细步骤_笔记本电脑如何连接打印机-win7之家...
  16. 浙江中医药大学第十二届大学生程序设计竞赛 部分题解
  17. 关于一政网教育,考生们是如何看待的?
  18. 造梦师的梦想是什么样的?
  19. SOIC库分为L、M、N三种
  20. shell脚本明文密码隐藏且加密

热门文章

  1. 什么是加班费1:1(加班费1:1的计算公式)
  2. 找不到localhost的网页错误怎么办?
  3. WAP网站开发和部署配置
  4. 文件名变成蓝色了怎么办?
  5. 继续分享5个不错javascript游戏
  6. edonkey.exe
  7. 开源的防火墙 Linux 发行版:IPFire
  8. 奇虎360支持Unity引擎 将推3D页游无插件安装
  9. matlab的workspace在哪,matlab中的workspace
  10. linux内核cache使无效,linux内核之bcache简介