ISSRE-2021 Peculiar:Smart Contract Vulnerability Detection Based on Crucial Data Flow Graph and Pre-training Techniques

论文地址:Peculiar:Smart Contract Vulnerability Detection Based on Crucial Data Flow Graph and Pre-training Techniques

论文实现:https://github.com/wuhongjun15/Peculiar

Peculiar:CDFG+GraphCodeBERT做智能合约缺陷预测

Abstract

静态分析方法很依赖手工启发的模板,很难在不同类型的漏洞适用。本文提出了一个新方法Peculiar,用了预训练技术。与传统的DFG相比,crucial DFG更简单,也不会带来不必要的深度,使得模型能够更容易去关注关键特征。实验表明效果在检测reentrancy vulnerability上比目前的SOTA方法高了20个点

Introduction

复杂图神经网络来表示程序会使得模型不能很好的泛化到不同的合约上

因此本文提出了一个预训练模型,通过crucial DFG检测智能合约漏洞,是一种不需要手工定义模板的基于学习的方法

Background and Motivation

Smart Contract Vulnerability Classifification

智能合约的bug大致分为以下9类:

  • data:数据定义,初始化,映射,访问或使用,常见于模型,规范或应用中
  • description:软件使用,安装或操作的注释
  • environment:支持软件的引起的bug
  • Interaction:通过与其他以太坊地址的交互而导致的bug
  • interface:接口的规范或实现中的错误
  • logic:决策,分支或计算算法等bug
  • performance:造成gas增加的bug
  • security:威胁合约安全的bug,比如认证,隐私性,财产
  • standard:与定义好的标准不一样的bug,最常见的错误,也是检测工具产生假阳或假阴的潜在因素

Vulnerability Example

avatar

如果使用合同中的支付函数调用(即call.value(), deposit.value(), transfer()等)调用其他合同,同时调用呼叫者,从而最终提取调用者合同帐户的全部金额,而块中的记录只是第一次提取

例如列表1攻击者调用attack函数(23行),会执行24行的withdraw函数,对应第3行的withdraw,在solidity语言里,一个额外的账户或其他合约发送以太到一个合约地址,被调用的合同会执行fallback函数,因此Attack合约会转到使用Attack.fallback(27行)一直继续执行withdraw,但看起来合约Attack只被执行了一次

Motivation

avatar

图1左上是例子,在26-28行有reentrancy vulnerability的bug。在智能合约里,漏洞往往只存在于关键代码而不是全部,所以需要删除一些无用的信息就用CDFG就够了,信息越多模型越难训练

Apporach

avatar

模型架构用的GraphCodeBERT,把DFG换成了CDFG,graph masked attention和预训练任务也是用的GraphCodeBERT

Experiment

avataravatar