TEETHER:发现以太坊的自动化漏洞

发表于:2019-11-05 10:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:慕测科技    来源:今日头条

#
漏洞
  1.1 引用
  Krupp, Johannes, and Christian Rossow. "teether: Gnawing at ethereum to automatically exploit smart contracts." 27th {USENIX} Security Symposium ({USENIX} Security 18). 2018.
  1.2 摘要
  比特币一类的加密货币不仅提供分散的货币,而且还提供了一种处理交易的程序化方式。以太币是比特币以外的第二大加密货币,它是第一个提供图灵完备语言来指定交易处理的平台,从而实现所谓的智能合约。这样的交易方式为攻击者提供了一个合适的环境,因为安全漏洞与经济利益紧密相关。在本文中,我们考虑智能合约的自动漏洞识别和漏洞利用生成问题。 我们开发了易受攻击合同的通用定义,并使用它来构建 TEETHER,这个工具允许仅在给定二进制字节码的情况下为合同创建漏洞。我们对所有 38,757 个以太坊合同进行了大规模分析,在其中 815 个合约中我们的工具找到了完全自动化的工作漏洞。
  1.3 技术介绍
  加密货币被广泛认为是过去几年中最具破坏性的技术之一。他们的核心价值主张是提供分散的货币,不受银行这种中心系统的支持,而是建立在密码学和分布式计算的概念之上。这是通过使用区块链来实现的,区块链是一种可公开验证的仅附加数据结构,其中记录了 所有交易。该数据结构由对等网络维护。该网络的所有节点遵循协商一致协议,该协议管理事务处理并使区块链保持一致状态。此外,共识协议保证区块链不能被攻击者修改,除非它们控制整个网络中的大部分计算能力。
  虽然比特币仍然是主要的加密货币, 但它也激发了许多衍生系统。其中最受欢迎的是以太坊,它是 2018 年中期按市场总体市值计算的第二大加密货币。 以太坊大大扩展了共识协议处理事务的方式:虽然比特币允许指定在处理事务时要执行的简单检查, 但以太坊允许以图灵完备语言指定这些规则。这使得以太坊成为所谓的智能合约的头号平台。 智能合约在字面上可以看作是在代码中形式化的合同。在以太坊中,智能合约是用一种名为 Solidity的高级 JavaScript 语言定义的,然后被编译成适合以太坊虚拟机(EVM)理解的字节码表示。缔约方可以通过以太坊的交易与本合同互动。 共识协议保证了 EVM 中正确的合同执行。 当然,增加的复杂性是以增加风险为代价的,以太坊的图灵完备稳定性比比特币中指定的简单检查更容易出错。更糟糕的是,一旦部署,智能合约就是不可变的,无法修补或更新。这导致了无与伦比的软件漏洞和经济损失的耦合。事实上,自 2015 年以太坊诞生以来,已经发现了几起智能合约漏洞,导致数千万美元的损失。随着以太坊变得越来越受欢迎和有价值,智能合约漏洞的影响只会增加。 在这项工作中,我们解决了自动漏洞发现的问题, 更确切地说,是一般的自动漏洞。我们的攻击者模型假设一个常规的没有特殊功能的以太坊用户,其目标是从给定的合同中抓住漏洞。为此,我们首先给出合同脆弱性的通 用定义。我们的定义基于以下观察:从一个账户(合同)到另一个账户的价值转移只能在少数明确的条件下进行。特别是,我们确定了价值转移中必然涉及的四个关键的低级 EVM 指令:一个用于创建常规事务( CALL ),一个用于合同终止 ( SELFDESTRUCT ) , 两 个 用 于 代 码 注 入 (CALLCODE,DELEGATECALL)。 我们提出了一种方法,用于在合同中查找易受攻击的命令进行跟踪,并使用符号执行来自动创建漏洞利用。 我们的方法如下:我们在合同的控制流程图中搜索某 些关键路径。具体来说,我们确定了导致关键指令的 路径,其中指令的参数可以由攻击者控制。找到路径 后,我们利用符号执行将此路径转换为一组约束。使 用约束求解,我们可以推断出攻击者必须执行的事务 才能触发漏洞。智能合约的特殊执行环境使这成为一 项非常重要的任务。最值得注意的是,我们展示了如 何以符号方式处理哈希值,这些哈希值在智能合约中 广泛使用。 为了证明我们的方法的实用性,我们最终对从区块 链中提取的 38,757 个独立的合同进行了大规模分析。 TEETHER发现了 815(2.10%)个合同的完全自动化的漏洞,无需人工干预或手动验证,也不需要合同源代码。由于代码共享,这使得至少 1,731 个账户的资金面临风险。此外,一个案例研究表明,许多潜在的漏洞是由 Solidity 的设计选择和对 EVM 执行模型的误解造成的。
  1.3.1 智能合约漏洞
  智能合约通常会强制控制允许谁与他们互动。一个特别重要的保证是合同只允许“授权”以太坊账户接收存储在合同中的货币。在这种情况下,如果合同允许攻击者将以太币从合同转移到攻击者控制的地址,则合同很容易受到攻击。从这些易受攻击的合同中,攻击者可以窃取存储在其中的所有(或至少部分)以太币,这可能导致合同所有者的全部价值损失。 我们现在描述如何识别以太坊合同中的此类漏洞。 我们的想法是静态分析合同的代码,以揭示可能被滥用以窃取合同中存储的以太网的关键代码部分。为此, 我们将描述上述漏洞如何映射到 EVM 指令。我们确定了四条关键的 EVM 指令,其中一条必须执行才能从合同中提取以太币。这四条指令分为两类:两条指令导致直接传输,两条指令允许在契约的上下文中执行任意以太网字节码。
  以太坊正式规范中描述的两条 EVM 指令允许将值传送到给定地址:CALL 和 SELFDESTRUCT。CALL 指令执行常规事务,如果攻击者可以在使用非零第三堆栈参数执 行 CALL 指令时控制第二个堆栈参数(to),则它们可以使合同将值传输到其控制下的地址。 SELFDESTRUCT 指令用于终止合同,这将导致合同被删除,不允许进一步调用此合同。SELFDESTRUCT 采用一个地址参数,该合同的所有剩余资金将转移到该地址。如果攻击者在控制最顶层的堆栈元素时可以导致执行 SELFDESTRUCT 指令,他可以获得所有合同的资金,并导致该合同的永久拒绝服务。
  虽然 CALL 和 SELFDESTRUCT 是允许攻击者直接将资金从合同转移到给定地址的两条指令,但这并不意味着缺少这两条指令的合同不易受到攻击。为了便于库和代码重用,EVM 提供 CALLCODE 和 DELEGATECALL 指令,允许在当前合同的上下文中执行第三方代码。CALLCODE 非常类似于 CALL,唯一的例外是它不执行事务,而是当前合同本身就可以看做它的代码。DELEGATECALL是同样的,但保持发送者和值得原始值。
  1.3.2 智能合约脆弱状态
  总而言之,对以太坊指令的系统分析使我们能够精确定义合约何时处于脆弱状态:
  定义 1(关键路径)。关键路径也是潜在的执行跟踪方式。
  1. 导致执行带有非零第三堆栈元素的 CALL 指令, 其中第二个堆栈参数可以在外部控制。
  2. 导致执行 SELFDESTRUCT 指令,其中第一个堆栈参数可以在外部控制。
  3. 导致执行 CALLCODE 或 DELEGATECALL 指令,其中第二个堆栈参数可以从外部控制。
  定义 2(脆弱状态)。
  如果事务可以导致执行关键路径,则合同处于易受攻击状态。 我们将通过其中一个关键指令作为关键事务来调用利用易受攻击状态的合同的事务。
  1.3.3 TEETHER
  下图显示了TEETHER的整体架构。首先,CFG回复模块反汇编EVM字节码并重构建控制流图(CFG)。接下里,扫描此CFG以获取相关指令以及状态变更指示。路径生成模块探索来自CFG根的路径,这些路径通向这些指令,约束生成模块通过符号执行从中创建一组路径约束。最后,漏洞利用生成模块解决了关键路径和状态变化路径的组合约束以产生可利用的漏洞。
 
  图1 TEETHER整体架构
  当我们开始搜索漏洞时,我们的评估会将合同的存储初始化为空状态。这使我们能够结合共享相同代码的合同分析,将工具运行次数从 784,344 减少到 38,757,并将整个运行时间减少了大约 20 倍。但是,这是以不精确的结果为代价的。 正如我们已经在 112 个案例中观察到的那样,针对具有空存储的合同起作用的漏洞可能不会对具有已填充存储的同一合同起作用。相反,我们当前的评估可能也会错过仅在存储包含某些条目时才有效的漏洞利用。然而,这不是 TEETHER 的基本限制,可以通过从真正的以太坊区块链中检索实际存储状态, 并将其重新应用到我们的本地测试平台来解决。虽然它需要单独处理所有折叠的非唯一合同,因为每个地址都有自己的存储状态,所获得的结果将是合理的。
  1.4 本文主要贡献
  我们总结了我们的核心贡献如下:
  1. 我们基于低级 EVM 指令提供了易受攻击合同的通用定义。
  2. 我们开发了一个工具TEETHER,它仅从合同的字节码提供端到端的可利用漏洞生成。为此,我们解决了几个特定于 EVM 的挑战,例如象征性地处理哈希值的新方法。
  3. 我们提供了从以太坊区块链中提取的 38,757 个独立的合同的大规模脆弱性分析。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号