【论文阅读】ReChecker

本项目在github上是开源的,是在上一篇论文阅读中提到的基于机器学习的序列表征方法的智能合约漏洞检测办法:代码
论文iEEE在:论文链接
论文
摘要:
近十年来,智能合约安全问题导致的巨大损失引起了工业界和学术界越来越多的关注。为了在智能合约漏洞检测任务中取得令人鼓舞的效果,研究人员开始尝试使用逻辑规则、符号分析和形式分析等方法。然而,现有的检测工具远不能令人满意。在本文中,我们尝试使用基于深度学习的方法,即带有注意力机制的双向长短期记忆( BLSTM-ATT ),旨在精确地检测重入错误。此外,我们提出了面向智能合约的合约片段表示,这有助于捕获必要的语义信息和控制流依赖。我们在超过42,000个真实智能合约上的大量实验研究表明,我们提出的模型和合约片段表示显著优于当前最先进的方法。此外,本文的工作证明了将基于深度学习的技术应用于智能合约漏洞检测是切实可行的,能够推动未来该领域的研究。

1、方法

主要是通过BLSTM结合了注意力机制来实现的,主要是针对重入漏洞。
在文中提到的一些启发:
1)有些模型在之前已经被用来检测C/C++的漏洞,如LSTM、RNN Enconder-Decoder来修复C语言错误。(现在是否还可以继续参考其他语言的漏洞处理修复问题?)
2)如CNN已经被用来在源代码中进行错误定位了
3)一个新的TBCNN,基于树的卷积神经网络,这里是使用了源代码的抽象语法树
针对的对象是对源代码进行检测,而非对字节码进行。

  1. 在数据清洗中,包括删除空行、非ASCII字符和不相关的注释
  2. 将智能合约转化为合约片段,由关键程序语句组成
  3. 将片段解析为一系列代码令牌,嵌入到特征向量中(这里是否可以参考Eth2Vec
  4. 将特征向量作为输入进行训练
    流程

2、合约片段表示以及向量表示

合约片段表示
如果将第六行状态修改语句放在第五行转行函数之前,就会避免下一次转账的发生。因此,对应智能合约的关键点,可以通过控制流分析的方式生成合约片段。
下面介绍向量表示:
从合约源代码到向量表示的特定表示过程,包括 (1) 合约片段表示;(2)象征性表现;(3)向量表示
向量表示

  1. 用户定义变量映射到符号名称如VAR1 VAR2
  2. 用户定义函数映射到符号名称如FUN1 FUN2
    后通过word2vec来转换成向量。为了获得等长向量,小于维度用0填充,大于维度截断多余部分

3、模型

采用了BLSTM+ATTENTION机制。
RNN-LSTM-BLSTM-BLSTM_ATT

  1. RNN递归神经网络是利与顺序信息。有输入输出向量和权重矩阵
  2. LSTM长短期依赖记忆网络,解决RNN的长期依赖性问题。添加了门单元
  3. BLSTM添加了一层反向LSTM
  4. 注意力机制,对于代码行中的重要单词,如CLL.VALUE,使用注意力机制来赋予权重。
    最终的重入性1,非重入性0

4、数据集和评估

评估采用基于混淆矩阵的ACC、TP、FP、F1
原始智能合约数据集为RSC,规范化的合约片段数据集为RCS

4.1 RSC

以以太坊智能合约为中心,从官方平台抓取了总共超过42000个合约源代码。使用call.value区分2000多个合约
并赋值1和0

4.2 RCS

使用合约片段,赋值1和0
具体分布如下
数据集

5、实验

十折交叉验证、二元交叉熵损失函数、梯度下降的最优算法Adam
学习率lr:0.0001、0.0005、0.001、0.002、0.005
dropout:0.2、0.4、0.6、0.8
batch_size:64
vm:200、300、400、500

5.1 提出的模型是否有效?

通过比较普通RNN、LSTM、BLSTM和BLSTM-ATT,基于的数据集是处理过的合约片段
比较1
自己实验的结果?

5.2 与现有的其他检测方法的比较

用于分析智能合约的首批工具之一(Oyente),基于字节码级别的静态分析工具(Securify),基于源代码的静态分析器(Smartcheck)和自动分析工具(Mythril)。
比较2

5.3 提出的合约片段是否有效?

对5.1中的模型在RSC和RCS上再分别进行实验
比较3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值