关键词:
智能合约
以太坊
深度学习
漏洞检测
操作码
区块链
摘要:
随着社会经济需求的不断发展,区块链作为一项新技术发展起来,并在学术研究和实际工业应用中都引起了广泛的关注。以太坊是当下最流行的区块链平台之一,智能合约在关键的分布式应用程序中充当自治代理,并持有大量加密货币以执行可信交易和协议。以太坊目前已部署数万个智能合约,控制了价值数十亿美元的以太坊的加密货币,由攻击者引起的以太坊智能合约安全事件也层出不穷,资金损失尤为严重。智能合约是使用高级语言并由开发人员人为编写,通常使用Solidity语言,相关技术尚不成熟,因此智能合约存在漏洞难以避免。近几年,智能合约安全问题逐渐吸引了学者的注意,出现了一些相关的漏洞检测框架和工具,但其表现出一些明显的缺点,如检测准确率低、执行环境复杂等,其检测效果不能令人满意。智能合约数量不断快速增长,新的智能合约漏洞检测方法的研究成为形势所趋。为了保证智能合约漏洞检测效果,本文提出了基于深度学习算法的智能合约漏洞检测方法,实现了对以太坊智能合约最常见的整数下溢漏洞、整数上溢漏洞、未检查返回值漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和重入漏洞等6种漏洞的有效检测。通过大量实验证明本文所提出的智能合约漏洞检测方法适合目前的智能合约漏洞检测,并提升了漏洞检测性能。本文的主要贡献包括以下:(1)提出了基于操作码n-gram的智能合约漏洞检测方法。通过对以太坊智能合约源码编译以及字节码解析得到操作码数据流,经过对Solidity源码、字节码与操作码进行分析提出操作码简化抽象规则,进而对操作码进行简化。针对抽象后的操作码数据流,采用n-gram算法模型对其进行切分,得到bigram操作码特征片段,然后通过定义特征值计算方法得到特征值,进而构建特征矩阵。并采用Ov R策略构建多种机器学习多标签分类模型,对采集到的庞大的智能合约数据集进行训练实验,实现了对以太坊智能合约种漏洞的检测。(2)提出了基于操作码序列的深度学习智能合约漏洞检测方法。通过对以太坊智能合约源码编译以及字节码解析得到操作码数据流,根据以太坊黄皮书中操作码与16进制数value的对应关系构建字典,将操作码数据流转化为用16进制数表示的操作码序列,通过对操作码序列进行分析,设计循环神经网络、长短期记忆神经网络、CNN-Bi GRU和CNN-LSTM等4种不同的深度学习网络结构进行漏洞检测。(3)通过实时抓取和网上采集构建了庞大的以太坊智能合约漏洞数据集,并通过大量实验对智能合约漏洞检测方法进行验证。为获取充足的智能合约数据集,本文利用网络爬虫技术设计实现了智能合约爬虫工具,通过长时间抓取,实时获取了大量的以太坊智能合约数据。为更加充实数据集,同时在网上采集了真实有效的以太坊智能合约,并通过工具与人工相结合对智能合约数据进行标签标注,由此构建了一个庞大且时新的多标签智能合约漏洞数据集,其中包含47527条智能合约数据。经大量的实验证明,基于以太坊智能合约操作码序列的CNN-LSTM分类模型对以太坊智能合约的6种漏洞的检测效果最好,整数下溢漏洞、整数上溢漏洞、未检查返回值漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和重入漏洞的F1-score的值分别达到了0.87、0.84、0.83、0.82、0.80、0.75,6种漏洞整体性能评估指标macroF1值达到82.1%,同时,在性能方面一定程度上也优于检测工具。