没有合适的资源?快使用搜索试试~ 我知道了~
区块链:研究与应用2(2021)100028EtherClue:对以太坊智能合约攻击的数字调查Simon Joseph Aquilinaa,Fran Casinob,c,Mark Vellaa,*,Joshua Ellula,d,Constantinos Patsakisb,ca马耳他大学计算机科学系,Msida,MSD 2080,马耳他b比雷埃夫斯大学信息学系,比雷埃夫斯,18534,希腊c信息管理系统研究所,雅典娜研究中心,Marousi,15125,希腊d马耳他大学分布式账本技术中心,Msida,MSD 2080,马耳他A R T I C L E I N F O保留字:区块链取证Ethereum攻击妥协以太坊操作语义A B S T R A C T以太坊智能合约中的编程错误可能会导致被盗加密货币造成灾难性的财务损失虽然漏洞检测器可以阻止部署易受攻击的合约,但这并不意味着不会部署此类合约。一旦易受攻击的合约在区块链上实例化并成为攻击目标,识别利用交易就变得不可或缺,以评估它是否实际被利用并识别涉及哪些恶意或颠覆账户 在这项工作中,我们研究了以太坊攻击的事后调查问题,使用专门为区块链设计的妥协指标(IoC)。IoC定义需要捕捉以太坊区块链背景下成功利用的副作用。因此,我们定义了一个智能合约执行模型,它包括多个抽象级别,这些抽象级别反映了区块链上代码执行的多个视图。其次,我们通过EtherClue(一种用于调查以太坊安全事件的原型工具)比较了不同级别定义的IoC的有效性和实用性。我们的研究结果表明,在事务块上定义的粗粒度IoC可以用更少的计算来检测利用事务。然而,它们是特定于合同的,并遭受假阴性。另一方面,通过虚拟机指令定义的细粒度IoC可以以增加计算为代价避免这些陷阱,但这仍然适用于实际使用。1. 介绍如今,以太坊是支持智能合约执行的最大的公共区块链。当在可编程事务方面引入可扩展性时,如图灵完备编程语言所定义的,结果是扩大了攻击面[1,2]。当智能合约代码偏离预期功能时,它本身就提供了攻击的直接场所 由于缺乏经验的程序员对智能合约如何在运行时执行的不完全了解,这个问题变得更加严重。这个级别的安全漏洞可能与非区块链代码中的漏洞类似,例如。 算法优于流、可重入性和差的随机性。其他则是针对智能合约的特定性质,例如: 调用未知的第三方合约代码,不正确地检查外部调用的返回状态,以及与基于气体的无限执行漏洞缓解或调用堆栈深度限制相关的拒绝服务(DoS)漏洞等。此外,以太坊上部署的基于货币/代币的合约数量证明了用户控制输入不充分的经典漏洞。其他攻击入口点由支持合约代码执行的运行时环境提供以太坊的基础设施需要虚拟机来执行代码,而共识协议的复杂性由于在块挖掘期间考虑到合约执行而增加。恶意矿工选择将哪些交易或以何种顺序包含在开采区块中的情况通过这样做,攻击者可以利用智能合约中依赖于时间或交易顺序的逻辑。最后,以太坊的外部环境包括与以太坊节点交互的代码,例如:dApp和链下加密钱包进一步扩大了攻击面[3]。 在这个层面上,攻击利用了相关技术中的载体,例如,针对dApp的基于DOM的XSS,或者针对桌面/移动应用程序的间谍软件。* 通讯作者。电子邮件地址:simon-joseph.aquilina. um.edu.mt(S. J. Aquilina),francasino@unipi.gr(F. 赌场),马克。维拉@ um.edu.mt(M。Vella),joel.ellul@um.edu. mt(J. Ellul),kpatsak@unipi.gr(C. Patsakis)。https://doi.org/10.1016/j.bcra.2021.100028接收日期:2021年4月12日;接收日期:2021年7月21日;接受日期:2021年8月19日2096-7209/©2021作者。出版社:Elsevier B.V.代表浙江大学出版社。 这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表区块链:研究与应用杂志主页:www.journals.elsevier.com/blockchain-research-and-applicationsS.J. Aquilina等人区块链:研究与应用2(2021)1000282无无无无无无无n nn最终,这些攻击可以以各种方式篡改提交的交易。近年来,我们目睹了一些关于以太坊区块链的臭名昭著的安全事件,这些事件导致了重大的财务损失或采取了严厉的措施来避免后果。去中心化自治组织(DAO)众筹平台事件可能是其中最具代表性的事件之一,因为在2016年6月18日,攻击者设法转移了他们控制下的6000万美元[4]。这些资金只能通过硬分叉来挽救,这一措施直接违反了允许在中央权力之前安排自治机构的原则[5]。2018年4月,一个整数溢出漏洞是BECToken被攻击的根本原因,导致10个58代币被盗 就在今年早些时候,DefiSaver的用户可能面临数百万美元的灾难,只有当其开发团队在其数字资产管理合同中发现漏洞时才及时采取行动。 这项工作的目的是确定利用交易,因此,重点是可以利用的漏洞,完全通过恶意制作的交易。这些数据或直接从外部拥有的账户提交,即: 一个与代码无关的账户,或者间接通过恶意智能合约。理想情况下,这些漏洞应该在智能合约实例创建之前就被检测到,特别是当人们考虑区块链不变性时。因此,对智能合约代码进行静态分析,识别源代码中的安全漏洞(例如,Solidity)或智能合约的反编译以太坊虚拟机(EVM)字节码,包括最常见的方法。值得注意的例子包括Oyente [7],基于Gigahorse [8]的分析工具,以及EtherTrust [9],Securityy [10],Zeus [11]和用于避免重入漏洞的动态验证工具[12]。其他人采取测试方法,并专注于使用模糊方法[9,13,14]生成测试输入,将测试结果与测试神谕进行比较。然而,在这两种方法中,全面的执行路径覆盖仍然是一个开放的挑战。因此,易受攻击的合约仍然可能部署在区块链上。在这种情况下,可以在数字取证和事件响应(DFIR)工具的帮助下,在随后的 这种性质的调查首先有助于了解有问题的智能合约是否被利用。在肯定的情况下,识别利用交易提供了到源帐户的链接。 这些账户可能属于犯罪者,也可能属于账户受损的受害者。此外,链接的账户可能与其他智能合约相关联,在这一点上,这些智能合约必须被视为恶意的,任何来自它们的未来交易都被视为可疑。危害指标(IoC)构成入侵的证据,通常与成功执行恶意软件的长期副作用直接相关[15]。例如,在Windows机器上的WannaCry运行软件攻击的情况下,调查人员可以通过检查在用于持久化的“HKLM System CurrentControlSet Servicesmssecsvc2.0”键是否可以找到值cmd.exe/c和C:ProgramDataaucdehyopp 032 tasksche.exe来确定哪个工件变体在起作用,从而确定哪种恢复另一个IoC可以基于利用EternalBlue的自动传播代码[16]。此步骤在网络数据包捕获中可以观察到,其形式为服务器消息块(SMB)流量尝试连接到IPC$,然后是异常大的NT TransSMB请求。当人们将这些主机和网络级的IoC与以太坊的状态转换进行比较时,很明显,我们必须考虑完全不同的方法。我们解决了响应以太坊智能合约攻击的问题,类似于响应计算机入侵。事实上,在事件响应过程的早期阶段,分类操作通常会识别受损设备。这是在计算机仍处于通电状态时进行的实时取证IoC构成法医入侵的证据,并且是代表攻击步骤的长期残留物的分类的关键要素[15]。虽然类似的IoC可以被考虑用于针对以太坊运营环境的攻击,但这种方法不适用于智能合约级别。如果我们将合约执行步骤视为状态机,那么我们更愿意处理更新以太坊块的状态转换,向挖掘块添加trans-actions,并操纵EVM的内部状态。因此,我们的首要任务是在一个考虑所有三个级别的模型中精确地抽象智能合约执行。结果是EtherClue DFIR工具(图1)。 1),给定合约账户的地址和易受攻击的代码位置,它利用IoC存储库来识别存储完整区块链历史的存档节点内的潜在漏洞利用交易。显然,EtherClue旨在补充而不是取代漏洞检测器。虽然漏洞检测器可以防止在生产环境中部署一些漏洞,但在这种情况下,区块链并不意味着代码是防弹的。相反,漏洞检测器甚至可能不知道的新攻击可能会导致已经部署智能合约的漏洞发现在这种情况下,可以调查可疑的成功利用。可疑活动的例子可能包括账户余额的意外耗尽,账户陷入特定状态,或与异常高数量的失败交易相关联。来自可疑事务的跟踪被传递到漏洞检测器,可能会显示在部署前分析期间可能会被遗漏的执行路径,或者手动检查。一旦漏洞被确认,其位置将被提供给EtherClue,以获取有关事件的进一步信息主要贡献:这项工作的贡献是多方面的。更确切地说,首先,我们介绍了一个以太坊智能合约执行模型,涵盖了区块、交易和EVM级别,并在此基础上定义了整数低于/高于阈值、拒绝服务和重入漏洞利用类的IoC。此外,我们还介绍了EtherClue,一个新的开源DFIR工具,它利用了这些IoC.我们在合成和真实世界的用例和事务中使用EtherClue进行实验。合成案例的完整数据集已经公开发布,同时发布的还有现实世界的攻击交易标签。 我们的实验结果表明,块级的IoC可以产生的结果比在EVM级的EVM指令轨迹越来越大,而相反的是在合同存储大小的增加。此外,块级别的IoC是合同特定的,并且不如在EVM级别定义的精确因此,必须进一步评估取决于应用的精度和速度的平衡此外,我们还进行了一些以太坊主网案例研究,证明了EtherClue对于EVM级IoC的实用性本文的其余部分结构如下:第2节从智能合约执行的角度概述了以太坊Fig. 1. EtherClue DFIR工具。IoC:妥协指标。S.J. Aquilina等人区块链:研究与应用2(2021)1000283正如在EVM/transaction/ block级别所观察到的那样,由交易触发;第3节将EtherClue与现有的用于数字取证和事件响应的工具一起定位,这些工具通常与以太坊和区块链技术有关;第4节在继续进行IoC定义之前提出了智能合约执行的拟议模型;第5节强调了EtherClue原型实现的主要组件,随后用于第6节的实验。第7节通过强调使用我们的公共数据集产生的结果的影响来结束这项工作,并指出使EtherClue更接近生产就绪状态所需的后续步骤2. 背景定义智能合约攻击的IoC需要描述其区块链执行上下文。当将以太坊视为世界计算机时,智能合约成为操纵其全局状态的程序,其完整性由以太坊的实时区块链主网保护。主网通过参与节点之间的共识和块哈希链的组合来保持同步和不可变。 它们公开了一些函数,这些函数在块挖掘期间由于事务执行而被调用时,会操作此全局状态。反过来,trans-actions的真实性由公钥密码保护。IoC可以仅关注该全局状态作为取证源,或者考虑由各个事务的执行产生的中间状态,直到各个EVM指令作为候选取证源。2.1. 以太坊交易和智能合约以太坊最基本的观点是持有加密货币价值的一系列账户由一个160位地址识别,该地址与一个私钥相关联,用于验证代表账户请求的所有货币转账以太坊是以太坊的加密货币,这些所谓的外部账户之间的转账以交易的形式进行 交易识别源/目的地地址,以太币中的值,以及验证请求的数字签名等。 智能合约提供了一种方法来定义在账户之间移动以太的自定义方式,从而能够开发子货币(代币),钱包,自治治理和分散的赌博/彩票应用程序[18]等。清单1显示了一个简化的钱包智能合约Wallet.sol,用Solidity编写 [19]。合约本身就是区块链上的一个账户,也持有以太币的价值,重要的区别在于它包括代码。sol公开了两个函数,deposit()(第5-12行前者被标记为payable,这意味着它可以接收Ether转账,并且付款(msg.value)被记录在money(永久)存储变量中(第3行)。withdraw()函数接受金额参数作为交易调用数据的一部分,导致进一步 的 内 部 消 息 调 用 ( 第 12 行 ) , 或 者 至 少 如 果 交 易 的 源 地 址(msg.sender)有足够的资金可用清单1. Wallet.sol-Solidity钱包智能合约。清单2. 来自已编译Wallet.sol的字节码片段。S.J. Aquilina等人区块链:研究与应用2(2021)1000284¼图二、由指令执行触发的一种扩充虚拟机级的状态转换。EVM:以太坊虚拟机。在区块链部署和执行之前,智能合约必须编译为EVM字节码,并可能通过多一个交易在以太坊中分配初始值。 EVM是一个堆栈机器,如清单2中所示的已编译Wallet.sol的第2-6行中的典型堆栈操作操作码所示。 第9- 10行涉及通过CALL操作码发出的撤回内部消息调用。 特别令人感兴趣的是GAS操作码。该指令反映了以太坊的gas系统,其中指令执行和内存使用消耗gas [20],由其调用者账户以以太币支付,由STARTGAS交易字段定义。它的值有效地限制了事务执行允许执行的最大计算步骤数。这个概念对于以太坊的反拒绝服务模型至关重要,可以防止意外或恶意的计算浪费[18]。反过来,STARTGAS由与以太坊块相关的GASLIMIT值限制[17]。 在指令执行之前,EVM检查执行指令所需的gas是否被添加到迄今为止的总gas利用率中,超过分配给相应事务的最大gas,当超过时触发气体耗尽异常。通过在第9行执行GAS指令,可用气体的量被压入堆栈,作为后续CALL指令的第一个参数。一般来说,需要与调用其他合约或向账户发送以太币相关的指令,才能将一定量的gas转发给被调用者进行消费。天然气价格由矿工市场驱动,交易创建者指定天然气价格,矿工优先考虑价格优惠的交易。一些网站,例如。 ETH Gas Station 1帮助交易创建者获得正确的天然气价格。2.2. 以太坊状态转换当将以太坊视为状态机时,Wallet.sol的执行会在三个级别上触发状态转换:EVM指令,事务和块挖掘。 在EVM层面,图。 2、合约的持久性存储和EVM的易失性存储器部分表征执行状态,而EVM指令触发转换。 在所有外部调用和(对于某些)内部调用开始时创建一个新的状态。只读数据部分存储调用的参数,其他事务数据,1https://ethgasstation.info/。例如发送方的地址、以太币中的交易值以及区块相关的上下文,例如block的hash和timestamp合约存储也是可用的,在我们的示例中存储货币的键值对。对它的任何更改最终都将在成功执行后的全局状态中反映出来。 堆栈区域是最动态的,图。图3示出了在withdraw()的执行期间由作用于堆栈顶部的一个NULL指令触发的状态转换。事务级别的状态,图。 3,处于更高的抽象级别,并且忽略了EVM级别。相反,它关注的是更新以太坊全局状态的交易。 此状态是外部拥有的帐户和合约帐户的数组,后者与合约代码及其持久存储变量的唯一区别。事务级状态转换,包括初始事务和由此触发的任何内部事务,通过事务字段(例如,目的地账户地址和加密货币值字段)和合约代码执行。如果一个交易调用Wallet.sol的取款函数,金额为1 Wei(1 Ether 1018Wei),则后状态会在货币映射中反映更新后的值交易以块的形式执行,它们被存储为不可变的区块链,以保护全局状态的完整性。 在块级,图。 4,执行状态由这些新接受的事务块(TX)和相关联的块元数据定义,例如, 区块哈希和链接到它的前一个区块的哈希。该级别不考虑由单个事务或EVM级别状态转换生成的中间状态,除了事务接收(RX)内的值或由合约代码生成的日志条目然而,通过通常由以太坊节点提供的事务跟踪[21],可以将事务执行重播到EVM指令级别。 这是通过区块链遍历和访问作为全局状态的一部分存储的合约字节码来重新计算(或缓存)trans-action调用点处的全局状态来实现的。全局状态的完整性由一个称为状态根的散列保护,该散列存储为每个块的一部分2.3. 符号和执行语义支持Oyente符号执行引擎的语义[7]在其他候选者中被选中[22,23],因为它们为智能合约的所需模型提供了更方便的起点S.J. Aquilina等人区块链:研究与应用2(2021)1000285hi→→图3. 由事务执行触发的事务级状态转换。执行.因此,它们覆盖了智能合约执行的所有三个级别,简化了模型开发。它们建立在以太坊黄皮书[17]中提出的形式主义基础上;从现在开始称为EYP,其中由所有外部/-合约账户序列组成的全局状态表示为σ。相反,具有地址γ的单个帐户的状态表示为σ[γ]。 单个外部/合约账户状态σ [γ]是元组balance、nonce、storageHash、codeHash。前两个元组元素对应于账户所拥有的货币的当前值和对数字签名交易的重放攻击的对策。最后两项仅与合同账户相关它们对应于(修改后的)Merkle trie结构(具有完整性保护的键/值存储)的根哈希值[17],分别存储所有合约持久变量和智能合约代码的哈希值。帐户状态可通过世界状态查找功能访问γ→σ[γ],进而需要访问区块链BC以验证帐户状态完整性。EVM/ transaction/block级别的三个执行级别由small-step的语义定义评估(EVM)、成功事务执行(T)和大步评估(EVM),分别更新EVM状态(μ)、σ和BC。使用操作语义规则,每个描述在EVM、事务或块抽象级别的执行,并且结构如下:实验记录n1<$μjσjBC;μ0jσ0jBC0<$经验值2<$μjσjBC;μ0jσ0jBC0<$…执行:expr essio n nnμjσjB C;μ0jσ0jB C0<$μjσjBC<$jTj<$μ0jσ0jBC0见图4。 由块挖掘触发的块级状态转换。S.J. Aquilina等人区块链:研究与应用2(2021)1000286其中表达式描述了如何从前状态评估后状态,并定义了对转换的任何约束在EVM级,提供了EVM的子集的语义,称为EtherLite结合起来,这些语义通知一个符号执行引擎的实现。反过来,Oyente从基于符号对于每个路径,应用许多以指令序列为中心的条件来检测漏洞。这种方法优于动态测试,消除了输入生成的需要,以最大限度地提高代码覆盖率。然而,运行时执行的精确仿真变得至关重要,从而消除了对精确定义的执行语义的需求相比之下,由于EtherClue对来自具体重放事务的跟踪进行操作,因此这不再是一个要求。3. 相关作品与主动防御相比,智能合约攻击的事后检测和恢复是一个受到较少关注的领域。虽然这是可以理解的,但这个问题不容忽视,特别是当人们考虑到漏洞检测器的局限性以及识别恶意或破坏帐户的必要性时。DappGuard[24]是我们在这个方向上发现的最早的努力,重点是研究通过区块链探索提取的交易和交易收据信息是否有助于发现攻击。 它的IoC被称为攻击指纹,并与EtherClue的块级IoC进行比较。类似的方法试图使用机器学习来识别账户和相关交易的区别特征[25,26]。另一方面,TX Spector [27]是最近的相关工作,实际上,与EtherClue的研究并行进行 它采用静态分析方法来处理动态EVM字节码跟踪,因此与我们的EVM级IoC进行比较。使用修改后的以太坊节点导出富含数据和控制流依赖性的指令跟踪。手动编写的逻辑规则用于识别从已知攻击生成的这些痕迹,此时表示为逻辑关系TX Spector可以被看作是Sereum [28]的推广,它采用动态污点分析方法来检测可重入性利用交易。虽然Sereum最初被定位为一个实时检测器,通过定制以太坊节点来实现,但其基础技术仍然可以以事后的方式使用,以类似于T X Spector的方式对交易进行标记。 然而,它的范围仅限于重入攻击,并且不支持编写额外的检测器规则或IoC,分别根据T X Spector或EtherClue。最终,EtherClue和TX Spector的目标是相似的,但有一个关键的区别。 T X Spector虽然能够检测漏洞利用事务,但实际上被视为动态漏洞检测器,对已执行事务的指令跟踪进行操作,而不是考虑静态分析工具必须考虑的所有可能的执行路径。另一方面,EtherClue的定位是补充漏洞检测器,跟踪在部署的合同中检测到的漏洞能力,调查合同是否已经受到攻击以及涉及哪些账户其结果是,更简单的检测规则集中在执行的副作用,而不是基于程序分析的。此外,EtherClue的操作语义基础已经支撑了Oyente的符号执行引擎,甚至可以为自动化IoC生成提供基础。其他作品有可能在事件响应期间补充EtherClue。首先,识别的漏洞利用交易可以用于检测与同一事件相关的其他攻击交易,而不一定是漏洞利用交易本身,例如, 与建立恶意智能合约或将被盗货币转移到金融服务合约相关的交易。[29]这是唯一的一种工具。我们知道,在给定攻击事务的种子集的情况下,它使用图形相似性执行数据分析,以及基于人工检查的攻击事件链的时间序列分析,以识别进一步的事件相关事务。另外两项研究[30,31]解决了存档节点规模不断增加的问题以及对区块链分析的影响。一些探索的方面包括并行map/reduce的应用和不损害高精度事务重放的不完整状态存储的实践一旦识别出事后攻击交易,后续步骤就是优雅恢复。一种方法是在智能合约编程阶段使用安全模式为恢复做准备。紧急停止模式[32]涉及在满足某些条件时停用关键合同功能,仅留下提取资金的可能性。虚拟升级模式[33]不那么激烈,其中关键功能仅通过代理合约公开,该合约可以动态地将事务路由到后端合约。这种模式提供了灵活性,在运行时将事务重新路由到打了补丁的合约。自动修补可以加快这种时间关键型操作,进一步减少攻击的机会窗口[34]。其他研究的范围与EtherClue的完全不同例如,使用蜜罐进行威胁分析可以揭示鲜为人知的攻击技术[35]。ContractLarva是一种安全验证工具,可以通过使用安全属性验证来检测智能合约,从而防止漏洞利用成功[36]。 虽然这种方法提高了智能合约的安全级别,但它只能针对定义的属性,并以额外的天然气消耗为代价。 从事件响应的角度来看,对加密货币驱动的区块链的调查还涉及在法务会计工作中与欺诈、勒索、洗钱和逃税有关的交易[37,38]。最后,许可/私有区块链可以用于数字证据的监管链管理[39,40]。4. EtherClue IoCs智能合约执行的模型包含状态转换的所有三个抽象层次,即EVM、交易和区块级别。 基本状态转换建立在Oyente [ 7 ]使用的操作语义上,而EtherClue的IoC是根据基本定义的附加约束来定义的。4.1. 智能合约执行Oyente [7]的原始语义主要用于精确仿真,为我们的模型提供了一个合适的起点。一些修改/添加是必要的,以适应EtherClue的数字取证需求,如下所示:引入一个新的世界国家地图,支持检索过去的全球国家。根据EYP中的定义,为区块、交易和相关结构提供自定义定义,以便只关注感兴趣的取证来源。同样,抽象出块挖掘过程的细节。用交易收据增强模型,因为这些收据构成了有关单个交易执行的证据。通过指示易受攻击代码的位置来增强EVM级别的操作语义。EVM级语义是在分组指令类上定义的,而不是针对EtherLite(Oyente考虑的EVM指令子集通过这种方式,可以方便地在多个EVM指令上定义单个IoC为EVM和块级别提供IoC模板,以在事务重放期间检测●●●●●●●S.J. Aquilina等人区块链:研究与应用2(2021)10002871/4A]¼μdef¼AR·Ajε¼参数1表1示例性的EVM级转换是根据如何观察重放的事务跟踪内的特定EVM(以太坊虚拟机)操作码来改变抽象EVM状态μ来描述的。M[pc]条件μ0PUSH81–hhid,M,pc,l,siA,σihid,M,pc1,l,1siA,σi推85–hhid,M,pc,l,1siA,σik¼5 ←pop(s)hhid,M,pc1,1,51siA,σiSSTORE v1←pop(s)hhid,M,pc1,l,51siA,σiσ0←σ[id][storage][khhid,M,pc,l,siA,σ0i定义4.3.激活记录AR存储在激活记录七!v]注意:其中堆栈A定义为:的def正常 jEXC·A我们现在列出所有定义,支持EtherClue的IoC的执行模型,通过将它们封闭到一个带框的边框中来显式突出EtherClue特定的部分。全局状态σ是一个账户数组,可由160位合约地址γ识别。我们还采用了σ[γ]s和σ[γ]c表示法,以方便地分别引用实际存储和代码内容,而不仅仅 是 根 哈 希 , 并 且 通 过 它 来 访 问 它 们 的 内 部 元 素 , 例 如 。σ[γ]s[varname]。根据EYP定义4.1. 以太坊账户σ[γ]被定义为元组:σ½γdefnonce;balance;storageHash;code Hash;其中,nonce表示用作对抗措施的新数字一个正常的def正常其中,“定义4.4.对于激活记录堆栈A和提供执行上下文的以太坊账户σ(参见定义4.1),我们将EVM状态μ定义为元组:¼〈A;σ〉定义4.5. 我们将EVM状态μ到EVM状态μ0的转换抽象为EVM状态μ 0,由重放事务跟踪中的EVM操作码触发,并将其称为小步评估,表示为μmμ0。transaction replay攻击;balance表示Wei中的帐户余额(1注意,在表1中,a[iv]计算为与a相同的新数组,Wei 10- 18 Ether);storagehash表示合约存储的Merkle trie的根哈希,codeHash表示相关联的智能合约EVM代码的哈希。4.1.1. EVM水平这个级别的定义是在当前全局状态σ的上下文中执行的所有智能合约的精神中表达的,并且可以通过EVM操作码的踪迹来观察,如通过trans-mix导出的由支持debug_-的以太坊节点重放的操作2但是在位置i处存储新值v。在EtherClue中,我们选择在分组指令类上定义IoC,并需要漏洞的位置及其相关参数。这既合理又实用,因为EtherClue的范围补充而不是取代漏洞检测器。此外,IoC定义可以只关注漏洞利用副作用的识别,而不关注漏洞本身的性质。我们使用的表示法NAME通过NAME标识EVM指令类。参数列表PARAM1类的问题。例如,INT将多个整数算术分组traceTransactionAPI调用。示例见表1激活记录AR的激活记录栈A用于实现内部事务执行的机制一旦当前嵌套事务将控制返回给其调用者,ARs就跟踪要恢复的EVM状态μ外部事务的A总是以空(ε)开始。每当抛出异常EXC时,它都会被放置在堆栈的顶部,取代最顶部的AR,有效地将控制权返回给它的调用者,要么处理EXC,要么在调用堆栈中进一步冒泡AR反映了在调用者恢复之后要恢复的μ,因此必须跟踪执行代码的地址(只是Oyente定义的补充),代码本身和恢复时要执行的下一条指令,以及堆栈和易失性随机存取存储器的瞬态内容,这些内容在内部事务执行之前已经被清除。因此μ包括电流A和其执行的电流σ这个级别上的状态转换由小步评估(small-step evaluation,简称μs)来描述,并反映了跟踪事务所获得的μsEVM级别的完整定义列表如下:指令就Solidity源语言结构而言,这种分组涵盖了所有可能的整数子类型(UINT 8 -256,INT8- 256)。对于特定的子类型,需要对算法进行重新定义,以确定下限/上限。这些参数假定源代码(可能是反编译的)可用。另一方面,VULN_LOCS是属于检测到的漏洞的一组代码偏移量,使用与之相关联的来自M的代码偏移量来实例化,并且其中每个操作码都属于NAME。为了提供一个通用的模板,EVM级IoC被定义为一系列约束表达式,定义在μ、μ0和VULN_LOCS、PARAM1当所有谓词表达式对于特定的小步计算都计算为true时,相应的事务将在重放执行期间被标记为漏洞利用。更2https://geth.ethereum.org/docs/rpc/ns-debug#debug_tracetransaction。定义4.2.我们将激活记录(AR)定义为元组AR定义 1/4id;M;pc;l;s;其中,id表示执行代码的γ,M表示智能合约的EVM代码,pc表示表示到M的偏移的程序计数器,并且l,s表示随机存取易失性存储器中的瞬态数据和相应的堆栈存储器数据正常S.J. Aquilina等人区块链:研究与应用2(2021)1000288→hiTX定义→→σσT形式上:定义4.6.我们将EVM级别的IoC模板定义为EVM指令类:VULN-LOCS←M 偏移expr ession1μ;μ0;VULN-S;PARAM1expr ession2μ;μ0;VULN-S;PARAM1…参数1名称expr essionnμ;μ0;VULN-S;PARAM1μ⇝μ0其中,M个偏移是属于漏洞的一组代码偏移; VULN_LOCS是表示上述一组代码偏移的符号常数。匹配IoC的EVM指令类;PARAM1代码偏移;μ,μ0表示EVM级前/后状态;NAME是4.1.2. 事务级在这一层次上,我们考虑了可信交易T的发送者、收件人、价值和数据元素作为证据来源。 这些元素对应于源/目的地地址、正在转移的加密货币数量以及标识合约的公共函数和参数的数据字段。事务作为0的序列执行(当目标也是外部账户)或更多的小步评估。在这个级别上的状态转换T对σ进行操作,将对应于T的值的加密货币转移到σ [to]的余额。对σ的进一步更新可以作为在小步长评估结束时执行σ [to] c的结果而发生。最终定义包括EYP中定义的事务属性子集以及Oyente为交易执行提供的定义,要么成功结束,要么出现异常。在后一种情况下,与交易相关联的货币不会被转移,并且对全局状态的更改不会被提交。在定义4.8中,在保持事务执行的原始语义的同时,它的定义是在其原始定义中反映修改。其中,TX-SUCCESS表示成功完成的事务;而TX-EXCEPTION表示以抛出异常结束的失败事务;σ,σ00表示前/后(全局)状态;而σ0表示在智能合约执行之前存储新目标账户余额的临时(全局)状态;*表示0或更多小步的序列评估(ESTA),这取决于目标地址是否是智能合约帐户或没有;EXC是抛出的异常。虽然块级别的定义需要事务级别的定义,但我们认为这个级别的IoC是不必要的。 检测此级别的IoC将首先访问状态σ和σ00,在此级别的IoC将被定义。 虽然块级别的交易收据(见定义4.11)可以揭示这些状态的构成,但它们的完整特征却不能。相反,可以计算σ和σ00的唯一方式是通过执行σ *。由于这相当于在EVM级别执行相同的处理,该级别也可以访问σ,σ00,EVM级检测胜过事务级检测,无需额外成本。4.1.3. 块级该级别涉及在成功的块挖掘期间从事务池集合T中选择的批量事务序列TX的执行。成功的事务执行导致事务接收Rx(我们只考虑日志条目logs和事务状态代码statusCode)被添加到块的接收序列RXs。因此,新挖掘的块β执行大步骤评估,在具有批执行的n个事务之后从全局状态σ0直接转换到σn最后,β被附加到区块链BC,包括迄今为止挖掘的所有区块的序列。总的来说,我们忽略了共识协议的细节,这些细节被认为不能作为法医证据来源,例如。 区块挖掘过程的详细信息,例如工作量证明,或在整个以太坊对等网络中传播非法开采的区块。然而,我们在这里不关心执行下一个事务块,而是关心如何执行一个事务块,并在执行过程中验证该事务块的执行情况。相应的漏洞构成过渡,在此期间,发生了。为了将这种能力添加到我们的模型中,我们增强了世界状态ω映射的概念,使其能够从过去获取任何状态根(对应于块β的全局状态的散列)并返回其相应的σstateRoot。这种增强的定义自然也适用于EVM级别的IoC,通过它,它们首先获得重放事务跟踪的能力。因此,我们说EtherClue在Archive NodeBC,ω上运行。由此产生的定义,省略了EtherClue未使用的细节,并添加了归档节点的概念,如下所示。首先,我们使用Oyente对交易序列的定义定义4.9.事务序列TXs是n个事务交易¼ðT1;定义4.8.交易EX交易时间:发送者;到;值;数据发送者<$TM<$σ½to]cσ0←σtobalanceσ至平衡值![]TX-成功:不〈〈to;M;0;data;ε〉·ε;σ0〉⇝*〈ε;σ00〉σT00发送者;到;值;数据发送者<$TM<$σ½to]cσ0 ← σ<$t o]<$2余额7!平衡值〈〈to;M;0;data;ε 〉·ε;σ0〉⇝*〈EXC·ε;σ00 〉X-例外:→σ定义4.7.我们定义一个事务T的子集,EYP的定义,作为元组T定义sender;to;value;data,其中sender表示发送者的帐户,d¼dressγ,to表示目标的帐户。账户地址γ0,value表示以Wei为单位的交易金额,data表示呼叫数据。 这是一个数组,包含目标公开的公共函数的哈希值,后跟函数参数。定义4.10.我们将交易池Γ定义为任意大小m的交易序列Ti:Γdef1/4 fT;0m的可以从其中以任何顺序选择大小为n的TX,并且m>n。定义4.11. 我们将交易收据R定义为元组:R定义1/4日志;状态代码;其 中 , logs 表 示 由 EVMLOGX 操 作 码 创 建 的 事 件 日 志 条 目 ,statusCode表示事务状态代码(成功或失败)。定义4.12.我们将收据序列RX定义为n个交易收据的有序序列RXs1/2def R;1nS.J. Aquilina等人区块链:研究与应用2(2021)1000289喜喜喜喜定义4.19.块级IoC模板:表达式1. σ0;σn; β母体表达 σ;σ;β;β20n.母…脆弱性:表达 σ;σ;βn0n母.;βαBC;σ0; αBC·β;σn; αΣΣ其中,Vulnerability是IoC所属的漏洞类别名称;β、βparent分别表示正在调查的块及其父块;σ0、σn分别是前/后全局状态。在β0s加法及其相应的全局状态σ0;hBC<$β之前,hBC,σ0,i表示包括BC的块级预状态状态σn,当beta被附加到BC并执行其n个事务时产生;表达式i是在σ0,σn,βparent,β上定义的操作语义,只要所有谓词表达式的值为真,就会发生IoC匹配σn,i表示块级后状态,其反映新的全局我们使用来自EYP的区块定义的子集,因为它被认为与法医来源相关。完全无用,因为它需要重做在EVM级别执行相反,从我们想要研究的块β开始,我们使用在大步骤评估期间计算的ω来查找所需的BC,σ0及其对应的BCβ,σn,而不是通过完整的事务重放来导出后者净效果是粗粒度重放的效果,其中区块链和BC处的副作用和全局状态(σ)在块批次中可用,即对于BC,σ0和BC<$β,σn,但不是中间σi,或任何μ。为了定义所需的部分重放,我们使用了大步骤查找方法:定义4.18.对于区块链BC中的给定块β,在交易中,我们定义其相关的Big Step Lookup算法为:BIG-STEP-LOOKUP:σn←ω½β½stateRoot]]σ0←ωβparent½stateRooot]βparent←β½parent]σ0βBC·β;σn β其中,βparent表示通过存储在β[parent]中的其块散列检索的β0sparent;σ0和σn分别是对应于βparent和β的全局状态,其中σn表示一旦执行β0sn事务时的全局状态更新;σ0和σn都是通过世界地图ω检索的,而不是计算的。对于一个公共模板,块级IoC由定义在历史σ0/σn对上的表达式组成,反过来,使用最近的ω及其相应的βs导出。当所有
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- 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
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功