没有合适的资源?快使用搜索试试~ 我知道了~
Eth2Vec: 基于机器学习的智能合约漏洞检测
区块链:研究与应用3(2022)100101研究文章Eth2Vec:学习合约范围的代码表示,用于以太坊智能合约芦泽奈美a,柳井直人a,*,杰森·保罗·克鲁兹b,冈村慎吾ca大坂大学信息科学与技术学院,大坂565-0871,日本b大坂大学,大坂565-0871,日本c国立技术学院奈良学院,奈良639-1080,日本A R T I C L E I N F O关键词:以太坊智能合约区块链神经网络静态分析代码相似性漏洞检测A B S T R A C T以太坊智能合约是在以太坊区块链上部署和执行的计算机程序,用于在不信任的各方之间执行协议作为支持智能合约的最突出的平台因此,在过去十年中发现了许多智能合约漏洞。为了检测和防止这种漏洞,已经创建了不同的安全分析工具,包括静态和动态分析工具,但是当要分析的代码不断被重写时,它们的性能急剧下降。在本文中,我们提出了Eth2Vec,这是一种基于机器学习的静态分析工具,可以检测智能合约漏洞。Eth 2 Vec保持其对代码重写的鲁棒性;即,它甚至可以检测重写代码中的漏洞其他基于机器学习的静态分析工具需要分析师手动创建的功能作为输入。相比之下,Eth2Vec使用神经网络进行语言处理,以自动学习易受攻击的合同的特征在此过程中,Eth2Vec可以通过比较目标合约代码与学习合约代码之间的相似性来检测智能合约中的漏洞我们使用现有的开放数据库(如Etherscan)进行了实验,Eth2Vec能够在众所周知的指标方面优于基于支持向量机的最新模型,即,精确度、召回率和F1分数。1. 介绍自比特币诞生以来,区块链技术就吸引了人们的极大关注[1],比特币是第一个使用区块链来支持其加密货币交易的平台 区块链是一个公共的、分布式的、仅附加的账本,其中记录了用户之间的所有有效交易。区块链技术已经发展到支持通用计算,而不仅仅是简单的加密货币交换。这些计算由智能合约实现,智能合约是在区块链上部署和运行的代码片段有许多区块链平台支持智能合约,包括以太坊,Binance,HyperledgerFabric和Corda,其中以太坊是最突出的。以太坊[2]是为智能合约提供执行环境的最大平台以太坊智能合约是部署在以太坊区块链上的程序,由以太坊虚拟机(EVM)作为EVM字节码1运行。以太坊区块链本质上是去中心化和透明的,因此任何人都可以访问和分析部署在以太坊区块链上的智能合约的EVM字节码不幸的是,这也意味着对手可以分析智能合约的EVM字节码来寻找漏洞并利用它们[3]。该等漏洞利用及对易受攻击合约的攻击可导致重大财务损失。一个臭名昭著的例子是2016年的DAO黑客,当时攻击者利用DAO智能合约中的漏洞窃取了以太坊中使用的加密货币Ether,价值约6000万美元。根据参考文献[3],由于用于创建智能合约的编程语言的复杂性(或缺乏复杂性),智能合约的安全性无法得到保证,例如, Solidity是一种相对较新的语言,程序员在创建安全智能合约时知识不足。应该注意的是,智能合约是不可变的,因此它们不能被修改;* 通讯作者。电子邮件地址:yanai@ist.osaka-u.ac.jp(N. Yanai)。1下文中,https://doi.org/10.1016/j.bcra.2022.100101接收日期:2021年8月11日;接收日期:2022年6月29日;接受日期:2022年7月26日2096-7209/©2022作者。由Elsevier B.V.代表浙江大学出版社出版。这是CC BY许可证下的开放获取文章(creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表区块链:研究与应用杂志主页:www.journals.elsevier.com/blockchain-research-and-applicationsN. Ashizawa等人区块链:研究与应用3(2022)1001012也就是说,它们的源代码一旦部署在区块链上就无法编辑或删除近年来,已经报告了许多对部署的智能合约的攻击[4],因此,在将智能合约部署到区块链上之前,确保智能合约的源代码不容易受到攻击是很重要的为了做到这一点,已经开发了许多用于以太坊智能合约中漏洞检测的分析工具[5]。在本文中,我们的目标是开发一个静态分析工具,可以通过分析智能合约的代码来检测智能合约中的各种漏洞在静态分析中,在非运行时环境中分析目标计算机程序;即,仅提供其源代码作为输入以识别代码是否具有漏洞而不执行程序本身。因此,静态分析对于防止部署易受攻击的代码非常有用然而,静态分析一般存在两个问题:(1)其漏洞检测的准确性有限;(2)其分析时间可能较长。例如,从EVM字节码反汇编[6- 9 ]不具有识别程序是否易受攻击的能力,并且早期文献关注于简单地换句话说,反汇编代码通常需要手动分析,从而增加了误报和漏报的数量。此外,符号执行[10- 13]从目标代码中提取控制流程图(CFG),通过自动化分析实现了高精度,但CFG的生成需要搜索所有状态,以便目标代码转换。因此,分析需要大量的时间[14]。上述问题的一个潜在解决方案是机器学习。基于机器学习的静态分析通过学习代码的特征来推断给定代码是否易受攻击这样,该分析还在短时间内实现了多功能分析。然而,基于机器学习的静态分析有两个固有的局限性:(1) 代码重写降低了分析准确性,(2)智能合约的适当特征是不确定的。在第一个限制中,例如,具有内联函数的CFG与原始函数的CFG不同。因此,将原始函数与内联函数识别为相同的代码是具有挑战性的。一对具有相同语义但不同结构的函数可能会产生不同的分析结果,因为代码结构之间的差异强烈影响分析。在第二个限制中,尽管机器学习的特征是手动提取的,但关于智能合约的代码样本和开放知识是不够的。关于智能合约功能的常识从未建立[3]。值得注意的是,智能合约代码中代表漏洞的特征种类是未知的。因此,例如,现有的工作[15]未能检测到几个漏洞,因为它对机器学习的特征提取不足。此外,对代码结构差异具有鲁棒性的功能仍然不明显。神经网络是隐式提取特征的常用方法然而,基于神经网络的现有工作[15,16]没有克服上述限制,并且对代码重写的鲁棒性不足。21.1. 贡献在本文中,我们提出了Eth2Vec,一个基于机器学习的静态分析工具,它通过学习智能合约代码的EVM字节码、汇编代码和抽象语法树来识别智能合约漏洞。Eth2Vec具有高通量、高准确度和2本文是我们之前工作的完整版本[17],该工作已在BSCI 2021上发表。在以前的工作中,我们提出了一个名为Eth2Vec的分析工具,并评估了其性能。在本文中,我们通过比较基于神经网络的平凡构造[15]和基于自然语言处理的最先进工作[16],更详细地评估了Eth2Vec的性能我们还讨论了Eth2Vec的实验结果和性质。对代码重写的鲁棒性Eth2Vec是一种基于神经网络的自然语言处理分析工具,它只需要将目标智能合约代码作为输入即可输出该代码中存在的漏洞和漏洞类型因此,即使是没有智能合约漏洞专业知识的分析师也可以使用Eth2Vec快速分析智能合约代码并检查漏洞。在使用机器学习,我们的主要贡献是提供了一种对代码重写具有鲁棒性的漏洞检测方法 Eth2Vec通过利用神经网络进行自然语言处理来克服上述限制。特别是,Eth2Vec可以通过使用自然语言处理来比简单的神经网络更精确地提取特征,自然语言处理可以学习智能合约每个功能的上下文。尽管一些工具[16,18]基于用于分析以太坊智能合约的典型语言模型,即,Word2Vec [19]是可用的,Eth2Vec是新颖的,因为它能够实现对代码重写的鲁棒分析。为了实现这一点,我们还开发了一个模块,将EVM字节码及其语法信息作为神经网络的输入。 有了这个模块,Eth2Vec可以比基于Word2Vec的工具更有信息量地提取和学习代码的特征。此外,我们设计了一种基于神经网络的自然语言处理学习方法,该方法将通过编译Solidity代码获得的EVM字节码作为输入(详细信息请参见第4节)。我们进行了实验来评估Eth2Vec的性能根据实验结果,Eth2Vec能够在1.2 s内检测值得注意的是,Eth2Vec能够检测到重入漏洞,这是已知漏洞中严重程度最高的漏洞[20],准确率为86.6%。 Eth2Vec在漏洞检测的知名指标方面优于典型方法[15]。此外,Eth2Vec可以检测重写代码中的漏洞,这是现有的基于Word2Vec的SmartEmbed工具无法检测到的[16](详见第6.3节)。综上所述,我们在本文中做出了以下贡献我们提出了Eth2Vec,这是一种分析工具,可以在没有智能合约漏洞专家知识的情况下输出目标智能合约中漏洞的存在和类型。Eth2Vec的漏洞检测对代码重写具有强大的抵抗力我们表明,Eth2Vec在漏洞检测的知名指标方面优于典型方法[15]此外,Eth2Vec可以检测重写代码中的漏洞,SmartEmbed没有检测到[16]。我们在GitHub上发布了Eth2Vec的源代码,以供复制,并作为未来工作的参考。2. 背景在本节中,我们描述背景知识,以帮助读者理解我们的工作。2.1. 以太坊智能合约以太坊是一个使用区块链技术来支持智能合约执行的平台,智能合约是部署在以太坊区块链上并在EVM上下文中确定性运行 不可变性属性表示智能合约代码一旦部署在区块链上,就不能修改或删除。确定性属性表明,部署的智能合约的功能将为任何有资格执行它们的用户产生相同的结果。以太坊中的分类账状态被建模为账户,即外部拥有的账户(EOA)和合同账户。EOA有其相应的私钥,可用于签署以太坊的传输并与智能合约进行交互合同●●●31L我2½;]账户有智能合约代码,EOA不能有,他们没有相应的私钥。相反,合约账户由其智能合约代码的逻辑控制。智能合约根据合约地址被赋予一个身份一旦部署在区块链上,智能合约就可以自我执行,并由网络中的对等体进行管理。合同的功能在合同中规定的条件得到满足时执行 当合约地址是交易的目的地时,合约被调用,交易是由EOA签名的消息,由网络传输,并记录在区块链上。一个事务调用一个合约,使用事务中的数据作为输入在EVM中运行。这些数据包括有关合约中要运行的函数以及要传递给该函数的参数的信息功能调用由用户请求,并由网络中的对等点执行,由用户支付费用 为了促进这样的过程,以太坊依赖于由以太用户支付的gas来“燃料计算”。不同的函数需要不同数量的气体,这取决于它们计算的复杂性。执行费用可以防止拒绝服务攻击和无限执行。智能合约通常用高级图灵完备编程语言编写,例如Solidity [21]。然后将源代码编译为在EVM中运行的低级字节码网络中的每个对等体运行EVM的本地副本以验证合同函数的执行。然后,处理的交易和智能合约状态的所有更改都会记录在区块链上。2.2. 机器学习机器学习由两种算法组成,即,训练和推理。训练算法将数据作为输入,以学习它们的特征并优化目标函数模型内部的参数另一方面,推理算法将未学习的数据作为输入,并推断出与训练数据相似的特征集当数据是未标记的,学习算法被称为无监督学习。近年来最流行的机器学习方法是深度学习,它基于神经网络,可以以黑盒的方式提取特征。在本文中,我们的目标是开发一个学习易受攻击的智能合约的模型,以检测未学习的智能合约中的漏洞。神经网络模型是表示神经元之间的连接的机器学习模型,这是人类在计算机上的大脑机制该模型可在计算机上表示复杂的非线性函数 两种任务,回归任务和分类任务,在神经网络上被视为众所周知的设置。回归问题从输入数据中推断出连续数,分类问题推断出输入数据所属的类。使用神经网络进行自然语言处理的Eth2Vec特征提取被归类为回归问题。神经网络的每个输入信号都具有唯一的权重,权重是用于将输入信号的重要性传播到输出层的元素。即,输入对神经网络的输出的影响与输入的权重成比例地激活函数决定如何激活神经网络的输入信号的总和支持向量机(SVM)是一种线性二进制分类器,用于将输入分类为两类,并为分类提供显着的高性能。此外,SVM通过与核方法相结合来提供非线性分类。2.3. 自然语言处理自然语言处理处理的是人类用来相互交流的语言,这些语言被表达为文本。自然语言处理的典型应用是,例如,文档分类,机器翻译,文档摘要,回答问题和交互式对话。一般来说并且从语法或语义的角度来看,词也是句子中作为成分的最小单位,每个句子都有一个衔接的语境。比句子短并且由两个以上单词组成的单元串被称为然而,将文本分割成单词、短语和句子单元并不简单,每个单元的定义都是不平凡的。用自然语言编写的文本和用编程语言编写的代码之间的一个重要区别是,只有代码才有语法和结构。自然语言处理需要考虑代码的语法和结构来处理代码。3. 通过机器学习分析智能合约在本节中,我们将描述我们的设计目标、分析目标以及分析目标的技术难度。3.1. 我们的目标我们的主要目标是开发一种分析工具,可以检测我们所知道的各种智能合约漏洞。用于智能合约分析的E-X工具及其功能总结在表1中。 这些工具有特定的目标漏洞可供检测,据我们所知,没有通用的分析工具可以检测所有类型的漏洞。在本文中,我们介绍了Eth2Vec,这是一个静态分析工具,可以潜在地检测我们在以太坊智能合约中所知道的各种漏洞。3.2. 分析目标我们的分析目标是用Solidity编程语言编写的智能合约代码我们的目标是检测存在的漏洞的能力和分类的代码中的漏洞进行分析。请考虑以下情况。开发人员正在开发智能合约,他/她希望使用分析工具来确定智能合约是否包含漏洞。该工具应该说服开发人员,他们可能对智能合约漏洞有足够的了解,也可能没有足够的了解,正在开发的智能合约没有任何漏洞,并且可以安全地部署在区块链上因此,我们的目标是开发一种工具,仅将智能合约的代码作为输入,以确定智能合约是否包含可验证性。这种分析智能合约的规范是更可取的,因为与C和Java等通用编程语言相比,关于以太坊智能合约的标准化知识是不够的。一些动态分析工具[24,31,34]可以通过执行代码本身来检测智能合约漏洞,但动态分析需要分析人员事先了解漏洞。下文中,我们将以Solidity编写的代码称为合约,将由多个合约组成的代码文件称为合约文件。此外,我们将用于评估漏洞的合约称为测试合约,将用于学习漏洞的合约称为训练合约。我们将从合约编译中获得的代码称为EVM字节码。每个合约中最大的单元是函数,库函数也等同于函数。最后,“区块链”是指以太坊区块链,除非另有说明。本文中的问题设置然后用表2中描述的变量形式化,如下所示。问题表述:我们将我们的智能合约分析方法形式化如下。每个合同ci2C包括漏洞Vi¼ fvi;.; v i g 2 V l,其中C表示一组合同,V表示一组相互独立的可变性,l表示任何数字。 给定任意整数n 2 N,合约和漏洞的组合CV 1/4{(c1,V1),设fεctgi1d<$Rd表示模型M的输出,其具有d<$jVjN. Ashizawa等人区块链:研究与应用3(2022)1001014我我我我--表1现有工具的总结工具TOD随机时间戳不可预测的调用堆栈丢失Reentrance Unchecked tX.origin Blockhash Send Selfdestruct Visibility Unchecked昂贵未选中别人number状态深度醚呼叫数学图案呼叫返回值美国[24]美国[14]美国[25][26]第二十六话美国[27][29]第二十八话:我的世界,我的世界奥西里斯[11]Oyente [10]西班牙语孔隙率[8]美国[13][30]第30话:我的世界[31]第三十一话[32]第一次世界大战期间,美国的军事行动[20]SODA [34]碳酸氢钠Vandal[9]瓦胡岛✓ ✓VulDeeSmartContract[18个国家]Eth2Vec(我们的目标)✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓此表包含我们调查的不同分析工具以及它们可以检测到的漏洞列表示不同的漏洞,行表示工具及其检测漏洞的能力结果来自调查论文[5,22,23]及其原始作品[13,14,18,24,25]。元素,其中jVj表示V的大小,εct表示V中的漏洞概率。 我们的目标是开发一个优化MCV;ct→fεctg的工具。3.3. 技术困难参考文献中提出了几种基于机器学习的静态分析工具,用于检测智能合约中的 [14,16],但其漏洞检测的准确性即使在已知漏洞上也是有限的。特别是,当代码从原始代码重写时,这种准确性会显著降低。此外,代码重写限制了现有工具可以检测到的漏洞数量。基于机器学习的分析工具检测表2变量的描述变量描述Dict合同文件Ci合同fs函数顺序I块输入j指令tc令牌UCi多功能Sjuffs表示多个块指令列表在令牌列表中输入通过部署一个模型来学习各种带有标签的漏洞,然而,由于代码重写引起的代码差异,其检测漏洞类型的准确性降低,除非可以适当地提取特征[15]。因此,现有工具的漏洞检测能力有限。在上述问题公式化之后,作为我们的动机的第1节中描述的限制被形式化如下:即使ct具有包含在CV中的可达性Vi,对于任何i2[1,n],εct<$εci对ct成立C V. 我们称这种情况为非鲁棒性。EX防火墙工具在漏洞检测方面的准确性有限因为它们的特征提取不足。一般来说,机器学习模型需要手动提取的特征作为输入,然后显式地学习这些特征。然而,表示要分析的智能合约的功能并没有标准化,因为与其他成熟的通用语言(如C和Java)相比,Solidity语言相对较新[3]。直觉上,关于非鲁棒性的限制表示为模型M所需的未知。缺乏智能合约的代码样本[3]是特征提取不足的另一个4. Eth2Vec在本节中,我们介绍Eth2Vec。我们首先描述Eth2Vec的设计概念,以克服上一节中描述的技术困难,然后介绍工具概述及其构建块。最后,我们提出了Eth2Vec模型及其目标函数。-θ!fsfs的向量表示CT_in_j_i的相邻指令的向量表示pj中的pj是相对于inj的A_in_j是相对于in_jk串连接4.1. 设计理念我们将通过利用神经网络进行自然语言处理来解决技术难题。在自然语言处理中,VP.P.i!nj-v!tcP在jtc的矢量表示在中国学习中,每个单词都被矢量化为一个标记,每个句子都被矢量化为一个序列。将自然语言处理融入δ(inj,fs)inj根据fs的向量表示σ(σ)S形函数由tc得到的pn(tc)Etd~Pntc采样函数,根据Pn(tc)对令牌td进行采样Eth 2 Vec,我们利用PV-DM模型(段落向量的分布式内存模型)[35],该模型通过将考虑到段落的上下文我们扩展了PV-DM模型,v-A--i!nj在j中的向量表示它可以将合同代码矢量化。在此过程中,Eth2Vec可以提取无形合同N. Ashizawa等人区块链:研究与应用3(2022)1001015特征隐含。N. Ashizawa等人区块链:研究与应用3(2022)10010162pSt¼k不t-k塔贝为了创建扩展的PV-DM模型,我们还开发了一个新的模块EVM E Xtractor,它可以获得合同的语法和语义。例如,EVM EX tractor获取主要代码信息,如函数名和起始地址。因此,Eth2Vec可以适当有效地实现特征提取。Eth2Vec通过利用通过上述自然语言处理的神经网络矢量化的代码信息来计算测试和训练合同在分析代码的安全性时,Eth2Vec首先学习易受攻击的代码,然后它可以根据待分析代码与学习代码的相似性来检测漏洞。因此,即使漏洞的基本特征不清楚,Eth2Vec也可以分析使用Word2Vec进行特征提取似乎是一种微不足道的方法[16,18],但这种方法缺乏鲁棒性,无法精确检测漏洞。4.2. 工具概述Eth2Vec由两个模块组成,即,用于神经网络的PV-DM模型[35],它处理段落,以及EVM EX拖拉机,其从Solidity源代码创建PV-DM模型的输入4.3.1. PV-DM模型与Word 2 Vec [19]相比,其仅对句子级别的文本数据进行矢量化,PV-DM模型对段落级别的文本数据进行矢量化,并输出每个单词和每个段落的矢量表示给定由多个句子组成的文本段落,PV-DM模型在每个句子上应用滑动窗口滑动窗口从句子的开头开始,每一步向前移动在这样做时,PV-DM模型执行多类推理任务,使得其将当前段落映射到向量中,并且将上下文中的每个单词映射到向量中。 更准确地说,模型对这些向量进行平均,并通过softmax函数从词汇中推断出目标词。PV-DM模型的架构由一个隐藏层组成:例如,模型获得给定输入的向量,然后计算向量的平均值和sigmoid函数。 输出层基于softmax函数计算分类结果。形式上,给定一个包含一个段落列表p 2 T的文本,每个段落p包含一个句子列表s 2 p,每个句子是一个序列,|S|字w t s。然后,PV-DM模型最大化对数概率,如下所示:XTXpXjsj-klogPwjp;w;.;w (1)Eth2Vec的概述如图1所示。扩展了PV-DM模型,使其能够像神经网络一样处理EVM字节码而不是自然语言。扩展的PV-DM模型通过将从EVM字节码生成的JSON文件作为输入来执行无监督学习,然后Eth 2 Vec基于扩展的PV-DM模型的学习结果来计算代码相似度。 为了将扩展的PV-DM模型实例化为一个模块,我们还开发了EVM E X拖拉机。EVM EXtractor通过语法分析EVM字节码,为指令级、块级、函数级和合约级创建JSON文件因此,Eth2Vec将待分析的EVM字节码作为输入,然后返回合约级别的代码克隆及其漏洞列表。培训合同中的漏洞需要事先查明。可以使用EX XML分析工具来识别漏洞,然后基于漏洞合约与训练数据之间的代码相似度来评估测试数据中的漏洞Eth 2 Vec最终输出要分析的代码中函数级别的漏洞;即,脆弱的功能被识别。Eth2Vec还可以学习漏洞通过几个规范工具[10,20](详见第5节)。4.3. 构建块Eth 2 Vec使用PV-DM模型[35]和EVM EX牵引器作为构建块。PV-DM模型最初是为文本数据设计的,顺序布局,同时它也可以通过扩展语言的向量表示来用于分析as-sort代码[36]。在本文中,我们根据第4.4节中描述的EVM字节码的语法扩展PV-DM模型,提出了一个合同范围的表示学习模型。4.3.2. EVM提取器EVM EX tractor是一个从语法上分析PV-DM模型的EVM字节码 它将Solidity文件解析为图1所示的层次结构。 二、最高层的数据代表待分析的合同第二个层次表示文件相关信息。第三层表示依赖于功能的信息。第四级表示由多个指令组成的块在每一层,sea表示当前函数的起始地址和当前块的起始同样,see和eea分别表示下一个函数的起始地址和下一个块的起始地址相反,call表示来自当前函数(或块)的被调用方函数(或被调用方块)最后,在底层,EVM字节码的指令与它们的地址一起存储在src同时,库函数被视为一个单独的函数。图1.一、 关于Eth2Vec PV-DM模型:段落向量的分布式内存模型;EVM:以太坊虚拟机。N. Ashizawa等人区块链:研究与应用3(2022)1001017K1/1CiJPinjAinj不tc第3条tcJS1-XCifsseqI在jtcPDictPUCiPSf sPIseqiPTinjJθCifsseqI在jtcvtc3C我乌塔希河斯皮什河伊什我的P中的相邻指令的向量表示。然后,我们定义指令本身的向量表示及其操作数的向量表示的级联,如下所示:CT扫描仪-- !1XAinj !( 3)其中,P_in_j_n是关于in_j的一个操作,A_in_j_n是关于in_j的操作的列表,并且k是串的级联根据每个合约Ci中的函数fs,j中的第j条指令的向量表示δ(inj,fs)是两个向量表示的平均值:j-1中的第j-1条指令和j-1中的第j-1条指令。δβ-glycoprotein;f.-θT.C.T.W. 公司简介 (4)一个 !Jfsj-1j1因此,函数(2)中的对数概率y可替换为P(tc|Ci,i nj-1,i nj1)¼P(tc|δ(inj,fs))。 根据参考文档[36],通过让X¼-v!并利用S形函数σX;1,上述计算可以通过如下的k-负采样[35,37]来近似:P.DictP.U.C.i PSfs 皮耶塞克河 PTJlog P. tcjδinj;fs;4.4. 目标函数J<$θ <$logg<$σ<$X<$XkEtd~Pntc中国dtc logσX;(6)Eth2Vec是一个通过无监督学习来学习和推断以太坊智能合约代码的模型直观地说,它可以被视为Word2Vec的扩展,具有更广泛的代码矢量表示,因为它能够针对以太坊智能合约。Eth 2 Vec的目标函数是通过扩展函数(1)中描述的原始PV-DM模型以及第4.3.2节中所示的语法来设计的。下面的论点受到Asm 2 Vec [36]的启发,Asm 2 Vec是PV-DM模型在汇编语言中的扩展给定一个要分析的以太坊智能合约文件,Eth 2-其中,ftd6¼tcf是一个恒等函数,如果函数内部的表达式为真,则返回1,否则返回0。另一方面,Etd ~Pn tc是根据噪声分布P n(t c)从t c对令牌t d进行采样的采样函数。最后,我们使用Eq。(6)作为Eth2Vec的目标函数。直观地,该函数最大化当前指令的令牌t c的概率,并减小其他指令的令牌t d的概率。然后,我们可以通过以下导数计算关于θfs的梯度:Vec对指令级的代码进行向量化,然后计算其通过所述训练确定与所学习的代码的代码相似性这个过程是∂JðθÞJ对于与指令、函数级和合约级相关的块级递归地执行,因此Eth2Vec可以检测代码-θ!fs2000 万美元!vtc-θ!fs(7a)其分布类似于训练数据的分布形式上,基于表2中所示的变量定义,目标函数定义如下:¼31-σX!Xþtd~P nt cDXDictXUCiXSfsXIseqiXTinjlogPtjC;in;在(2)此外,我们可以通过近似上述梯度计算如下:其中,我们用Dict表示合约文件,用Ci表示合约,用fs表示函数,用seqi表示由多个指令组成的块,用inj表示每个指令,并且通过tc表示关于当前指令的令牌同样我们我的天啊!vtcXkE快!3我ð⟦t¼t⟧-σðXÞÞ:(7b)C用C表示多个函数,用f表示 多个块,按顺序a-fs 直觉,方程式(7b)近似描述的原始导数指令列表,并且通过T_in_j_a令牌列表这里,第一个求和项,即,Dict包括在上一节所示的第二个级别中,即,file name. 函数(2)给出合同及其指令,然后它最大化当前令牌tc的对数概率。直觉上,每个合约的词汇意义是通过当前指令及其相邻指令计算的。此外,还可以通过提取每个合约的特征来分析由多个合约组成的代码我们在下面详细描述目标函数以表示上述直觉给定一个合同文件Dict,函数fs对于每个如果令牌与当前指令相同,则将梯度移到正,否则将梯度移到负。同样,相对于矢量表示的梯度!上的令牌的vtc当前指令可被近似。而且,对于矢量表示!vPi n的一个令牌的一些操作Pin和那个!vAinof操作数,它们的梯度可以以类似的方式被近似。这些梯度计算如下,尽管我们省略了它们的推导:∂JðθÞ合约Ci是向量i zed,然后我们用-θ表示!fs 矢量表示,快!vtc在j中的最大值t<$t c-σX·δ;fs:(8)fs的发音此外,我们用CT表示,图二. EVM提取器提供的代码信息。(五)¼KIE拉克莱特6¼tc 1-σX:CifsseqI在jtcj-1j1t~PntcN. Ashizawa等人区块链:研究与应用3(2022)1001018--快-快!1ÞC阿托宁不不不--∂JðθÞð⟦t¼t⟧—σðXÞ Þ·1 XA!v:(9)算法2. 查询的Eth2Vec的推断算法推断∂JðθÞ吉夫!我不知道你是谁。v-!(10)CPingyinj1-A-i-nj1≈类似的等式对于j-1中的先前指令成立,inj-1与inj-1,尽管由于篇幅限制我们省略了细节4.5. 训练和推理我们现在介绍训练算法和推理算法,使用前面小节中描述的梯度 训练算法如算法1所示。 训练旨在优化属于作为输入的合同文件的每个指令的向量。具有相似含义的指令通过训练映射到向量空间中的该算法输出的向量可作为特征用于合同级分析的向量表示。该算法是一种无监督的训练算法,因此该过程不需要等价合同之间的地面实况映射。在向量空间中映射指令时,通过学习易受攻击的契约来考虑易受攻击的特征。上述特征可以直接用于算法2所示的推理算法特别是,对于一个看不见的合约Ct62Dic t,算法首先是θ!ft,它与属于Ct的任何函数ft相关联。然后,算法遵循相同过程作为训练算法。然而,所有!在受过训练的人中模型保持不变,θ!在它们的错误之后更新FT。 在推论的最后,θ!ft是输出,而所有Ci2Dict的矢量保持不变,除了θ!F. 最后,为了搜索与给定合同C t匹配的合同,使用典型的统计方法将所得向量与训练合同的向量进行比较,例如,余弦相似性算法1. Eth2Vec的训练算法TRAIN一个epoch。4.6. 执行我们利用Kam 1 n 03和py-solc-x4实现了Eth 2 ec。首先,主模块,即,PV-DM模型由Kam 1 n 0实现,Kam 1 n0是一个用于二进制分析的服务器系统[38]。我们主要修改了Dis-www.example.com和www.example.com中的源代码assemblyFactoryIDA.javaExtractBinaryViaIDA.py 。 特 别ExtractBinaryViaIDA.py是,www.example.com最初通过反汇编二进 制 代 码 生 成 从 IDA 提 取 的 JSON 文 件 , 然 后assemblyFactoryIDA.java将该文件存储在Kam 1 n 0中。但是,IDA 不 能 使 用 EVM 字 节 码 实 现 Eth2Vec 。 因 此 , 我 们 更 改 了ExtractBinaryViaIDA.py:例如,代码信息是通过使用py-solc-x(不含IDA)编译Solidity文件获得的,然后将其生成的汇编代码、抽象语法树(AST)和二进制代码提取为JSON文件的格式。当前输出显示遵循Kam1n 0的界面,其中漏洞被列为每个合同的功能级别。特别是,测试合同的脆弱性以及它们的信心都显示出来。输出示例以diX A表示。我们已经通过GitHub公开发布了Eth2Vec的源代码5. 实验在本节中,我们描述了我们为评估Eth2Vec而进行的实验。我们首先描述实验的目的,然后讨论用于评估的数据集和训练方法。最后,我们展示了实验结果。5.1. 实验目的为了评估Eth2Vec的性能,我们尝试在基于训练契约的测试契约中检测可验证性。首先,我们检查Eth2Vec是否恰当地表示了要分析的代码和在训练阶段学习的代码之间的关系。然后,我们评估了用Solidity语言编写的代码的克隆检测,以确认Eth2Vec是否可以适当地提取代码的特征。此外,我们根据词汇-语义关系评估语义克隆,以确认Eth 2 Vec对代码重写的稳健性。然后,我们检查Eth2Vec是否能够检测到所有3Kam1n0版本2.0.0:https://github.com/McGill-DMaS/Kam1n0-Community。4py-solc-X:https://pypi.org/project/py-solc-X/。≈N. Ashizawa等人区块链:研究与应用3(2022)1001019通过比较测试合同与训练合同的相似性,将测试合同中的漏洞作为输入。在这样做的过程中,我们还能够评估漏洞检测与上述克隆检测结果的一致性特别是,我们检查了漏洞检测的输出是否与被识别为克隆的代码中的可执行性相同,以及克隆是否包含在克隆检测实验结果表明,Eth2Vec能够准确地提取特征,从而检测出漏洞。最后,我们将Eth2Vec的性能与其他作品的性能进行了比较[15,39]作为基线。5.2. 实验环境如上所述,我们分两个阶段进行实验,即,智能合约中的克隆检测和漏洞检测 在本小节中,我们首先详细描述数据集和基线,然后描述阶段的设置。5.2.1. 数据集我们从Etherscan5收集了5000个合同文件,这是一个开放的智能合同数据库,用作实验中的数据集。 这5000个文件与最近工作中使用的文件相同[16]。然后我们选择了可以由Solidity编译器v0.4.11或更高版本编译的文件该数据集包含95,152个合约和1,193,868个区块。5.2.2. 基线我们比较了Eth2Vec的性能与Momeni等人基于SVM和神经网络的[15]作为基准。虽然有几个基于机器学习的现有工具[14,16,39]可以检测各种漏洞,但它们的源代码尚未发布,或者我们无法在我们的环境中构建它们的源代码。Momeni等人从以太坊智能合约的AST中提取了16个特征我们利用了其中的15个功能,但不包括十六进制地址,因为十六进制地址无法从源代码中获得,即,没有部署。其他功能描述在B.D.X B。我们评估的漏洞检测Eth2Vec通过比较它与Momeni等人的计划 在众所周知的度量方面,即,精确度、召回率和F1分数。为了方便起见,我们将基于SVM的方案称为基于SVM的方案,将基于神经网络的方案称为基于NN的方案。5.2.3. 克隆检测我们检查了Eth2Vec是否可以通过学习合约来精确地检测测试合约的克隆作为输入特别是,从5000份合同文件中,500份随机测试合同用于10倍交叉验证,其余4500份合同用作培训合同。 我们将检测克隆的代码相似度阈值设置为0.8。在上述实验设置中,精密度被用作评估指标。对于每个功能的克隆,即,函数级克隆,其输出阈值大于0.8,我们检查合约中具有最高相似性的函数是否确实是给定输入的克隆本实验中的克隆对应于参考文献[40]中的I型至IV型克隆,并且语义克隆与IV型克隆相同。5.2.4. 漏洞检测我们检查了Eth2Vec是否可以通过学习训练合同来精确地检测测试合同我们尤其在克隆检测实验中我们还通过使用Oyente [10]和SmartCheck [20]确认了测试合同中的可验证性作为实验的基础事实在这个实验中,我们采用了精确度,召回率和F1分数指标。5.3. 克隆检测Eth2Vec克隆检测结果见表3。根据该表,Eth2Vec可以隐式地提取比基于SVM的方案更多的特征[15]。例如,Eth2Vec的标准差值明显小于基于SVM的方案。直觉上,这意味着Eth2Vec的特征提取更稳定,因此Eth2Vec能够表示fea。各种代码的集合当我们检查Eth2Vec输出的细节时,我们发现了分离克隆。考虑清单1和清单2中显示的示例Eth2Vec的输出,即,清单2是清单1所示原始函数的克隆,不包括第5行和第9行。根据参考文献[ 40 ]中的定义,清单2与清单1的III型克隆完全相同。这意味着Eth2Vec可以精确地检测克隆,甚至是重写代码的克隆清单1:Transfer的原始函数清单2:Eth2Vec找到的Transfer原始函数的克隆支持向量机的标准差高于平均值。例如,SVM检测到一些克隆的精度约为90%,而它不能检测到多个克隆。有许多克隆没有被SVM发现。同时,基于SVM的方案的精度是小的,因为测试数据集包含几个克隆在几次执行。在这种情况下,基于SVM的方案推断出给定测试数据的否定。因此,精度变为0,从而导致较低的平均值和更广泛的标准差。尽管如此,当我们通过删除地面实况中的少数克隆结果重新计算精度时,精度变为42.7%。5.4. 漏洞检测Eth2Vec的漏洞检测结果如表4所示。表3Eth2Vec克隆检测的精密度[15]第15话:我的世界检查Eth2Vec检测到的漏洞是否与平均74.9%百分之三十四点六42.7%测试合同中包括了0.8的阈值标准偏差0.934.643.6在这个实验中,我们采用了类似于5https://etherscan.io/。该表显示了10倍交叉验证精密度测量的平均值和标准差“SVM w/o few clones”列显示了基
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功